【问题标题】:Setting specific permission in amazon s3 boto bucket在 amazon s3 boto 存储桶中设置特定权限
【发布时间】:2016-11-10 01:24:10
【问题描述】:

我有一个名为“ben-bucket”的存储桶,里面有多个文件。 我希望能够为每个文件 URL 设置权限。 我不太确定,但我假设我是否想要存储桶中每个文件的 URL。 我的网址会是这样吗?

https://ben-bucket.s3.amazonaws.com/<file_name>

所以基本上,我想设置对该 URL 的公共访问。我该怎么做? 这个我试过了,不行

    bucket = s3.Bucket('ben-bucket').Object('db.sqlite')
    bucket.BucketAcl('public-read')
    print bucket_acl

提供的代码。 db.sqlite 是我的bucket里面的文件之一 ben-bucket 代码不起作用。我希望能够公开访问以下 URL

https://ben-bucket.s3.amazonaws.com/db.sqlite

我提供的代码没有设置公开阅读权限。

【问题讨论】:

    标签: python amazon-s3 amazon boto


    【解决方案1】:

    默认情况下,Amazon S3 中的所有对象都是私有的。然后您可以添加权限,以便人们可以访问您的对象。这可以通过以下方式完成:

    • 访问控制列表单个对象的权限
    • Bucket Policy,根据路径、IP 地址、引荐来源网址等授予广泛的访问权限
    • IAM 用户和组向具有 AWS 凭证的用户授予权限
    • 预签名网址

    如果您希望授予对整个存储桶的公共访问权限,最简单的选择是创建一个像这样的存储桶策略(来自Bucket Policy Examples]:

    {
      "Version":"2012-10-17",
      "Statement":[
        {
          "Sid":"AddPerm",
          "Effect":"Allow",
          "Principal": "*",
          "Action":["s3:GetObject"],
          "Resource":["arn:aws:s3:::MY-BUCKET/*"]
        }
      ]
    }
    

    如果您希望仅授予对 子目录 在存储桶中的公共访问权限,请使用:

    {
      "Version":"2012-10-17",
      "Statement":[
        {
          "Sid":"AddPerm",
          "Effect":"Allow",
          "Principal": "*",
          "Action":["s3:GetObject"],
          "Resource":["arn:aws:s3:::MY-BUCKET/PATH/*"]
        }
      ]
    }
    

    是的,您还可以为每个单独的文件设置权限。代码如下:

    import boto3
    s3 = boto3.resource('s3')
    object = s3.Bucket('ben-bucket').Object('db.sqlite')
    object.Acl().put(ACL='public-read')
    

    参考:Boto3 S3 access controls

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-04-30
      • 1970-01-01
      • 2014-12-06
      • 2019-12-05
      • 2020-02-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多