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

CloudFormation为何使用陌生角色执行更新?栈更新权限问题求解

解决CloudFormation栈更新权限及角色假定问题

问题根源分析

  • 第一个权限错误:CloudFormation栈默认沿用首次创建/最近一次更新时使用的执行角色(即错误中的NotAdmin角色),即使你当前使用的是管理员权限角色,CFN仍会调用该旧角色执行资源变更操作,而NotAdmin缺少iam:PutRolePolicy权限导致失败。
  • 第二个验证错误:指定的RoleWithAdminAccess角色的信任策略未配置允许你当前使用的管理员角色去假定它,或ARN存在拼写错误。

解决方案

方案一:临时扩展旧执行角色权限(快速解决)

  1. 给NotAdmin角色添加允许操作目标角色zzzz的iam:PutRolePolicy权限:
    • 创建自定义IAM策略(JSON格式):
      {
        "Version": "2012-10-17",
        "Statement": [
          {
            "Effect": "Allow",
            "Action": "iam:PutRolePolicy",
            "Resource": "arn:aws:iam::xxxxx:role/zzzz"
          }
        ]
      }
      
    • 将该策略附加到NotAdmin角色。
  2. 重新执行原CloudFormation更新命令即可完成操作。

方案二:切换栈的执行角色为管理员角色(彻底解决)

  1. 检查RoleWithAdminAccess的信任策略,确保允许你当前使用的管理员角色假定它:
    • 修改信任策略为类似以下内容(替换为你的管理员角色ARN):
      {
        "Version": "2012-10-17",
        "Statement": [
          {
            "Effect": "Allow",
            "Principal": {
              "AWS": "arn:aws:iam::xxxxx:role/YourCurrentAdminRole"
            },
            "Action": "sts:AssumeRole"
          }
        ]
      }
      
  2. 执行带--role-arn参数的更新命令,必须同时指定模板内容(CloudFormation更新要求提供模板):
    aws cloudformation update-stack \
      --region xxx \
      --stack-name xxx \
      --template-body file://your-stack-template.yaml \
      --role-arn arn:aws:iam::xxx:role/RoleWithAdminAccess
    
    (若模板存储在S3,改用--template-url https://s3.amazonaws.com/your-bucket/template.yaml)
  3. 操作成功后,后续栈更新将默认使用RoleWithAdminAccess角色,无需再指定参数。

额外提示

  • 可通过以下命令查看栈当前的执行角色:
    aws cloudformation describe-stacks --stack-name xxx --region xxx --query "Stacks[0].RoleARN"
    
  • 若使用AWS控制台操作,在更新栈的“高级选项”中找到“执行角色”,选择RoleWithAdminAccess即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 19:37:28