基于AD组与EC2标签实现AWS用户登录授权的方案咨询
嘿Michal,既然已经搞定了Simple AD和EC2 Linux/Windows的登录集成,接下来要实现按AD组控制实例访问的需求,其实可以通过AWS IAM权限策略结合AD组映射来实现,我给你梳理下具体的落地步骤,保证清晰好操作:
核心思路
把你的AD组(Developers、Production)分别映射到对应的IAM权限策略,策略里通过EC2实例标签做访问限制,最终实现“AD组→IAM权限→对应标签实例”的链路控制。
具体实现步骤
1. 创建IAM权限策略,按标签限制访问
首先要为两个AD组分别创建针对性的IAM策略,核心是用Condition字段匹配实例标签:
针对Developers组的策略(仅允许访问Dev标签实例)
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ // 支持SSM会话管理 "ssm:StartSession", // 支持EC2 Instance Connect(Linux) "ec2-instance-connect:SendSSHPublicKey", // 允许查看实例列表(仅能看到符合标签的实例) "ec2:DescribeInstances" ], "Resource": [ "arn:aws:ec2:*:*:instance/*", "arn:aws:ssm:*:*:document/AWS-StartInteractiveCommand" ], "Condition": { "StringEquals": { // 匹配实例的Environment标签为Dev "ec2:ResourceTag/Environment": "Dev" } } } ] }
针对Production组的策略(仅允许访问Prod标签实例)
把上面策略里的"ec2:ResourceTag/Environment": "Dev"改成"Prod"即可,其他内容保持一致。
2. 将AD组映射到IAM角色
因为Simple AD和AWS的集成需要通过角色映射来关联AD组和IAM权限,步骤如下:
- 先创建两个IAM角色:比如
Role-EC2-Dev-Access和Role-EC2-Prod-Access,分别把刚才创建的Dev、Prod策略附加到对应角色上。 - 登录AWS控制台,进入Directory Service,找到你的Simple AD目录。
- 切换到
Applications and Services→IAM Role Mapping页面。 - 点击
Add Role Mapping,选择你的AD组(比如CN=Developers,OU=Groups,DC=yourdomain,DC=com),然后关联对应的IAM角色(Role-EC2-Dev-Access);重复此操作把Production组映射到Role-EC2-Prod-Access。
3. 配置EC2实例的访问方式(Linux/Windows分别适配)
Linux实例
- 如果用EC2 Instance Connect:确保实例已经安装EC2 Instance Connect工具,并且你之前的AD登录集成已经生效。IAM策略里的
ec2-instance-connect:SendSSHPublicKey动作会自动限制用户只能向带有Dev/Prod标签的实例发送登录密钥。 - 如果用SSM Session Manager:更安全(无需开放SSH端口),只要实例安装并运行SSM Agent,且实例的IAM角色附加了
AmazonSSMManagedInstanceCore策略,用户就能通过SSM直接连接对应标签的实例。
Windows实例
- 推荐用SSM Session Manager:无需开放RDP端口,同样需要实例安装SSM Agent并关联
AmazonSSMManagedInstanceCore策略,用户通过AD凭证登录AWS后,只能启动带有对应标签实例的SSM会话。 - 如果坚持用RDP:可以结合EC2 Instance Connect for Windows,同时确保AD用户有实例的本地登录权限(你之前的集成应该已经搞定这部分),IAM策略会限制用户只能查看和连接对应标签的实例。
4. 验证配置
- 用属于Developers组的John登录AWS控制台(或通过AD凭证用AWS CLI登录),尝试访问带有Prod标签的实例,应该会收到权限拒绝提示;访问Dev标签的实例则能正常连接。
- 用Production组的用户重复测试,确认只能访问Prod标签的实例。
额外注意事项
- 确保EC2实例的标签准确:比如给Dev实例设置
Environment=Dev,Prod实例设置Environment=Prod,标签键值要和IAM策略里的Condition完全匹配。 - SSM访问的网络要求:如果实例没有公网IP,需要在VPC里配置SSM的VPC端点,确保实例能连接到AWS SSM服务。
- Linux实例的sudo权限:可以在
/etc/sudoers.d目录下创建配置文件,比如允许Developers组在Dev实例上执行sudo,Production组在Prod实例上执行sudo,和AD组直接关联即可。
内容的提问来源于stack exchange,提问作者Michal Grzelak
相关产品推荐
相关产品推荐

