首页 文章

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

提问于
浏览
2

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

  • 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 是:

    {
        "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/*"
                ]
            }
        ]
    }
    

    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://BUCKETAAAAbucket 上运行,该角色没有权限 .

    因此,您还应该为存储桶本身添加权限:

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

相关问题