如何解决在更新或删除 AWS CloudFormation 堆栈时遇到的“Role [role_arn] is invalid or cannot be assumed”错误?

上次更新日期:2022 年 8 月 30 日

我想解决在创建、更新或删除 AWS CloudFormation 堆栈时遇到的“Role [role_arn] is invalid or cannot be assumed”(角色 [role_arn] 无效或无法代入)错误。

简短描述

当 AWS CloudFormation 用来代表您调用堆栈中的资源的 AWS Identity and Access Management (IAM) 服务角色出现问题时,您将会收到此错误。

当您尝试以下操作时,可能会收到此错误:

  • 使用 AWS 命令行界面 (AWS CLI) 或 API 调用创建堆栈。
  • 当 AWS CloudFormation 创建更改集时更新堆栈。
  • 删除堆栈。
  • 更新或删除 IAM 角色。如果您修改了更新后的 IAM 角色的信任策略,则 AWS CloudFormation 无法代入该角色。

要解决此错误,请确定 AWS CloudFormation 使用的 IAM 服务角色是否存在。然后:

  • 如果该 IAM 角色不存在,请创建一个具有相同名称的新 IAM 角色。
  • 如果该 IAM 角色存在,请确认该角色的信任策略允许 AWS CloudFormation 代入该 IAM 角色。

您还可以使用 --role-arn 参数,覆盖用于覆盖当前堆栈操作所用服务角色的当前 IAM 角色。

注意:如果在运行 AWS CLI 命令时遇到错误,请确保您使用的是最新版本的 AWS CLI

解决方法

确认 IAM 角色是否存在

1.    打开 IAM 控制台

2.    在导航窗格中,选择角色

3.    在 Role name(角色名称)列中,选择在您收到的错误消息中提到的 IAM 角色。

4.    如果该角色存在,请完成确认角色信任策略允许 AWS CloudFormation 代入 IAM 角色部分中的步骤
        –或者–
        完成覆盖 AWS CloudFormation 使用的当前 IAM 角色中的步骤。

        如果该角色不存在,请完成创建一个新的 IAM 角色并确认其具有所需的权限中的步骤。

创建一个新的 IAM 角色并确认其具有所需的权限

1.    使用与错误中所提及角色相同的名称创建一个新的 IAM 角色

2.    确认该新 IAM 角色具有所需的权限,以便 AWS CloudFormation 在堆栈中的资源上执行创建、更新或删除操作。

3.    创建该角色后,您可以重新创建、更新或删除堆栈。

注意:如果新角色没有所需的 IAM 权限,则堆栈操作可能会失败。例如,如果您尝试删除 IAM 角色对其没有 ec2:TerminateInstances 操作权限的 Amazon Elastic Compute Cloud (Amazon EC2) 实例资源,则删除操作将会失败。

确认角色信任策略允许 AWS CloudFormation 代入 IAM 角色

1.    打开 IAM 控制台

2.    在导航窗格中,选择角色

3.    在 Role name(角色名称)列中,选择在您收到的错误消息中提到的 IAM 角色。

4.    选择信任关系选项卡。

5.    确认信任关系是否将 cloudformation.amazonaws.com 显示为受信任实体。

如果 cloudformation.amazonaws.com 未列为受信任实体,请选择 Edit trust relationship(编辑信任关系)。

6.    在 Policy Document(策略文档)编辑器中,输入以下 AWS CloudFormation 服务角色信任策略:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "Service": "cloudformation.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

7.    选择 Update Trust Policy(更新信任策略)。

现在,更新后的信任策略允许 AWS CloudFormation 代入 IAM 角色。

8.    创建该角色后,您可以重新创建、更新或删除堆栈。

覆盖 AWS CloudFormation 使用的当前 IAM 角色

1.    要更新堆栈,请运行以下命令:

aws cloudformation update-stack --stack-name my-stack --template-body file://my-stack-template.json --role-arn arn:aws:iam::123456789123:role/cloudformation-role

注意:my-stackmy-stack-template.json123456789123 替换为您的值。

2.    要删除堆栈,请运行以下命令:

aws cloudformation delete-stack --stack-name my-stack --role-arn arn:aws:iam::123456789123:role/cloudformation-role

注意:my-stack123456789123 替换为您的值。


这篇文章对您有帮助吗?


您是否需要账单或技术支持?