授予S3存储桶访问权限的跨帐户角色-权限被拒绝



我有两个帐户,帐户ACCOUNTSAAA和ACCOUNTBBB。帐户ACCOUNTAAAAA中存在一个bucket(BUCKETAAAA(,并且在ACCOUNTBBB中具有角色(ROLEBBBB(的实例需要能够从中读取。

我已经向bucket添加了以下权限:

{
"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

我在这里错过了什么?

为了重现您的情况,我做了以下操作:

  • 在Account-B中创建Role-B,EC2作为受信任实体("允许EC2实例代表您调用AWS服务"(和授予访问Bucket-a的策略
  • 在Account-A中创建Bucket-A
  • 向Bucket-a添加Bucket策略,该策略允许访问Role-B
  • 已将角色B分配给Amazon EC2实例

Bucket-A上的Bucket策略为:

{
"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。

我看到的与您尝试的主要区别是,您的Bucket Policy只授予以下内容的权限:

"Resource": "arn:aws:s3:::BUCKETAAAA/*"

这意味着"Bucket-A中的任何东西",但不包括Bucket-A本身。命令aws s3 ls s3://BUCKETAAAA存储桶进行操作,角色对该存储桶没有权限。

因此,您还应该为bucket本身添加权限:

"Resource": [
"arn:aws:s3:::BUCKETAAAA",
"arn:aws:s3:::BUCKETAAAA/*"

最新更新