【问题标题】:Changing ACLs of objects in an S3 bucket using Boto3使用 Boto3 更改 S3 存储桶中对象的 ACL
【发布时间】:2018-03-29 17:34:52
【问题描述】:

试图找出一种使用 Boto3 在 S3 存储桶中的对象上设置 ACL 的方法。 输入应该是 S3 存储桶名称,并将所有对象的 ACL 更改为公共只读

【问题讨论】:

    标签: amazon-web-services amazon-s3 boto3 bucket


    【解决方案1】:

    您可以在设置 ACL 时将对象 copy_object() 设置为自身。

    因此,源将与目标相同,但将 ACL 设置为您想要的值。

    【讨论】:

      【解决方案2】:

      来自boto3 docs

      要更改单个对象的 ACL,首先获取 Object 实例,然后更改 ACL。下一个示例两者兼而有之:

      (boto3
       .session
       .Session(region_name=<region_name>)
       .resource('s3')
       .Object(<bucket_name>, <key>)
       .Acl()
       .put(ACL='public-read'))
      

      要更改存储桶的 ACL,假设您已经拥有存储桶实例:

      bucket.Acl().put(ACL='public-read')
      

      【讨论】:

        【解决方案3】:

        在我的情况下,我必须为在 S3 中编写的新对象指定 ACL,因此基于 https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/s3.html#S3.Object.put

        import boto3
        
        s3 = boto3.resource("s3") 
        s3.Object(my_bucket_name, my_key_path).put(Body=my_body, ACL=my_acl)
        

        my_acl 可以是以下之一:

        'private'|'public-read'|'public-read-write'|'authenticated-read'|'aws-exec-read'|'bucket-owner-read'|'bucket-owner-full-control'
        

        【讨论】:

          【解决方案4】:

          另一种处理身体的方法是:

          aws s3api put-bucket-acl --bucket bucket_name --access-control-policy file://grant.json
          

          grant.json 文件:

          {
              "Grants": [
                      {
                      "Grantee": {
                          "ID": "CANONICAL_ID_TO_GRANT",
                          "Type": "CanonicalUser"
                      },
                      "Permission": "WRITE"
                      },
                      {
                      "Grantee": {
                          "ID": "CANONICAL_ID_TO_GRANT",
                          "Type": "CanonicalUser"
                      },
                      "Permission": "READ"
                      }
                  ],
                  "Owner": {
                      "DisplayName": "example_owner",
                      "ID": "CANONICAL_ID_OWNER"
                  }
          }
          

          【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-02-01
          • 1970-01-01
          • 2018-08-28
          • 2020-07-07
          • 2021-03-29
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多