如何识别操作EC2实例Session Manager的IAM用户并触发后台命令
识别Session Manager操作的IAM用户及自动执行指定命令方案
一、识别执行Session Manager操作的IAM用户
1. 通过CloudTrail日志溯源
Session Manager的所有核心操作(如StartSession、TerminateSession)都会被AWS CloudTrail记录。在CloudTrail控制台的事件历史中,搜索事件名称为StartSession的记录,查看事件详情里的userIdentity字段,即可获取发起会话的IAM用户的ARN、用户名等完整身份信息。
2. 在EC2实例内直接获取
当用户通过Session Manager连接到实例后,会话环境会自动注入IAM身份相关的环境变量,执行以下命令即可快速查看:
# 查看IAM用户ARN echo $AWS_SESSION_MANAGER_IAM_USER_ARN # 若用户通过IAM角色访问,查看角色ARN echo $AWS_SESSION_MANAGER_IAM_ROLE_ARN
二、特定IAM用户会话时自动执行指定命令
方案1:使用自定义SSM会话文档
- 在AWS Systems Manager控制台创建自定义会话文档,示例内容如下(替换目标用户ARN和命令路径):
{ "schemaVersion": "1.0", "description": "Auto-run command for specific IAM user on session start", "sessionType": "Standard_Stream", "parameters": { "command": { "type": "String", "default": "if [[ $AWS_SESSION_MANAGER_IAM_USER_ARN == 'arn:aws:iam::123456789012:user/your-target-user' ]]; then nohup /opt/your-custom-script.sh > /var/log/session-exec.log 2>&1 & fi" } }, "properties": { "runAsEnabled": true, "runAsDefaultUser": "ec2-user" } }
- 给目标IAM用户/角色添加IAM策略,允许其使用该会话文档(策略中需包含
ssm:StartSession权限,资源指定为该文档的ARN)。 - 用户启动Session Manager会话时选择该自定义文档,会话启动后会自动执行判断逻辑,匹配目标用户则后台运行指定命令。
方案2:修改实例Shell配置文件
在EC2实例的用户Shell配置文件(如/home/ec2-user/.bashrc或/root/.bash_profile)中添加以下脚本(替换目标用户ARN和命令路径):
# 校验Session Manager会话身份,匹配则执行命令 if [[ -n "$AWS_SESSION_MANAGER_IAM_USER_ARN" ]]; then if [[ "$AWS_SESSION_MANAGER_IAM_USER_ARN" == "arn:aws:iam::123456789012:user/your-target-user" ]]; then nohup /opt/your-custom-script.sh > /var/log/session-exec.log 2>&1 & fi fi
当用户通过Session Manager登录实例时,Shell初始化阶段会自动触发这段逻辑,满足条件则启动指定命令。
关键注意事项
- 确保EC2实例已安装并运行最新版本的SSM Agent。
- 实例关联的IAM角色需具备
AmazonSSMManagedInstanceCore权限,以支持Session Manager连接。 - 目标IAM用户需具备
ssm:StartSession权限,以及对应会话文档的使用权限(方案1适用)。
内容的提问来源于stack exchange,提问作者csaju
相关产品推荐
相关产品推荐

