繁体   English   中英

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

[英]List S3 buckets by bucket policies

我的 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 如果是这样,它应该删除它们并添加新策略。

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

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

来源

作为基本规则:

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

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

因此,您可以创建将 IAM 策略添加到授予权限的四个 IAM 角色dev-eiddev-p-eidprod-eidprod-p-eid ),而不是通过 400 多个存储桶上的存储桶策略授予访问权限他们对存储桶的权限。 它看起来像:

{
    "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-*开头的任何存储桶的权限,因此该策略实际上会很短(假设您的存储桶可以通过这种方式轻松分组)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM