我正在尝试将 IAM 角色限制为只能访问 S3 存储桶中的特定子文件夹(键前缀)。这是我正在使用的策略 JSON,但目前用户仍然可以访问存储桶中的其他文件夹:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor1",
"Effect": "Allow",
"Action": [
"s3:*"
],
"Resource": [
"arn:aws:s3:::somebucket",
"arn:aws:s3:::somebucket/*"
]
},
{
"Sid": "VisualEditor2",
"Effect": "Allow",
"Action": [
"s3:ListBucketVersions",
"s3:ListBucketByTags",
"s3:GetBucketAcl"
],
"Resource": [
"arn:aws:s3:::mybucket"
]
},
{
"Sid": "VisualEditor3",
"Effect": "Allow",
"Action": [
"s3:GetObjectAcl",
"s3:GetObject",
"s3:GetObjectVersion"
],
"Resource": [
"arn:aws:s3:::mybucket/datasets/company1/*"
]
}
]
}
目前,使用这个角色我仍然可以做,例如
aws s3 cp s3://mybucket/datasets/company2/dataset.csv
并下载数据集。我究竟做错了什么?
当我尝试模拟该策略时,它似乎是正确的(尝试 getObject onmybucket/datasets/company2/dataset.csv隐式失败,但这在实践中不会发生。此用户没有附加其他策略。