如何让不同IAM用户通过不同SSM配置访问同一EC2并实现文件隔离?
实现不同IAM用户通过SSM访问同一EC2时的独立主目录与权限隔离
要让不同IAM用户通过Systems Manager访问同一EC2时拥有独立主目录且无法互访,核心思路是将IAM用户映射到EC2实例的本地系统用户,结合SSM Agent的Run As功能实现会话隔离,具体步骤如下:
1. 在EC2实例上创建独立本地用户并配置权限
为每个需要访问的IAM用户创建对应的本地系统用户,确保主目录权限严格隔离:
- 创建本地用户(以IAM用户
dev-user1对应本地用户ssm-dev1为例):sudo useradd -m ssm-dev1 sudo passwd -l ssm-dev1 # 禁用密码登录,仅允许SSM会话切换 - 设置主目录权限为700,阻止其他用户访问:
sudo chmod 700 /home/ssm-dev1
重复此步骤为所有需要隔离的IAM用户创建对应本地用户。
2. 配置SSM Agent的Run As映射
修改EC2实例上的SSM Agent配置,将IAM用户ARN映射到对应的本地用户,实现会话自动切换:
- 编辑SSM Agent配置文件
/etc/amazon/ssm/ssm-agent-config.json,添加RunAs配置段:
注意替换其中的IAM用户ARN和本地用户名。{ "RunAs": { "Enabled": true, "DefaultUser": "ssm-user", # 无匹配映射时使用的默认用户(可选) "Map": { "arn:aws:iam::123456789012:user/dev-user1": "ssm-dev1", "arn:aws:iam::123456789012:user/dev-user2": "ssm-dev2" } } } - 重启SSM Agent使配置生效:
sudo systemctl restart amazon-ssm-agent
3. 限制IAM用户的SSM会话权限
创建自定义IAM策略,确保用户只能使用指定的会话配置启动EC2会话,避免权限滥用:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["ssm:StartSession"], "Resource": ["arn:aws:ec2:us-east-1:123456789012:instance/i-1234567890abcdef0"], "Condition": { "StringEquals": { "ssm:SessionDocument": "arn:aws:ssm:us-east-1:123456789012:document/IsolatedSessionConfig" } } } ] }
将该策略附加到对应的IAM用户或用户组,替换其中的实例ARN和区域、账号ID。
4. 创建自定义SSM会话文档(可选)
如果需要更精细的会话控制(比如限制命令执行、设置超时),可以创建自定义会话文档:
{ "schemaVersion": "1.0", "description": "隔离用户的SSM会话配置", "sessionType": "Standard_Stream", "parameters": { "shell": { "type": "String", "description": "使用的Shell", "default": "/bin/bash" } }, "properties": { "runAsEnabled": true, "runAsDefaultUser": "ssm-user", "idleSessionTimeout": "15m", "maxSessionDuration": "1h" } }
在AWS控制台的Systems Manager > 文档中创建该文档,然后在IAM策略的ssm:SessionDocument条件中指定此文档的ARN。
验证配置
用不同IAM用户登录SSM控制台启动会话,执行whoami确认当前用户为对应本地用户,尝试访问其他用户的主目录(如cd /home/ssm-dev2),应收到权限拒绝提示,说明隔离生效。
内容的提问来源于stack exchange,提问作者Programmer123
相关产品推荐
相关产品推荐

