如何解决更新或删除 AWS CloudFormation 堆栈时遇到的 “Role <ROLE_ARN> is invalid or cannot be assumed”(角色 <ROLE_ARN> 无效或无法代入”错误?

上次更新时间:2020 年 10 月 15 日

我想解决创建、更新或删除 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 角色来解决此错误。如果已删除信任策略,则可以通过创建与错误消息中提到的角色同名的角色来解决此错误。最后,您必须从 AWS CLI 中使用 --role-arn 参数覆盖当前使用的角色。

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

解决方法

确认 IAM 角色存在,如果该角色不存在则创建新 IAM 角色

1.    打开 IAM 控制台

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

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

4.    如果角色存在,请完成确认角色信任策略允许 AWS CloudFormation 代入 IAM 角色部分中的步骤。

5.    如果角色不存在,请使用与错误中提到的角色相同的名称创建新 IAM 角色

6.    确认新 IAM 角色具有 AWS CloudFormation 对堆栈中的资源执行创建、更新或删除操作必需的所有权限。

7.    创建了角色之后,再次创建、更新或删除堆栈。

注意:如果新角色没有所需的 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": "ec2.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

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

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

8.    创建了角色之后,再次创建、更新或删除堆栈。

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

您可以使用 AWS CLI 覆盖 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 替换为您的值。


这篇文章对您有帮助吗?


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