如何将IAM用户、用户组及策略迁移至AWS CloudFormation管理
现有IAM资源迁移至CloudFormation统一管理方案
基础迁移流程(解决导入卡点问题)
绝大多数人导入IAM资源卡壳,都是从零手写模板属性填错导致的,按以下步骤操作可以避开90%的常见问题:
- 直接使用CloudFormation控制台的资源导入功能生成初始模板,不要手动从零编写。操作路径为:CloudFormation控制台 -> 创建堆栈 -> 选择「将现有资源导入堆栈」,依次勾选需要导入的资源类型:
AWS::IAM::User(对应IAM用户)、AWS::IAM::Group(对应用户组)、AWS::IAM::ManagedPolicy(对应客户托管权限策略)、AWS::IAM::GroupPolicy(对应组内联权限策略),按照页面引导选中你账号下所有需要纳入管理的对应资源,控制台会自动生成匹配现有资源配置的初始模板,不需要手动核对每个属性值。 - 导入操作前先把控制台切换到us-east-1区域,IAM是全局服务,在其他区域操作经常会出现资源查询不到、权限校验失败的问题,这是最常见的卡点。
- 初始导入阶段给所有资源统一配置
DeletionPolicy: Retain,等堆栈导入完成、做过漂移检测确认模板配置和线上资源完全一致后,再根据需要调整删除策略,避免操作失误导致IAM资源被删除影响现有业务权限。 - 导入完成后先执行一次堆栈漂移检测,确认所有资源状态为
IN_SYNC之后,再开始通过堆栈做配置变更,不要刚导入就直接修改资源配置。
避坑提示:如果导入时提示策略不存在,先确认你要导入的是客户托管策略还是AWS托管策略,AWS托管策略不需要纳入你的堆栈管理,只需要在组的策略关联字段里引用对应ARN即可。
全量用户自动归属指定组的低成本实现方案
CloudFormation原生没有「选中一个用户组就自动递归拉取所有关联用户、用户组、组策略」的一键功能,不需要找复杂的第三方工具,用以下两种方式就能实现低维护成本的管理:
- 无开发成本方案:在模板里用列表参数维护所有纳入管理的IAM用户、用户组、组策略标识,配合
Fn::ForEach循环语法批量生成资源关联关系,针对需要包含所有用户的特定组,直接把全量用户列表作为AWS::IAM::UserGroupMembership资源的入参,即可实现一次配置所有用户自动归组。后续新增资源时只需要在对应参数列表里加一行资源标识,不需要修改核心资源配置,维护成本极低。
核心配置片段参考:Parameters: TargetIAMUsers: Type: CommaDelimitedList Description: 纳入管理的全量IAM用户名 TargetIAMGroups: Type: CommaDelimitedList Description: 纳入管理的全量IAM用户组 TargetGroupPolicies: Type: CommaDelimitedList Description: 纳入管理的全量组关联托管策略ARN AllUserGroupName: Type: String Default: "all-internal-users" # 需包含所有用户的特定组名 Resources: AllUserToGroupBinding: Type: AWS::IAM::UserGroupMembership Properties: GroupName: !Ref AllUserGroupName Users: !Ref TargetIAMUsers - 全自动方案:如果不想手动维护参数列表,可以写一个CloudFormation自定义宏,在堆栈部署前自动扫描账号下所有IAM用户、用户组、组关联策略,自动填充参数值,实现真正的零手动配置。这个方案需要少量的Lambda开发成本,适合资源变动频繁的场景。
内容的提问来源于stack exchange,提问作者orome
相关产品推荐
相关产品推荐

