我在S3存储桶中的“文件夹”中有项目。文件的“路径”包含上载文件的用户的身份ID,并在S3管理控制台中显示为“All Buckets / [MY_BUCKET] / us-east-1:080ffd35-c00e-4e33-877f-3ec57be4b128”我有一个IAM策略附加到所有Cognito认证用户,其中包括以下条件语句:
"Condition": {
"StringLike": {
"s3:prefix": [
"us-east-1:080ffd35-c00e-4e33-877f-3ec57be4b128/*"
]
}
}
我已将身份证中的硬编码作为故障排除步骤,因为我不确定“$ {cognito-identity.amazonaws.com:sub}”是否包含正确的字符串。但是,即使使用特定的身份ID编码,它仍然无法正常工作,并且在尝试列出存储桶的内容时收到拒绝访问错误。我是否认为StringLike只是在前缀中查找给定的字符串?还有其他我缺少的东西吗?
我在下面列出了完整的IAM政策:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::[MY_BUCKET]"
],
"Condition": {
"StringLike": {
"s3:prefix": [
"us-east-1:080ffd35-c00e-4e33-877f-3ec57be4b128/*"
]
}
}
},
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:PutObjectAcl",
"s3:GetObjectAcl"
],
"Resource": [
"arn:aws:s3:::[MY_BUCKET]/${cognito-identity.amazonaws.com:sub}*",
"arn:aws:s3:::[MY_BUCKET]/${cognito-identity.amazonaws.com:sub}/*"
]
}
]
}
S3存储桶本身是否需要S3管理控制台上的任何特定权限设置才能使其正常工作并在尝试列出存储桶内容时防止拒绝访问错误?
其他编辑:
答案 0 :(得分:1)
列表存储桶不能缩小到这样的特定前缀。 list-bucket操作在存储桶本身上完成,因此条件和资源必须对存储桶有效。即前缀条件不匹配,因为只对存储桶中的对象有效,而不是存储桶本身。
以同样的方式,您可以限制列出所有存储桶以仅列出某些存储桶,因为该操作是在服务上完成的。
这很糟糕,但在文档中有所描述:http://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html#using-with-s3-actions-related-to-buckets