如何配置AWS IAM策略,仅允许开发者管理自身创建的资源?
单AWS账户内实现开发者仅访问自身创建资源的方案
核心逻辑
通过IAM条件策略结合强制资源标签,让Developer组用户只能操作自己创建的资源,同时允许创建任意资源,完全在单个账户内实现,无需AWS Organizations。
第一步:给Developer组绑定核心权限策略
创建以下IAM策略并附加到Developer用户组,该策略实现三个核心功能:
- 允许创建任意资源,但强制用户为新资源添加
CreatedBy标签,值必须为自身用户名 - 允许编辑、查看自己创建的资源——要么资源所有者是当前用户(通过
aws:ResourceOwner判断),要么资源带有CreatedBy: 当前用户名标签 - 允许管理自身资源的标签
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "*", "Resource": "*", "Condition": { "StringEquals": { "aws:RequestTag/CreatedBy": "${aws:username}" }, "ForAllValues:StringEquals": { "aws:TagKeys": "CreatedBy" } } }, { "Effect": "Allow", "Action": "*", "Resource": "*", "Condition": { "Or": [ {"Bool": {"aws:ResourceOwner": "true"}}, {"StringEquals": {"aws:ResourceTag/CreatedBy": "${aws:username}"}} ] } }, { "Effect": "Allow", "Action": [ "tag:GetResources", "tag:TagResources", "tag:UntagResources" ], "Resource": "*", "Condition": { "StringEquals": { "aws:ResourceTag/CreatedBy": "${aws:username}" } } } ] }
第二步:处理特殊资源
部分AWS资源(如S3桶、IAM角色)不支持aws:ResourceOwner条件键,此时CreatedBy标签将作为唯一判断依据。由于第一步已强制创建资源时打标签,这类资源的权限控制仍能正常生效。
第三步:隔离共享资源
若账户内存在共享资源,先给这些资源统一添加SharedResource: true标签,再在策略中加入显式拒绝规则,防止开发者操作共享资源:
{ "Effect": "Deny", "Action": "*", "Resource": "*", "Condition": { "StringEquals": { "aws:ResourceTag/SharedResource": "true" } } }
如果需要让开发者只读访问共享资源,可单独为Developer组附加共享资源的只读策略——注意Deny优先级高于Allow,需先配置拒绝规则再添加只读允许规则。
第四步:验证效果
- 使用
Developer组内的用户A登录,创建EC2实例、S3桶等资源,检查是否自动带有CreatedBy: 用户A标签 - 尝试访问其他用户创建的资源,确认无法操作
- 测试共享资源的访问权限,确保符合预期
注意事项
- IAM用户、组这类账户级资源的创建权限需谨慎配置,避免开发者修改其他用户的配置
- 定期审计资源标签与IAM策略,确保权限配置符合预期
- 部分服务(如CloudFormation)可能需要额外调整策略,确保栈内资源能继承
CreatedBy标签
内容的提问来源于stack exchange,提问作者Adrien Kaczmarek
相关产品推荐
相关产品推荐

