我有许多存储桶以与assets-<something>
相同的命名空间开头,所以我想知道向IAM组授予权限的最佳选择是什么,而维护它的需求最小。
是否可以在 ARN 中使用任何类型的正则表达式?或者也许我可以使用标签?EC2 有 ResourceTag
的条件,但似乎 S3 不存在。
还是我应该为每个存储桶添加新的 ARN 到策略?
同样,我正在寻找最小的解决方案,因此将新策略附加到每个存储桶本身似乎有点多。
IAM 策略可以根据通配符授予对 Amazon S3 存储桶的访问权限。
例如,此策略授予列出存储桶内容和从存储桶中检索对象的权限,但前提是存储桶以 assets-
开头:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "SomeSID",
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::assets-*",
"arn:aws:s3:::assets-*/*"
]
}
]
}
请注意,Resource
部分同时引用存储桶(对于ListBucket
)和存储桶的内容(对于GetObject
)。
通配符也适用于存储桶名称中的其他地方,例如:arn:aws:s3:::*-record
无法根据标签授予对 Amazon S3 存储桶的访问权限。
ARN 格式
顺便说一句,如果您想知道为什么 Amazon S3 存储桶的 ARN(Amazon 资源名称)中有这么多冒号,这是因为 ARN 的正常格式是:
arn:aws:<service name>:<region>:<account>:<resource>
对于 Amazon S3 存储桶,可以从存储桶名称(全局唯一)中识别区域和账户,因此这些参数留空。
是的,我似乎可以将 IAM 策略与 ARN arn:aws:s3:::assets-*
一起使用,并arn:aws:s3:::assets-*/*