如何通过CloudFormation配置IAM权限,仅允许指定组删除带特定标签的用户?
正确的CloudFormation YAML配置方案
问题分析
原配置的核心错误是用了aws:RequestTag/CreatedBy条件——这个条件是校验请求发起时携带的标签,但iam:DeleteUser操作需要验证的是目标IAM用户本身已存在的标签,得换成iam:ResourceTag/CreatedBy才能生效。
另外你提到其他管理员组仍能删除不该操作的用户,这是因为那些组的权限策略大概率包含无限制的iam:DeleteUser权限(比如内置的AdministratorAccess策略),这类权限优先级高于自定义策略,需要单独调整那些组的权限才能彻底限制,但以下配置先解决OperationsAdmin组的权限问题。
修正后的CloudFormation配置
OperationsUserGroupAdmin: Type: AWS::IAM::Group Properties: GroupName: !Sub OperationsUserGroupAdmin-${StackName} Path: "/" Policies: - PolicyName: !Sub OperationsUserGroupAdminPolicy-${StackName} PolicyDocument: Version: '2012-10-17' Statement: - Effect: Allow Action: - "iam:AddUserToGroup" - "iam:RemoveUserFromGroup" Resource: - !Sub "arn:aws:iam::${AWS::AccountId}:group/OperationsUserGroup-${StackName}" - Effect: Allow Sid: DeleteUserWithSpecificTag Action: - "iam:DeleteUser" Resource: !Sub "arn:aws:iam::${AWS::AccountId}:user/*" Condition: StringEquals: iam:ResourceTag/CreatedBy: "OperationsAdmin"
关键修改说明
- 把资源ARN中的
*替换为${AWS::AccountId}:缩小权限范围到当前账号内的资源,避免过度授权。 - 替换条件为
iam:ResourceTag/CreatedBy:确保只有带有CreatedBy:OperationsAdmin标签的IAM用户才能被该组用户删除。 - 调整Sid为更清晰的名称:方便后续维护时快速识别策略用途。
关于其他管理员组的补充说明
如果其他管理员组(比如内置管理员组)仍能删除任意用户,需要给他们附加拒绝删除无指定标签用户的策略,示例如下:
DenyDeleteUntaggedUsersPolicy: Type: AWS::IAM::Policy Properties: PolicyName: DenyDeleteUntaggedUsersPolicy PolicyDocument: Version: '2012-10-17' Statement: - Effect: Deny Action: "iam:DeleteUser" Resource: !Sub "arn:aws:iam::${AWS::AccountId}:user/*" Condition: StringNotEquals: iam:ResourceTag/CreatedBy: "OperationsAdmin" Groups: - 其他管理员组名称
内容的提问来源于stack exchange,提问作者Gene Smith
相关产品推荐
相关产品推荐

