2016-12-07 14 views
0

イメージがデフォルトでs3にアップロードされると、URLは非公開です。コンソールに権限を追加することでそれらを公開することはできますが、私はすべてのイメージに対してそれを実行したくないので、自動化したいと思っています。私は、URLを介して画像にアクセスする非AWSクラウドサービスを使用しています。 URLはプライベートであるため、サービスは画像にアクセスできません。 URLを特定のサービスに公開するにはどうすればよいですか?バケット全体を公開することは選択肢にはなりません。特定のクラウドサービスにs3イメージURLへのアクセスを許可する方法

答えて

1

S3の個々のオブジェクトは、オブジェクトが作成されたときに、初期アップロード要求で要求ヘッダーx-amz-acl: public-readを設定することでパブリックにすることができます。 「特定のサービスに」

http://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPUT.html#put-object-acl-specific-request-headers

公開は有効な概念ではありません。 S3には「サービス」がアクセスしている感覚がありません(ただし、「サービス」はCloudFrontで、ダウンロードの許可に使用できるOrigin Access Identitiesがありますが、ここでは関連性がないと思われます)。サービスが提供されたままのURLを使用している場合は、事前に署名されたURLをサービスに提出するだけでダウンロードが許可されます。

+0

事前署名済みのURLを作成するにはどうすればよいですか? –

+0

URL経由で画像にアクセスするサービスはGoogle Cloud Visionです。 –

+0

いくつかの方法がありますが、最も簡単なのはおそらく '[cli](http://docs.aws.amazon.com/cli/latest/reference/s3/presign.html)を使って' aws s3 presign'でしょう。 –

0

私はpresigned URLを吐くpythonスクリプトを書いた。

import sys 
from boto.s3.connection import S3Connection 

def sign(bucket, path, access_key, secret_key, https, expiry): 
     c = S3Connection(access_key, secret_key) 
     return c.generate_url(
       expires_in=long(expiry), 
       method='GET', 
       bucket = bucket, 
       key=path, 
       query_auth=True, 
       force_http=(not https) 
    ) 

登録されたURLは、許可されたユーザーによって作成されている限り、任意のクラウドサービスからアクセスできます。 GoogleはこれらのURLをうれしく受け入れています。有効期限も追加できるので、バケット全体を公開する必要はありません。

関連する問題