为了重现您的情况,我做了以下事情:
在帐户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 是:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AddPerm",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam:::role/role-b"
},
"Action": [
"s3:*"
],
"Resource": [
"arn:aws:s3:::bucket-a",
"arn:aws:s3:::bucket-a/*"
]
}
]
}
Role-B的权限是:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "BucketA",
"Effect": "Allow",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::bucket-a",
"arn:aws:s3:::bucket-a/*"
]
}
]
}
我能够 successfully 使用 aws s3 ls s3://bucket-a 并能够将文件复制到Bucket-A .
我在您的尝试中看到的主要区别是您的Bucket Policy仅授予以下权限:
"Resource": "arn:aws:s3:::BUCKETAAAA/*"
这意味着"anything within Bucket-A"但不包括Bucket-A本身 . 命令 aws s3 ls s3://BUCKETAAAA 在 bucket 上运行,该角色没有权限 .
因此,您还应该为存储桶本身添加权限:
"Resource": [
"arn:aws:s3:::BUCKETAAAA",
"arn:aws:s3:::BUCKETAAAA/*"