You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

可通过AWS控制台切换角色,却无法通过CLI执行的问题求助

问题描述

我有一个包含users(账号ID:111111111111)和dev(账号ID:222222222222)账号的AWS组织,流程要求先登录users账号,再切换到dev账号。现在遇到的问题是:能通过AWS控制台切换角色,但无法通过CLI执行切换。

使用的CLI切换命令

export $(printf "AWS_ACCESS_KEY_ID=%s AWS_SECRET_ACCESS_KEY=%s AWS_SESSION_TOKEN=%s" \
$(aws sts assume-role \
--role-arn  arn:aws:iam::222222222222:role/administrator  \
--role-session-name TestSessionName \
--query "Credentials.[AccessKeyId,SecretAccessKey,SessionToken]" \
--output text))

执行后收到的错误

An error occurred (AccessDenied) when calling the AssumeRole operation: User: arn:aws:iam::111111111111:user/gitlab-ci-user is not authorized to perform: sts:AssumeRole on resource: arn:aws:iam::222222222222:role/administrator

已确认的CLI登录用户信息

> aws sts get-caller-identity
{
    "UserId": "...",
    "Account": "111111111111",
    "Arn": "arn:aws:iam::111111111111:user/gitlab-ci-user"
}

用户所属组的权限策略

用户gitlab-ci-user属于AdminsDevAssumeRole组,该组的权限策略如下:

{
    "Statement": [
        {
            "Action": "sts:AssumeRole",
            "Effect": "Allow",
            "Resource": [
                "arn:aws:iam::222222222222:role/administrator"
            ]
        }
    ],
    "Version": "2012-10-17"
}

dev账号中角色的信任关系配置

在dev账号(222222222222)里,administrator角色的信任关系配置如下:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111111111111:root"
            },
            "Action": "sts:AssumeRole",
            "Condition": {
                "Bool": {
                    "aws:MultiFactorAuthPresent": "false"
                }
            }
        }
    ]
}

请问为何无法通过CLI切换角色,但控制台可以?


问题原因与解决方案

核心原因

AWS控制台切换角色时,会以users账号的root身份发起角色切换请求,而你的dev账号administrator角色信任关系里只允许了arn:aws:iam::111111111111:root作为可信实体,所以控制台能成功。

但CLI执行sts:AssumeRole时,是以具体的IAM用户gitlab-ci-user身份发起请求,这个用户不在dev角色的信任列表里,因此被拒绝。

解决方案

修改dev账号中administrator角色的信任关系,将gitlab-ci-user或者其所属的AdminsDevAssumeRole组添加到可信实体中:

方案1:允许特定IAM用户

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::111111111111:root",
                    "arn:aws:iam::111111111111:user/gitlab-ci-user"
                ]
            },
            "Action": "sts:AssumeRole",
            "Condition": {
                "Bool": {
                    "aws:MultiFactorAuthPresent": "false"
                }
            }
        }
    ]
}

方案2:允许整个用户组

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::111111111111:root",
                    "arn:aws:iam::111111111111:group/AdminsDevAssumeRole"
                ]
            },
            "Action": "sts:AssumeRole",
            "Condition": {
                "Bool": {
                    "aws:MultiFactorAuthPresent": "false"
                }
            }
        }
    ]
}

方案3:允许users账号下所有IAM实体(适合组织内场景)

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111111111111:root"
            },
            "Action": "sts:AssumeRole",
            "Condition": [
                {
                    "Bool": {
                        "aws:MultiFactorAuthPresent": "false"
                    }
                },
                {
                    "StringLike": {
                        "aws:PrincipalArn": "arn:aws:iam::111111111111:*"
                    }
                }
            ]
        }
    ]
}

修改完成后,重新执行CLI的sts assume-role命令即可正常切换角色。


内容的提问来源于stack exchange,提问作者Yagel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 18:05:22