默认情况下,当在s3中上传图像时,网址是私有的 . 我可以通过在控制台上添加权限来公开它们,但我不想为每个图像都这样做,想要自动化它 . 我正在使用非AWS Cloud 服务,通过URL访问图像 . 该服务无法访问该图像,因为网址是私有的 . 如何将网址公开给特定服务?让整个桶公开不是一种选择 .
通过在创建对象时在初始上载请求中设置请求标头 x-amz-acl: public-read ,可以使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,以便下载授权 .
我写了一个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) )
任何 Cloud 服务都可以访问预先签名的URL,只要它们由授权用户创建即可 . 谷歌很乐意接受这些网址 . 也可以添加到期时间,从而避免将整个桶公开 .
2 回答
通过在创建对象时在初始上载请求中设置请求标头
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,以便下载授权 .
我写了一个python脚本,吐出预先签名的网址 .
任何 Cloud 服务都可以访问预先签名的URL,只要它们由授权用户创建即可 . 谷歌很乐意接受这些网址 . 也可以添加到期时间,从而避免将整个桶公开 .