我正在尝试编写一个拒绝访问除一个文件夹以外的所有文件夹的IAM策略。这似乎就是这里写的用例。
我写了一个像这样的策略:
{
"Version": "2012-10-17",
"Statement": [
{
"Action": ["s3:*"],
"Effect": "Allow",
"Resource": ["arn:aws:s3:::bucket"],
"Condition":{"StringLike":{"s3:prefix":["folder/subfolder/*"]}}
},
{
"Action":["s3:*"],
"Effect":"Allow",
"Resource": ["arn:aws:s3:::folder/subfolder/*"]
}
]
}
基本上(至少对我来说)和他们的例子完全一样。
它不工作
用户被拒绝访问所有其他桶,但这个桶似乎有自由范围
对于任何类型的IAM策略的调试/诊断问题,我强烈建议使用IAM策略模拟器(请参阅使用IAM策略模拟器了解详细信息和直接访问):
在将IAM策略提交到生产环境之前,您可以使用IAM策略模拟器来测试AWS身份和访问管理(IAM)策略的效果,并测试您现有的IAM策略以验证它们是否具有预期的效果。
策略模拟器使用起来可能有点挑剔/棘手,但我刚刚验证了引用的示例策略,以允许用户访问Amazon S3中的个人"主目录",如下所示:
- 将策略添加到测试IAM用户
- 从AWS管理控制台点击"模拟策略"链接
- 选择业务
Amazon S3
和所需动作,例如GetObject
(或仅 select All) - 以S3资源格式输入待测资源,例如:
arn:aws:s3:::testbucket.example.com/home/testuser/*
- 随后输入
aws:username
的变化进行测试,即testuser
和anotheruser
顺便说一句,它也没有为我工作,因为anotheruser
已经是一个组的一部分,授予一般S3读访问,无论如何,这是立即浮出水面的IAM策略模拟器-也许这是你的IAM配置的问题?
这个怎么样:
{
"Statement": [
{
"Sid": "AllowGroupToSeeBucketListInTheConsole",
"Action": [
"s3:ListAllMyBuckets",
"s3:GetBucketLocation"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::*"
]
},
{
"Sid": "AllowRootLevelListingOfCompanyBucket",
"Action": [
"s3:ListBucket"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::bucket"
],
"Condition": {
"StringEquals": {
"s3:prefix": [
""
],
"s3:delimiter": [
"/"
]
}
}
},
{
"Sid": "AllowListBucketIfSpecificPrefixIsIncludedInRequest",
"Action": [
"s3:ListBucket"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::bucket"
],
"Condition": {
"StringLike": {
"s3:prefix": [
"folder/subfolder/*"
]
}
}
},
{
"Sid": "AllowUserToFullAccess",
"Action": [
"s3:*"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::bucket/folder/subfolder/*"
]
}
]
}
阅读每条语句中的 Sid
来理解操作