【发布时间】:2023-03-17 12:10:02
【问题描述】:
我想允许一堆 AWS 帐户将权限写入一个 S3 存储桶。 所有账户都在不同的 AWS 组织中组织和分配。因此,我想根据他们的 org-id 限制访问。
此外,我想限制对对象级别的访问并允许访问前缀,该前缀应由源 AWS AccountId 指定。
我不想允许这样的每个帐户:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::111111111111:root"
},
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:PutObjectAcl"
],
"Resource": [
"arn:aws:s3:::mybucket/111111111111",
"arn:aws:s3:::mybucket/111111111111/*"
]
},
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::222222222222:root"
},
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:PutObjectAcl"
],
"Resource": [
"arn:aws:s3:::mybucket/222222222222",
"arn:aws:s3:::mybucket/222222222222/*"
]
}
]
}
我正在寻找的是使用源 AccountId 作为变量的通用策略。像这样的:
{
"Version" : "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": "*",
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:PutObjectAcl",
],
"Resource": [
"arn:aws:s3:::mybucket/${aws:SourceAccountId}",
"arn:aws:s3:::mybucket/${aws:SourceAccountId}/*"
],
"Condition": {
"ForAnyValue:StringEquals": {
"aws:PrincipalOrgID": [
"o-XXXXX",
"o-YYYYY",
"o-ZZZZZ"
]
}
}
}
]
}
不幸的是,变量${aws:SourceAccountId} 不可用,只是我正在寻找的东西的虚构占位符。有人有想法吗?
【问题讨论】:
-
必须是桶策略吗?为什么不创建一个角色,让其他账户可以访问您的存储桶?
-
这是 B 计划。我想避免这种情况。因为有几十个帐户和大量角色需要调整。我想减少管理开销,并希望将访问限制在可用的最高级别。
标签: amazon-web-services amazon-s3 policy bucket