【问题标题】:How to grant access to s3 image url to specific cloud service如何授予对特定云服务的 s3 图像 url 的访问权限
【发布时间】:2016-12-08 14:42:14
【问题描述】:

默认情况下,在 s3 中上传图片时,url 是私有的。我可以通过在控制台上添加权限来使它们公开,但我不想对每个图像都这样做,我想自动化它。我正在使用通过 url 访问图像的非 AWS 云服务。该服务无法访问图像,因为 URL 是私有的。如何将网址公开给特定服务?公开整个存储桶不是一种选择。

【问题讨论】:

    标签: amazon-web-services amazon-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,它具有可用于授权下载的原始访问身份,但我怀疑这不相关,在这里)。如果服务使用提供的 URL,您只需向服务提交预签名的 URL,即可授权下载。

    【讨论】:

    • 如何创建预签名网址?
    • 通过URL访问图片的服务是Google Cloud Vision。
    • 有很多方法,最简单的可能是aws s3 presign 使用cli
    • 有效!我创建了一个吐出预签名网址的代码,非常感谢。 :)
    【解决方案2】:

    我写了一个 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)
        )
    

    预签名的 url 可以被任何云服务访问,只要它们是由授权用户创建的。 Google 很乐意接受这些网址。也可以添加过期时间,从而避免将整个存储桶公开。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-06
      • 1970-01-01
      • 2012-02-03
      相关资源
      最近更新 更多