Amazon web services 按存储桶策略列出S3存储桶

Amazon web services 按存储桶策略列出S3存储桶,amazon-web-services,amazon-s3,boto3,aws-policies,Amazon Web Services,Amazon S3,Boto3,Aws Policies,我的AWS帐户中有400多个存储桶,其中一些存储桶可由用户使用用户组开发用户组和生产用户组访问。很少有国家的政策是这样的 "aws:arn": [ "arn:aws:sts::123XXXXX43:assumed-role/dev-user-group/*" "arn:aws:sts::123XXXXX43:assumed-role/prod-user-group/*" ] 现在,我们想将其更改为以下内容 &quo

我的AWS帐户中有400多个存储桶,其中一些存储桶可由用户使用用户组开发用户组生产用户组访问。很少有国家的政策是这样的

"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/*"
]
很少有bucket只有一个访问权限&很少有bucket没有任何访问权限。 我们希望使用脚本自动更新bucket策略,以便脚本需要检查bucket策略中是否定义了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实体(例如IAM用户、IAM角色、IAM组)分配bucket权限,或
  • 使用Amazon S3 bucket策略授予公众对内容的访问权限
通过将策略放在IAM实体上,而不是在每个S3存储桶上添加权限,授予IAM实体权限通常要容易得多

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

{
“版本”:“2012-10-17”,
“声明”:[
{
“效果”:“允许”,
“行动”:[
“s3:ListBucket”,
“s3:GetBucketLocation”
],
“资源”:[
“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”
]
},
{
“效果”:“允许”,
“行动”:[
“s3:PutObject”,
“s3:PutObjectAcl”,
“s3:GetObject”,
“s3:GetObjectAcl”,
“s3:DeleteObject”
],
“资源”:[
“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/*”
]
}
]
}
由于策略的允许大小,您可能会面临限制,因此可能需要多个策略(或者,如果您有这么多存储桶,那么它可能根本不起作用)。更简单的方法是按前缀引用bucket,例如:

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

通过这种方式,您可以对以
dev-*
开头的任何bucket授予权限,因此策略实际上会非常短(假设您的bucket可以很容易地以这种方式分组)。

尝试使用Boto3,AWS SDK。使用此功能,您可以自动化该过程。这是您希望授予他们访问每个bucket的权限的链接,还是仅授予他们访问bucket的子集的权限?如果它是一个子集,如何识别它们(例如它们是否都具有相同的bucket前缀)?您当前如何根据员工ID授予访问权限?什么是P-EID?@anuragal,我们可以根据S3 bucket策略中的内容过滤S3 bucket吗?@JohnRotenstein,不完全是。它只适用于具有特定访问权限的存储桶。我更新了描述,请看一下。没有子集&P-EID是一种特殊的id,就像EID一样。如果我只依赖策略检索,这会很有用。因为,我正在寻找更新策略,我再次检查了每个文件并更新它,这似乎不是一个自动化的解决方案。如果有任何自动化解决方案可以列出按bucket策略过滤的bucket并对其进行更新,我会很高兴。我不确定是否有一个自动化解决方案,您可以找到一个定制的解决方案,但我提到的是,如果您创建自己的脚本来实现自动化,您可以如何操作。列出bucket并将列表另存为文件>有一个函数,然后在bucket列表上循环,获取每个bucket的策略,如果它符合某个条件,则将它们放在单独的列表中,其中有第三个函数仅更新目标列表的策略。我可以理解,您可能面临时间压力,无法自己实现此功能,因为编写脚本可能需要几个小时,我绝对同意@John Rotenstein发布的另一个答案,他提到使用IAM策略,因为这将是AWS中管理权限的正确组织方法。我将尝试并确定我们是否可以使用boto3实现这一点,或者是否将遵循上述实践。获取bucket策略>输出到文件>读取json文件>进行所需更改>放置bucket策略。谢谢你的时间,我同意这种做法。我们可以为用户遵循IAM策略,但我们需要更新策略以删除现有权限。这是另一个原因,我正在寻找自动化脚本。