【问题标题】:Why can't I access my bucket from an assumed role?为什么我无法从代入角色访问我的存储桶?
【发布时间】:2022-08-19 14:10:35
【问题描述】:

我有一个没有附加 ACL 或策略的 S3 存储桶。它是由 terraform 创建的,如下所示:

resource \"aws_s3_bucket\" \"runners_cache\" {
  bucket = var.runners_cache.bucket
}

我创建了一个角色并为其附加了策略;有关详细信息,请参阅以下控制台日志

$ aws iam get-role --role-name bootstrap-test-bootstrapper
{
    \"Role\": {
{
    \"Role\": {
        \"Path\": \"/bootstrap-test/\",
        \"RoleName\": \"bootstrap-test-bootstrapper\",
        \"RoleId\": \"#SNIP\",
        \"Arn\": \"arn:aws:iam::#SNIP:role/bootstrap-test/bootstrap-test-bootstrapper\",
... #SNIP


$ aws iam list-attached-role-policies --role-name bootstrap-test-bootstrapper
{
    \"AttachedPolicies\": [
        {
            \"PolicyName\": \"bootstrap-test-bootstrapper\",
            \"PolicyArn\": \"arn:aws:iam::#SNIP:policy/bootstrap-test/bootstrap-test-bootstrapper\"
        },
... #SNIP


$ aws iam get-policy --policy-arn arn:aws:iam::#SNIP:policy/bootstrap-test/bootstrap-test-runner
{
    \"Policy\": {
        \"PolicyName\": \"bootstrap-test-runner\",
        \"PolicyId\": \"#SNIP\",
        \"Arn\": \"arn:aws:iam::#SNIP:policy/bootstrap-test/bootstrap-test-runner\",
        \"Path\": \"/bootstrap-test/\",
        \"DefaultVersionId\": \"v7\",
... #SNIP


$ aws iam get-policy-version --policy-arn arn:aws:iam::#SNIP:policy/bootstrap-test/bootstrap-test-runner --version-id v7
{
    \"PolicyVersion\": {
        \"Document\": {
            \"Statement\": [
                {
                    \"Action\": [
                        \"s3:AbortMultipartUpload\",
                        \"s3:CompleteMultipartUpload\",
                        \"s3:ListBucket\",
                        \"s3:PutObject\",
                        \"s3:GetObject\",
                        \"s3:DeleteObject\",
                        \"s3:PutObjectAcl\"
                    ],
                    \"Effect\": \"Allow\",
                    \"Resource\": [
                        \"arn:aws:s3:::#SNIP-runners-cache/*\",
                        \"arn:aws:s3:::#SNIP-cloud-infrastructure-terraform-states/*\"
                    ]
                },
                {
                    \"Action\": [
                        \"s3:*\"
                    ],
                    \"Effect\": \"Allow\",
                    \"Resource\": [
                        \"arn:aws:s3:::*\"
                    ]
                }
            ],
            \"Version\": \"2012-10-17\"
        },
        \"VersionId\": \"v7\",
        \"IsDefaultVersion\": true,
        \"CreateDate\": \"2022-08-18T14:16:33+00:00\"
    }
}

tl;dr 这个角色有一个附加的策略,允许在帐户中完全访问 s3。

我可以成功担任这个角色:

$ aws sts assume-role --role-arn arn:aws:iam::#SNIP:role/bootstrap-test/bootstrap-test-bootstrapper --role-session-name test123
{ ... #REDACTED }
$ export AWS_ACCESS_KEY_ID=ASIA2 #REDACTED
$ export AWS_SECRET_ACCESS_KEY=8 #REDACTED
$ export AWS_SESSION_TOKEN=IQoJb #REDACTED
$ aws sts get-caller-identity
{
    \"UserId\": \"#SNIP\",
    \"Account\": \"#SNIP\",
    \"Arn\": \"arn:aws:sts::#SNIP:assumed-role/bootstrap-test-bootstrapper/test123\"
}

但是,一旦我这样做了,我就无法再访问 S3:

$ aws s3 ls #SNIP-runners-cache

An error occurred (AccessDenied) when calling the ListObjectsV2 operation: Access Denied
$ aws s3 ls

An error occurred (AccessDenied) when calling the ListBuckets operation: Access Denied

我错过了什么?是否存在一些阻止访问 S3 的默认行为?我应该如何调试这些 403 错误?

  • 你是如何从你担任另一个角色的第一次会议开始的?是否存在权限边界、会话策略或 SCP?
  • @luk2302 我的用户在此帐户中具有管理员权限。
  • 您的策略有 2 个允许语句,第二个允许在 arn:aws:s3:::* 上的 s3:*,这使得第一个语句无关紧要。只是为了测试吗?另请注意,在您的第一条语句中,您有一些对象级操作(例如 PutObject)和一些存储桶级操作(例如 ListBucket),但列出的资源都是对象级 ARN。存储桶级操作需要存储桶 ARN,而不是对象 ARN。
  • @jarmod 当然,第一条语句是无关紧要的。对于角色应该执行的操作,它应该足够了,但是当它不起作用时,我创建了第二条语句来排除任何 IAM 错误配置问题。
  • @luk2302 毕竟你是对的。

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


【解决方案1】:

很容易过度沉迷于政策的细节而忘记了角色本身。在这种情况下,权限边界在 CLI 中未被注意到,但在 Web 控制台中很容易看到:

确实,@luk2302 是对的,限制因素是权限边界。将其从角色中删除后,恢复了对 S3 的访问。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-13
    • 2016-05-06
    • 1970-01-01
    • 1970-01-01
    • 2017-07-03
    • 2019-08-15
    • 2021-12-02
    • 2018-05-05
    相关资源
    最近更新 更多