1

我的 AWS 账户中有 400 多个存储桶,其中一些用户可以使用用户组dev-user-groupprod-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-groupprod-user-group 。如果是这样,它应该删除它们并添加新策略。

我希望我传达得更好。请给我这方面的建议。

4

2 回答 2

1

您将需要创建快速脚本并为此使用 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

资源

于 2020-10-05T06:27:06.560 回答
1

作为基本规则:

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

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

因此,您可以创建向四个 IAM 角色( , , , )添加 IAM 策略来授予他们对存储桶的权限,而不是通过对 400 多个存储桶的存储桶策略授予访问权限。它看起来像: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-*,因此该策略实际上会很短(假设您的存储桶可以通过这种方式轻松分组)。

于 2020-10-05T23:49:20.600 回答