AWS联合登录场景下如何校验sts:RoleSessionName中的caller-specified-name
实现方案
联合登录场景下aws:userid默认采用[前缀部分]:[caller-specified-name]的格式,你可以直接通过IAM变量的通配符截取能力提取冒号后的会话名部分,直接在校验RoleSessionName的条件中引用即可。
配置示例
直接修改你的AssumeRole对应权限策略(如果是角色信任策略就加到信任策略的Statement里,身份权限策略就加到对应身份的权限规则里):
{ "Statement": [ { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::[你的AWS账号ID]:role/[你要代入的目标角色名]", "Condition": { "StringEquals": { "sts:RoleSessionName": "${aws:userid/*:}" } } } ] }
规则说明
${aws:userid/*:}是IAM内置的变量截取语法,含义为匹配aws:userid字段中最后一个冒号后的所有内容,刚好对应你需要的caller-specified-name部分- 如果你的联合登录场景下
aws:userid存在多个冒号,调整通配符匹配规则即可,比如存在2个冒号要取最后一段,就写为${aws:userid/*:*:}
验证建议
正式上线前可以先将StringEquals替换为StringLike,配合CloudTrail的AssumeRole事件日志确认字段匹配逻辑符合预期,避免误拦截正常的角色代入请求。
内容的提问来源于stack exchange,提问作者Furi
相关产品推荐
相关产品推荐

