我有两个帐户,帐户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
.
我在这里错过了什么?
1 回答
为了重现您的情况,我做了以下事情:
在帐户B中创建了 Role-B ,其中EC2作为可信实体("Allows EC2 instances to call AWS services on your behalf")以及授予对Bucket-A访问权限的策略
在帐户A中创建了 Bucket-A
为Bucket-A添加了 Bucket Policy ,授予对Role-B的访问权限
将 Role-B 分配给Amazon EC2实例
Bucket-A上的 Bucket Policy 是:
Role-B的权限是:
我能够 successfully 使用
aws s3 ls s3://bucket-a
并能够将文件复制到Bucket-A .我在您的尝试中看到的主要区别是您的Bucket Policy仅授予以下权限:
这意味着"anything within Bucket-A"但不包括Bucket-A本身 . 命令
aws s3 ls s3://BUCKETAAAA
在 bucket 上运行,该角色没有权限 .因此,您还应该为存储桶本身添加权限: