按存储区策略列出S3存储区

问题描述

我的AWS账户中有400多个存储桶,用户可以使用用户 dev-user-group prod-user-group 访问其中的一些存储桶。很少有S3存储桶的策略是这样的

"aws:arn": [
     "arn:aws:sts::123XXXXX43:assumed-role/dev-user-group/*"
     "arn:aws:sts::123XXXXX43:assumed-role/prod-user-group/*"
]

现在,我们要将其更改为以下内容

"aws:arn": [
     "arn:aws:sts::123XXXXX43:assumed-role/dev-eid/*"
     "arn:aws:sts::123XXXXX43:assumed-role/dev-p-eid/*"
     "arn:aws:sts::123XXXXX43:assumed-role/prod-eid/*"
     "arn:aws:sts::123XXXXX43:assumed-role/prod-p-eid/*"
]

很少有存储桶只有其中之一可以访问,很少有没有访问权限。 我们希望使用脚本来自动化更新存储桶策略的过程,以便脚本需要检查是否定义了 dev-user-group prod-user-group 在存储桶策略中。如果是这样,它应该删除它们并添加新策略。

我希望我传达的更好。请给我一些建议。

解决方法

一般规则:

  • 使用 IAM策略将存储桶权限分配给IAM实体(例如IAM用户,IAM角色,IAM组),
  • 使用 Amazon S3存储桶策略授予对内容的公共访问权限

通常,通过将策略放在该IAM实体上而不是在每个S3存储桶上添加权限来授予IAM实体权限要容易得多。

因此,您可以创建将IAM策略添加到四个IAM角色dev-eiddev-p-eidprod-eidprod-p-eid)授予他们对存储桶的权限。看起来像这样:

{
    "Version": "2012-10-17","Statement": [
        {
            "Effect": "Allow","Action": [
                "s3:ListBucket","s3:GetBucketLocation"
            ],"Resource": [
                "arn:aws:s3:::bucket1","arn:aws:s3:::bucket2","arn:aws:s3:::bucket3","arn:aws:s3:::bucket4","arn:aws:s3:::bucket5","arn:aws:s3:::bucket6","arn:aws:s3:::bucket7","arn:aws:s3:::bucket8"
            ]
        },{
            "Effect": "Allow","Action": [
                "s3:PutObject","s3:PutObjectAcl","s3:GetObject","s3:GetObjectAcl","s3:DeleteObject"
            ],"Resource": [
                "arn:aws:s3:::bucket1/*","arn:aws:s3:::bucket2/*","arn:aws:s3:::bucket3/*","arn:aws:s3:::bucket4/*","arn:aws:s3:::bucket5/*","arn:aws:s3:::bucket6/*","arn:aws:s3:::bucket7/*","arn:aws:s3:::bucket8/*"
            ]
        }
    ]
}

由于策略的允许大小,您可能会遇到限制,因此可能需要多个策略(或者,鉴于您有很多存储桶,它可能根本无法工作)。一种更简单的方法是按前缀引用存储桶,例如:

"arn:aws:s3:::dev-*"

通过这种方式,您可以授予以dev-*开头的任何存储桶的权限,因此该策略实际上会很短(假定您可以通过这种方式轻松地对存储桶进行分组)。

,

您将需要创建快速脚本并为此使用aws cli。

该脚本将首先列出帐户aws s3 ls中的所有存储桶,然后保存该列表并使用以下命令在存储桶列表上循环,该命令将策略输出为json文件:

aws s3api get-bucket-policy --bucket mybucket --query Policy --output text > policy.json

然后可以根据需要修改policy.json文件。最后,您可以通过运行以下命令将此修改后的策略应用回S3存储桶:

aws s3api put-bucket-policy --bucket mybucket --policy file://policy.json

Source