我正在尝试为用户编写一个权限,以便能够访问一个特定桶中的对象。
我现在有:
{
"Version": "2012-10-17",
"Statement":[{
"Effect": "Allow",
"Action": "s3:GetObject",
"Resource": ["arn:aws:s3:::test",
"arn:aws:s3:::test/*"]
}
]
}
,但用户仍然可以访问我的所有其他桶。请注意,我的其他桶没有策略…我认为这不重要。我只是希望该用户的IAM被允许到特定的桶
Amazon S3是最复杂的服务之一,因为它提供了三种不同的权限机制,这些机制可以同时应用,例如IAM策略、桶策略和acl !噢我的天!(控制对S3资源的访问),可以很好地描述主题,特别是一节,授权如何与多种访问控制机制一起工作?:
当AWS主体向S3发出请求时,授权决策取决于应用的所有IAM策略、S3桶策略和S3 acl的联合。
您所经历的行为表明某些配置错误,即您可能允许访问您可能不知道的级别的桶-仅关于Amazon IAM, IAM策略模拟器是调试此类情况的极好工具,我强烈建议首先验证您的配置。
然而,虽然这对大多数服务来说已经足够了,但它并没有涵盖上面概述的S3的其他两种权限机制,但至少已经隔离了分析。
请尝试以下IAM用户策略,该策略只允许对单个桶进行完全访问。
请注意,'list all buckets'是必需的,但是用户将不能访问除您在策略中指定的bucket之外的其他bucket。
{
"Statement":[
{
"Effect":"Allow",
"Action":[
"s3:ListAllMyBuckets"
],
"Resource":"arn:aws:s3:::*"
},
{
"Effect":"Allow",
"Action":[
"s3:ListBucket",
"s3:GetBucketLocation"
],
"Resource":"arn:aws:s3:::examplebucket"
},
{
"Effect":"Allow",
"Action":[
"s3:PutObject",
"s3:GetObject",
"s3:DeleteObject"
],
"Resource":"arn:aws:s3:::examplebucket/*"
}
]
}