跨账号SSM会话触发AccessDeniedException问题排查求助
跨账号SSM会话触发AccessDeniedException问题排查求助
看起来你遇到的是跨账号SSM会话启动时的权限配置问题,我帮你拆解下根源和可行的解决方案:
问题根源分析
从错误信息来看,当你尝试启动SSM会话时,Session Manager会自动尝试为你创建的会话执行ssm:TerminateSession操作(这是会话生命周期管理的必要步骤),但你的RoleB策略配置存在两处关键问题:
- 你添加的
ssm:resourceTag/aws:ssmmessages:session-id条件完全无效:SSM会话资源本身并没有这个标签,而且你填写的AROAXXXXXXXXXXXXX是RoleB的角色ID,并非实际的会话ID,根本无法匹配到目标会话资源。 - 之前把
TerminateSession和StartSession等权限放在同一个Statement时,资源范围只包含EC2实例和SSM文档,而TerminateSession需要的是SSM会话资源的ARN(格式类似arn:aws:ssm:<region>:<account-id>:session/<会话名称>或错误里的assumed-role形式),资源范围不匹配也会导致权限拒绝。
解决方案
修改RoleB的ssm:TerminateSession权限配置,确保允许当前角色终止自己发起的会话,推荐的策略配置如下:
{ "Version": "2012-10-17", "Statement": [ // 保留你原有的StartSession等核心权限配置 { "Sid": "", "Effect": "Allow", "Action": [ "ssm:DescribeSessions", "ssm:GetConnectionStatus", "ssm:DescribeInstanceProperties", "ec2:DescribeInstances", "ssm:StartSession" ], "Resource": [ "arn:aws:ec2:us-east-1:222222222222:instance/i-123456abc789102de", "arn:aws:ssm:us-east-1:222222222222:document/SSM-SessionManagerRunShell", "arn:aws:ssm:us-east-1:222222222222:document/AWS-StartSSHSession" ] }, // 修改后的TerminateSession权限,兼顾安全与功能 { "Sid":"AllowTerminateOwnSessions", "Effect":"Allow", "Action": [ "ssm:TerminateSession" ], "Resource": "arn:aws:ssm:us-east-1:222222222222:session/*", "Condition": { "StringEquals": { "ssm:SessionOwner": "${aws:userid}" } } } ] }
配置说明
Resource设置为arn:aws:ssm:us-east-1:222222222222:session/*精准覆盖所有SSM会话资源,避免不必要的权限范围- 条件
ssm:SessionOwner": "${aws:userid}"确保只有会话的发起者(也就是当前AssumeRole后的身份)能终止这个会话,既满足功能需求又保证了权限安全性。
你也可以先测试去掉Condition,直接允许ssm:TerminateSession对所有会话资源的访问,确认能正常启动会话后,再添加Condition做权限收紧,这样更容易快速验证问题。
备注:内容来源于stack exchange,提问作者Arrow Root
相关产品推荐
相关产品推荐

