我有两个帐户,帐户ACCOUNTAAAA和ACCOUNTBBBB。帐户ACCOUNTAAAA中存在一个存储桶(BUCKETAAAA),并且在ACCOUNTBBBB中具有角色(ROLEBBBB)的实例需要能够从中读取。
我已向存储桶添加了以下权限:
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::ACCOUNTBBBB:role/ROLEBBBB"
},
"Action": [
"s3:*"
],
"Resource": "arn:aws:s3:::BUCKETAAAA/*"
}
我对ACOUNTBBBB
中的角色具有以下权限:
"Sid": "",
"Effect": "Allow",
"Action": [
"s3:*"
],
"Resource": [
"arn:aws:s3:::BUCKETAAAA/",
"arn:aws:s3:::BUCKETAAAA/*"
]
}
我的假设是,我应该能够在具有IAM角色的EC2实例上运行aws s3 ls s3://BUCKETAAAA
,并看到BUCKETAAAA的竞争者。尝试此操作时,我得到An error occurred (AccessDenied) when calling the ListObjects operation: Access Denied
。
我在这里想念什么?
答案 0 :(得分:1)
为了重现您的情况,我做了以下事情:
桶A上的桶策略为:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AddPerm",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::<account>:role/role-b"
},
"Action": [
"s3:*"
],
"Resource": [
"arn:aws:s3:::bucket-a",
"arn:aws:s3:::bucket-a/*"
]
}
]
}
角色B的权限为:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "BucketA",
"Effect": "Allow",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::bucket-a",
"arn:aws:s3:::bucket-a/*"
]
}
]
}
我能够成功使用aws s3 ls s3://bucket-a
,并且能够将文件复制到存储桶-A。
我在尝试中遇到的主要区别是您的存储桶策略仅授予以下权限:
"Resource": "arn:aws:s3:::BUCKETAAAA/*"
这表示“存储桶A中的所有内容”,但不包括存储桶A本身。命令aws s3 ls s3://BUCKETAAAA
在存储桶上运行,该角色没有权限。
因此,您还应该为存储桶本身添加权限:
"Resource": [
"arn:aws:s3:::BUCKETAAAA",
"arn:aws:s3:::BUCKETAAAA/*"