You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置AWS联合用户权限:允许创建仅访问自有资源的IAM角色?

解决方案:限制联合用户创建的IAM角色仅访问自身资源

核心思路

通过IAM的条件键和**权限边界(Permissions Boundary)**实现双重控制:

  1. 强制联合用户创建角色时必须打上专属身份标签(比如Creator:${aws:userid})
  2. 给新建角色绑定权限边界,限制其仅能访问带有相同标签的资源
  3. 限制联合用户仅能管理自己创建的标签化角色

具体配置步骤

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等服务的权限)

验证要点

  1. 用联合用户身份创建IAM角色:检查是否必须指定权限边界和Creator标签,否则创建失败
  2. 切换到新建角色:尝试访问其他用户创建的无标签资源,验证是否被拒绝;尝试访问自己创建的带相同Creator标签的资源,验证是否允许
  3. 尝试修改新建角色的权限边界:验证是否被禁止(因为联合用户的权限策略未允许此操作)

内容的提问来源于stack exchange,提问作者Georgi Koemdzhiev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 13:35:00