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

时间:2018-07-20 12:02:28

标签: amazon-web-services amazon-s3 permissions amazon-iam

我有两个帐户,帐户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 个答案:

答案 0 :(得分:1)

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

  • 以EC2作为受信任实体(“允许EC2实例代表您调用AWS服务”)在账户B中创建角色B ()和一项授予访问权限的策略到Bucket-A
  • 在帐户A中创建了 Bucket-A
  • 向存储桶A添加了存储桶策略,该访问权限授予对角色B的访问权限
  • 角色B 分配给Amazon EC2实例

桶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/*"