如何配置AWS联合用户权限:允许创建仅访问自有资源的IAM角色?
解决方案:限制联合用户创建的IAM角色仅访问自身资源
核心思路
通过IAM的条件键和**权限边界(Permissions Boundary)**实现双重控制:
- 强制联合用户创建角色时必须打上专属身份标签(比如
Creator:${aws:userid}) - 给新建角色绑定权限边界,限制其仅能访问带有相同标签的资源
- 限制联合用户仅能管理自己创建的标签化角色
具体配置步骤
1. 创建权限边界策略(限制新建角色的资源访问范围)
这个策略会约束所有通过联合用户创建的角色,只能操作带有Creator标签且标签值等于该角色创建者aws:userid的资源,同时允许角色执行必要的IAM假设操作:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "*" }, { "Effect": "Allow", "Action": [ // 替换为用户实际需要的资源操作,比如ec2:*、s3:*等 "ec2:Describe*", "ec2:RunInstances", "s3:ListBucket", "s3:GetObject" ], "Resource": "*", "Condition": { "StringEquals": { "aws:ResourceTag/Creator": "${aws:userid}" } } }, { "Effect": "Allow", "Action": [ // 允许给资源打自己的Creator标签 "ec2:CreateTags", "s3:PutBucketTagging", "s3:PutObjectTagging" ], "Resource": "*", "Condition": { "StringEquals": { "aws:RequestTag/Creator": "${aws:userid}" } } } ] }
2. 给联合用户的IAM角色附加权限策略(允许创建带约束的角色)
这个策略允许联合用户创建IAM角色,但强制要求指定上述权限边界,且必须给新建角色打上Creator标签,同时仅能管理自己标签的角色:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iam:CreateRole", "Resource": "arn:aws:iam::ACCOUNT_ID:role/sandbox-*", // 限制角色名称前缀,可选 "Condition": { "StringEquals": { "iam:PermissionsBoundary": "arn:aws:iam::ACCOUNT_ID:policy/YourPermissionBoundaryPolicyName", "aws:RequestTag/Creator": "${aws:userid}" }, "ForAllValues:StringEquals": { "iam:TagKeys": "Creator" // 强制只能打Creator标签,可选 } } }, { "Effect": "Allow", "Action": [ "iam:GetRole", "iam:UpdateRole", "iam:DeleteRole", "iam:AttachRolePolicy", "iam:DetachRolePolicy" ], "Resource": "*", "Condition": { "StringEquals": { "aws:ResourceTag/Creator": "${aws:userid}" } } }, { "Effect": "Allow", "Action": "iam:TagRole", "Resource": "*", "Condition": { "StringEquals": { "aws:ResourceTag/Creator": "${aws:userid}", "aws:RequestTag/Creator": "${aws:userid}" } } }, { "Effect": "Deny", "Action": "iam:DeleteRolePolicy", "Resource": "*", "Condition": { "StringEquals": { "aws:ResourceTag/Creator": "${aws:userid}" } } } ] }
3. 关键细节说明
${aws:userid}:AWS内置变量,对于Azure AD联合用户,值格式为AROAEXAMPLEUSERID:username@yourdomain.com,能唯一标识每个联合用户- 权限边界是强制约束:即使联合用户给新建角色附加了更宽泛的策略,权限边界也会优先生效,确保资源访问范围被限制
- 角色名称前缀约束(
sandbox-*):可选,用于区分联合用户创建的角色和IT部门管理的角色 - 可根据实际需求调整允许的资源操作(比如添加RDS、Lambda等服务的权限)
验证要点
- 用联合用户身份创建IAM角色:检查是否必须指定权限边界和
Creator标签,否则创建失败 - 切换到新建角色:尝试访问其他用户创建的无标签资源,验证是否被拒绝;尝试访问自己创建的带相同
Creator标签的资源,验证是否允许 - 尝试修改新建角色的权限边界:验证是否被禁止(因为联合用户的权限策略未允许此操作)
内容的提问来源于stack exchange,提问作者Georgi Koemdzhiev
相关产品推荐
相关产品推荐

