如何创建允许iam:CreateRole操作的IAM身份型策略
问题原因
你在本地通过AWS CLI执行CloudFormation模板时,调用接口使用的是本地配置的IAM身份权限,该身份本身具备IAM角色创建权限;但CodePipeline中执行CloudFormation栈操作时,使用的是Pipeline中CloudFormation动作配置的专属服务角色,该角色未被授予iam:CreateRole及IAM角色生命周期相关的操作权限,因此触发权限拒绝错误。
修复步骤
- 定位CloudFormation执行角色
进入CodePipeline控制台,打开执行失败的流水线,找到报错的CloudFormation部署阶段,查看该阶段配置的CloudFormation执行角色ARN,即报错信息中assumed-role/后斜杠前的角色名对应的IAM角色。 - 为角色配置最小权限策略(生产环境推荐)
进入IAM控制台,找到上一步定位到的角色,选择添加内联策略,切换到JSON编辑模式,填入以下策略内容,替换占位符为你的实际环境配置:
以上权限覆盖了实例角色创建、策略挂载、删除、查询、标签编辑、角色传递的全流程必要权限,避免后续栈操作出现其他IAM相关权限报错。{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iam:CreateRole", "iam:PutRolePolicy", "iam:AttachRolePolicy", "iam:DetachRolePolicy", "iam:DeleteRolePolicy", "iam:DeleteRole", "iam:GetRole", "iam:ListRolePolicies", "iam:ListAttachedRolePolicies", "iam:TagRole", "iam:PassRole" ], "Resource": "arn:aws:iam::替换为你的12位AWS账号ID:role/*InstanceRole*" } ] } - (可选)测试环境快速配置
如果是临时测试环境,可直接为该角色附加AWS托管的IAMFullAccess权限策略,该方式权限过大,禁止在生产环境使用。 - 校验角色信任关系
打开该IAM角色的信任关系配置页,确认信任实体包含CloudFormation服务,信任策略需包含以下语句,否则CloudFormation无法正常代入该角色执行操作:{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "cloudformation.amazonaws.com" }, "Action": "sts:AssumeRole" } ] } - 重试流水线
回到CodePipeline控制台,选择重试失败的CloudFormation阶段即可,无需重新执行整条流水线。
注意:如果该IAM角色配置了权限边界(Permissions Boundary),需要同步检查权限边界规则,确保上述IAM操作在权限边界中被允许,否则即使附加了内联策略依然会报权限拒绝错误。
内容的提问来源于stack exchange,提问作者CJ Chang
相关产品推荐
相关产品推荐

