使用AWS re:Post即您表示您同意 AWS re:Post 使用条款

如何对 CloudFormation 中缺少的权限错误进行故障排除?

2 分钟阅读
0

我想解决 AWS CloudFormation 中的权限错误。

简短描述

当您启动堆栈时,CloudFormation 会代入启动该堆栈的用户的凭证来进行 API 调用。如果为堆栈定义了服务角色,则 CloudFormation 将代入此角色。代入的用户或服务角色可能具有 CloudFormation 可以执行的允许操作的有限列表。当角色没有创建、删除或更新资源的权限时,操作会失败。失败会生成以下类型的错误消息:

User: [IAM Role] is not authorized to perform: ec2:RunInstances on resource: [Resource Id] because no identity-based policy allows the ec2:RunInstances action

解决方法

以下部分介绍了解决基于身份和基于资源的策略错误的方法。

**注意:**如果在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请参阅 AWS CLI 错误故障排除。此外,请确保您使用的是最新版本的 AWS CLI

基于身份的策略错误

确定调用角色

CloudFormation 允许您指定服务角色以代表您调用堆栈中的资源。如果未指定服务角色,则 CloudFormation 使用启动堆栈操作的用户的 AWS Identity and Access Management (IAM) 凭证进行调用。

在 AWS CloudFormation 控制台中查找服务角色。

  1. 打开 AWS CloudFormation 控制台
  2. Stacks(堆栈)页面下选择您的堆栈。这将打开页面的 Overview(概述)部分。
  3. 检查 IAM Role(IAM 角色)下的值。您看到的值是为此堆栈配置的服务角色。

如果没有任何值,则不会配置服务角色。相反,所有堆栈操作都是使用启动堆栈操作的角色的凭证完成的。

要查找服务角色,请使用 describe-stacks AWS CLI 命令并查找 RoleARN 的值。如果此字段为空,则未定义服务角色。CloudFormation 使用用于启动堆栈的角色

添加缺失的权限

在 CloudFormation 返回的错误消息中查找确切的缺失权限。或者,在 AWS CloudTrail 上搜索权限错误,看看哪个 API 操作已被拒绝。最佳做法是搜索生成错误的同时发生的事件。然后按照以下步骤解决错误:

  1. 将缺失的权限添加到与该角色关联的 IAM 策略中。或者,转而使用具有必要权限的服务角色。
  2. 将操作添加到附加到 IAM 角色的策略中。或者,创建新策略。

**注意:**使用角色上的 IAM policy simulator 来确认其拥有启动模板中定义的资源的权限。

基于资源的策略错误

有时,角色拥有基于身份的权限,但访问的资源不允许该角色在其基于资源的策略中对其进行修改。AWS Key Management Service (AWS KMS) 密钥和 Amazon Simple Storage (Amazon S3) 存储桶等资源使用基于资源的策略。由此产生的错误可能如下所示:

User: [IAM Role] is not authorized to perform: ec2:RunInstances on resource: [Resource Id] because no resource-based policy allows the ec2:RunInstances action

请按照以下步骤解决错误:

确定调用角色

  1. 打开 AWS CloudFormation 控制台
  2. Stacks(堆栈)页面下选择您的堆栈
  3. 查看页面 Overview(概述)部分中 IAM Role(IAM 角色)下的值。IAM 角色的值是为此堆栈配置的服务角色。

如果没有任何值,则不会配置服务角色。相反,所有堆栈操作都是使用启动堆栈操作的实体的凭证完成的。

要查找服务角色,请使用 describe-stacks AWS CLI 命令并查找 RoleARN 的值。如果此字段为空,则不会定义服务角色。CloudFormation 使用用于启动堆栈的角色

更新基于资源的策略

  1. 查看错误以检索您无法访问的资源的 Amazon 资源名称 (ARN)。如果错误不显示资源的 ARN,请搜索关联的 CloudTrail 事件日志以查看随请求传递的资源。
  2. 使用授权错误来确定修改资源所需的权限。
  3. 查看资源策略并将调用角色添加到策略中。或者,添加必要的语句以允许 IAM 角色对资源执行操作。

例如,当运行 Decrypt KMS(解密 KMS)API 时,您可能会收到以下错误:

"User: arn:aws:sts::12345678910:assumed-role/AWSServiceRoleForConfig/LambdaDescribeHandlerSession is not authorized to perform: kms:Decrypt on resource: arn:aws:kms:eu-west-1:12345678910:key/********-****-****-****-************ because no resource-based policy allows the kms:Decrypt action"

错误消息表明 AWS KMS 密钥的策略不允许 IAM 角色 AWSServiceRoleForConfig 访问 kms:Decrypt 操作。更新 KMS 策略以授予 IAM 角色对此操作的访问权限。

相关信息

使用 AWS Identity and Access Management 控制访问权限

AWS 官方
AWS 官方已更新 9 个月前