![](/img/trans.png)
[英]How to loop through a list of s3 buckets and create and attach a number of policies for each bucket?
[英]List S3 buckets by bucket policies
我的 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 。 如果是这样,它应该删除它们并添加新策略。
我希望我传达的更好。 请给我建议。
您将需要创建快速脚本并为此使用 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 实体权限要容易得多,而不是在每个 S3 存储桶上添加权限。
因此,您可以创建将 IAM 策略添加到授予权限的四个 IAM 角色( dev-eid
、 dev-p-eid
、 prod-eid
、 prod-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.