【问题标题】:How to automate permissions for AWS s3 bucket objects如何自动化 AWS s3 存储桶对象的权限
【发布时间】:2018-12-08 19:06:21
【问题描述】:

我有一个 s3 存储桶,多个帐户正在将对象放入其中。我希望拥有该存储桶的帐户也拥有这些文件。

脚本使用 boto3 来命名和放置对象,所以我可以在这个脚本中设置权限吗?
或者是否有可以强制对新文件拥有所有权的 s3 策略?
我更喜欢存储桶政策,但我怀疑这是否可能。 文件名为

“账号#和日期.json”

account_id = (boto3.client('sts').get_caller_identity()['Account'])
s3.Object('S3bucketname', account_id + "_" + date_fmt + ".json").put(Body=json.dumps(iplist))

编辑:我应该补充一点,试图从这个包含对象的存储桶中读取的进程具有与之关联的角色,所以我假设我的主体将是

arn:aws:iam::ACCOUNT_ID_of_bucket:role/ROLENAME

【问题讨论】:

    标签: python amazon-web-services amazon-s3 aws-lambda boto


    【解决方案1】:

    我想您是在问如何对复制到存储桶中的任何对象强制执行 bucket-owner-full-control

    来自S3 Bucket Owner Access,您可以使用这样的策略:

    {
      "Statement":[
        {
          "Effect":"Allow",
          "Principal":{"AWS":"111111111111"},
          "Action":"s3:PutObject",
          "Resource":["arn:aws:s3:::examplebucket/*"]
        },
        {
          "Effect":"Deny",
          "Principal":{"AWS":"111111111111"},
          "Action":"s3:PutObject",
          "Resource":"arn:aws:s3:::examplebucket/*",
          "Condition": {
            "StringNotEquals": {"s3:x-amz-acl":"bucket-owner-full-control"}
          }
        }
      ]
    }
    

    第一部分是授予对存储桶的访问权限的位置。第二部分说“如果未指定bucket-owner-full-control,则不允许”。

    当其他账户将文件复制到该存储桶时,它们应指定bucket-owner-full-control ACL。 (我知道如何使用 boto3 客户端,但不知道如何使用 boto3 资源。)

    【讨论】:

    • 没错,我正在寻找一种使用 boto3 完全控制存储桶所有者的方法。有没有我可以添加到 s3.Object('S3bucketname', account_id + "_" + date_fmt + ".json").put(Body=json.dumps(iplist) 的资源,可以让存储桶所有者完全控制对象?
    • object_acl = s3.ObjectAcl('s3BUCKETNAME','*') object_acl.put( ACL="bucket-owner-full-control") 这似乎应该工作,但我得到了键错误。
    • 您的密钥是*。这不是允许的文件名。 (键 = 文件名)
    • 知道了。将在下面发布解决方案谢谢
    【解决方案2】:
     boto3.resource('s3').ObjectAcl('S3BUCKETNAME', account_id + "_" + date_fmt + ".json").put(ACL='bucket-owner-full-control')
    

    以上内容将使存储桶所有者完全控制由具有此名称格式的 lambda 作业创建并放入存储桶的任何对象。

    【讨论】:

    • 使用不同语法的类似答案:boto3.client('s3').put_bucket_acl(Bucket=bucket, ACL='bucket-owner-full-control')
    • 如果你使用upload_object,你也可以使用:s3_client.upload_fileobj(obj, bucket, filename, ExtraArgs={'ACL': 'bucket-owner-full-control'})
    猜你喜欢
    • 2022-01-03
    • 1970-01-01
    • 1970-01-01
    • 2017-01-30
    • 1970-01-01
    • 2012-02-22
    • 2014-12-06
    • 2019-12-05
    • 1970-01-01
    相关资源
    最近更新 更多