如何自动化AWS s3存储桶对象的权限

时间:2018-06-29 14:42:14

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

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

该脚本使用boto3命名并放置对象,因此我可以在此脚本中设置权限吗?
还是有可以强制对新文件拥有所有权的s3策略?
我希望采用存储桶策略,但我怀疑这是否可行。 文件名是

  

“帐户号和date.json”

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

edit:我应该添加一下,正在尝试从具有对象的该存储桶中读取的进程具有与之关联的角色,因此我假设我的委托人是

  

arn:aws:iam :: ACCOUNT_ID_of_bucket:角色/角色名称

2 个答案:

答案 0 :(得分:0)

我想您是在问如何对复制到存储桶中的所有对象实施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资源执行此操作。)

答案 1 :(得分:0)

 boto3.resource('s3').ObjectAcl('S3BUCKETNAME', account_id + "_" + date_fmt + ".json").put(ACL='bucket-owner-full-control')

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