我有两个帐户:帐户 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 的内容。当我尝试此操作时,我收到调用 ListObjects 操作时发生错误 (AccessDenied):访问被拒绝
。
我在这里缺少什么?
最佳答案
为了重现您的情况,我执行了以下操作:
- 在账户 B 中创建角色 B,并将 EC2 作为可信实体(“允许 EC2 实例代表您调用 AWS 服务”)以及授予访问权限的策略到桶-A
- 在账户 A 中创建存储桶 A
- 向存储桶 A 添加了存储桶策略,该策略向角色 B 授予访问权限
- 为 Amazon EC2 实例分配角色 B
Bucket-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
并能够将文件复制到 Bucket-A。
我发现您的尝试的主要区别是您的存储桶策略仅授予以下权限:
"Resource": "arn:aws:s3:::BUCKETAAAA/*"
这意味着“Bucket-A 内的任何内容”,但不包括 Bucket-A 本身。命令 aws s3 ls s3://BUCKETAAAA
对存储桶进行操作,该角色没有权限。
因此,您还应该为存储桶本身添加权限:
"Resource": [
"arn:aws:s3:::BUCKETAAAA",
"arn:aws:s3:::BUCKETAAAA/*"
关于amazon-web-services - 授予 S3 存储桶访问权限的跨账户角色 - 权限被拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51442105/