2016-12-07 59 views
0

默認情況下,圖片在s3中上傳時,這些網址是私有的。我可以通過在控制檯上添加權限來公開它們,但我不想爲每個圖像都做這件事,而是想自動化它。我正在使用非AWS雲服務通過url訪問圖像。由於這些網址是私密的,因此該服務無法訪問該圖片。我如何使這些網址公開到特定的服務?公開整個存儲桶不是一種選擇。如何將s3圖片網址的訪問權限授予特定的雲服務

回答

1

在創建對象時,可以通過在初始上傳請求中設置請求標頭x-amz-acl: public-read來公開S3中的單個對象。

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

公衆「特殊服務」不是一個有效的概念。 S3沒有意識到哪個「服務」正在訪問它(除非「服務」恰巧是CloudFront,它具有Origin Access Identities,它可以用來授權下載,但我懷疑這不是相關的)。如果服務使用所提供的URL,則可以簡單地向服務提交預先簽名的URL,以便授權下載。

+0

如何創建預先簽名的網址? –

+0

通過URL訪問圖片的服務是Google Cloud Vision。 –

+0

有許多方法,使用[cli](http://docs.aws.amazon.com/cli/latest/reference/s3/presign.html),最簡單的方法可能是'aws s3 presign'。 –

0

我寫了一個python腳本,吐出預先登記的URL。

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) 
    ) 

的presigned網址可以依只要它們被授權的用戶創建的雲服務進行訪問。 Google樂於接受這些網址。人們也可以添加到期,從而避免公開整個桶。

相關問題