amazon-web-services - 授予 S3 存储桶访问权限的跨账户角色 - 权限被拒绝

标签 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 的内容。当我尝试此操作时,我收到调用 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/

相关文章:

c - c程序中的sudo权限问题

python - 将文件保存到 Amazon Web Service s3

tomcat - 托管在 EC2 上的网站问题

python - 如何在 Heroku(使用 python)上的 web 和 worker(不同的 dynos)之间通信数据?

apache-spark - emrfs同步和导入卡住了,无法正常工作

node.js - 使用 AWS Lambda 函数和 Node.js 从 S3 存储桶中提取 zip 文件并上传到另一个存储桶

amazon-web-services - 在 AWS 服务器上安装 SSL 证书配置时出错

java - 如何将 google JsonObject 字段保存到 dynamoDB 中?

Docker - 挂载目录的所有者和组

session - Laravel 7 : How to clear withErrors session