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

在AWS控制台中传播角色会话名称的技术问题

解决AWS角色切换时会话名称不传播的问题

场景回顾

我有一个供Google Workspace用户使用的IAM角色GoogleWorkspaceIdentityRole(无权限),用户登录后控制台显示身份为GoogleWorkspaceIdentityRole/myemail@example.com。部分用户需要切换到附加AdministratorAccess权限的Administrator角色,当前Administrator的信任策略如下:

{
    "Effect": "Allow",
    "Principal": {
        "AWS": "arn:aws:iam::<ACCOUNT_ID>:role/GoogleWorkspaceIdentityRole"
    },
    "Action": [
        "sts:AssumeRole"
    ],
    "Condition": {
        "StringEquals": {
            "aws:userId": [
                "<ROLE_ID>:myemail@example.com",
                "<ROLE_ID>:otheremail@example.com"
            ]
        }
    }
}

切换角色后成功,但控制台未显示会话名称(如邮箱),需要传播该名称用于审计。

解决方案

1. 配置GoogleWorkspaceIdentityRole的权限策略

给GoogleWorkspaceIdentityRole添加权限策略,限制它在扮演Administrator角色时必须使用源会话的邮箱作为新会话名称:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "sts:AssumeRole",
            "Resource": "arn:aws:iam::<ACCOUNT_ID>:role/Administrator",
            "Condition": {
                "StringEquals": {
                    "sts:RoleSessionName": {"Fn:Split": [":", "${aws:userid}"][1]}
                }
            }
        }
    ]
}

这里通过Fn:Split从aws:userid(格式为<ROLE_ID>:邮箱)中提取邮箱部分,强制作为新会话的名称。

2. 更新Administrator角色的信任策略

修改信任策略,同时验证源会话的aws:userId和传递的会话名称,确保只有指定用户能切换并使用正确的会话名:

{
    "Effect": "Allow",
    "Principal": {
        "AWS": "arn:aws:iam::<ACCOUNT_ID>:role/GoogleWorkspaceIdentityRole"
    },
    "Action": "sts:AssumeRole",
    "Condition": {
        "StringEquals": {
            "aws:userId": [
                "<ROLE_ID>:myemail@example.com",
                "<ROLE_ID>:otheremail@example.com"
            ],
            "sts:RoleSessionName": [
                "myemail@example.com",
                "otheremail@example.com"
            ]
        }
    }
}

3. 控制台切换角色时指定会话名称

用户在控制台切换角色时,在会话名称输入框中填写自己的邮箱(如myemail@example.com)。完成切换后,控制台右上角会显示Administrator/myemail@example.com,会话名称成功传播,满足审计追踪需求。

补充:自动传播的替代方案

如果需要完全自动传递会话名称(无需手动输入),可以使用AWS CLI或SDK调用sts:AssumeRole,通过--role-session-name参数传入源会话的邮箱部分,再用生成的临时凭证登录控制台。例如CLI命令:

aws sts assume-role \
    --role-arn arn:aws:iam::<ACCOUNT_ID>:role/Administrator \
    --role-session-name myemail@example.com

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 13:25:16