Min, Looking through the code, I think we can simplify driver operation and increase robustness by changing ImageStoreDriver#createEntityExtractUrl() : String to ImageStoreDriver#readEntity(…) : InputStream. My first concern with the current implementation is that it circumvents any connection pooling/resource management underlying client libraries provide. I/O streams provide a higher-level abstraction that allows drivers to provide the orchestration components with actual resources rather String references. Second, the current interface seems to appears to assume that an http/https URL will be returned. With I/O streams, we can support any client library capable of using the standard I/O framework -- enabling us to support other protocols for downloading templates in the future (e.g. RBD, local filesystem, NBD, etc).
Thanks, -John On Jun 18, 2013, at 1:11 PM, Min Chen <min.c...@citrix.com> wrote: > A new version of using generatePresignedUrl in S3ImageStoreDriverImpl is > checked into object_store. > > THanks > -min > > On 6/18/13 8:29 AM, "Min Chen" <min.c...@citrix.com> wrote: > >> Yes, current code is in S3ImageStoreDriverImpl.createEntityExtractUrl, >> which has a security issue mentioned in CLOUDSTACK-3030. I am going to >> change it to use generatePresignedUrl api from AWS S3 api. >> >> Thanks >> -min >> >> From: John Burwell <jburw...@basho.com<mailto:jburw...@basho.com>> >> Date: Tuesday, June 18, 2013 8:07 AM >> To: Min Chen <min.c...@citrix.com<mailto:min.c...@citrix.com>> >> Cc: Thomas O'Dowd <tpod...@cloudian.com<mailto:tpod...@cloudian.com>>, >> "dev@cloudstack.apache.org<mailto:dev@cloudstack.apache.org>" >> <dev@cloudstack.apache.org<mailto:dev@cloudstack.apache.org>> >> Subject: Re: Query String Request Authentication(QSRA) support by S3 >> providers >> >> Min, >> >> Is the code checked into the object_store branch? If so, which lines in >> S3TemplateDownloader? >> >> Thanks, >> -John >> >> On Jun 18, 2013, at 12:39 AM, Min Chen >> <min.c...@citrix.com<mailto:min.c...@citrix.com>> wrote: >> >> Hi John, >> >> This is regarding extractTemplate api, where for extractable template, >> users can click "Download Template" button from UI to get a http url to >> download the template already stored at S3 without providing S3 >> credentials. In 4.1, we don't have this issue, since the URL returned is >> the public web server location hosted in ssvm, and in 4.2, we are >> returning URL pointing to s3 object. Without setting ACL to the S3 >> object, user cannot directly click the URL returned from extractTemplate >> api to download the template without providing credentials. By reading >> the AWS SDK doc today, I ran across the following API that I may be able >> to use for this purpose: >> >> >> URL<http://java.sun.com/j2se/1.5.0/docs/api/java/net/URL.html?is-external= >> true> >> generatePresignedUrl<http://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/ >> com/amazonaws/services/s3/AmazonS3Client.html#generatePresignedUrl%28java. >> lang.String,%20java.lang.String,%20java.util.Date,%20com.amazonaws.HttpMet >> hod%29>(String<http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.ht >> ml?is-external=true> bucketName, >> String<http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html?is-ex >> ternal=true> key, >> Date<http://java.sun.com/j2se/1.5.0/docs/api/java/util/Date.html?is-extern >> al=true> expiration, >> HttpMethod<http://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazon >> aws/HttpMethod.html> method) >> Returns a pre-signed URL for accessing an Amazon S3 resource. >> >> This is along the same line as QSRA mentioned by Tom, by wrapped in >> AmazonS3Client for easy consumption. By using this method, I think that I >> don't need to change ACL of S3 object to open a security hole. >> >> Thanks >> -min >> >> From: John Burwell <jburw...@basho.com<mailto:jburw...@basho.com>> >> Date: Monday, June 17, 2013 7:38 PM >> To: Min Chen <min.c...@citrix.com<mailto:min.c...@citrix.com>> >> Cc: Thomas O'Dowd <tpod...@cloudian.com<mailto:tpod...@cloudian.com>>, >> "dev@cloudstack.apache.org<mailto:dev@cloudstack.apache.org>" >> <dev@cloudstack.apache.org<mailto:dev@cloudstack.apache.org>> >> Subject: Re: Query String Request Authentication(QSRA) support by S3 >> providers >> >> Min, >> >> Why are we mucking with ACLs at all? The best security practice would be >> to create a bucket for CloudStack's use and assign it a dedicated access >> key and secret key pair with read/write access only to that bucket. >> Requiring an administrative account to an object store opens an >> unnecessarily large attack surface. Therefore, as implemented in 4.1, we >> should defer bucket creation, ACL assignment, and credential creation to >> the administrator/operator. >> >> Thanks, >> -John >> >> On Jun 17, 2013, at 1:15 PM, Min Chen >> <min.c...@citrix.com<mailto:min.c...@citrix.com>> wrote: >> >> Tom filed a very good bug for ACL setting change on S3 object when users >> issue extractTemplate API >> (https://issues.apache.org/jira/browse/CLOUDSTACK-3030), and his >> recommendation of using Query String Request Authentication (QSRA) >> alternative sounds like a right approach to fix this bug. Before >> implementing it, I would like to confirm if QSRA should be supported by >> all S3 providers if they claim that they are AWS s3 compatible. If so, we >> will make this assumption in our code. Based on Tom, Cloudian is >> supporting it. How about RiakCS, John? >> >> Thanks >> -min >> >> >