繁体   English   中英

CloudFormation“您无权执行此操作”创建 SubnetRouteTableAssociation

[英]CloudFormation "You are not authorized to perform this operation" creating SubnetRouteTableAssociation

在 CloudFormation 堆栈上,我收到AWS::EC2::SubnetRouteTableAssociation类型的操作错误:

确切的错误是:

Resource handler returned message: "You are not authorized to perform this operation.
(Service: Ec2, Status Code: 403, Request ID: XXXXXXXX, Extended Request ID: null)"
(RequestToken: XXXXXXXX, HandlerErrorCode: GeneralServiceException)

困扰我的是我看不到 API 调用失败了。 通常,我认为它将操作名称放在括号中,以便更容易识别发生了什么。 无论如何,我猜测并假设它是用户没有的AssociateRouteTable权限。 但是用户这个权限。

问题:如何确定需要授予相关 IAM 用户的 API 操作的类型?

我试过的

我试图在 CLI 中做同样的事情(我相信是):

aws ec2 associate-route-table \
   --subnet-id <subnet-id> \ 
   --route-table-id <route-table-id>

(显然与我的 CloudFormation 使用的值相同)。 通过 CLI 执行此操作并正确地将事件放入AssociateRouteTable类型的 CloudTrail 事件历史记录中。 但是当我通过 CloudFormation 执行此操作时,我得到了上述错误,并且在 CloudTrail 事件历史记录中没有任何AssociateRouteTable事件的踪迹。

事实证明,这很难弄清楚。 最后,我求助于从具有AdministratorAccess策略的用户那里部署 CloudFormation 模板。 不出所料,这很有效,并为我提供了“调试”信息。 通过此操作,我可以查看CloudTrail 事件历史记录,并看到 CloudFormation 将执行多个API 调用以满足AWS::EC2::SubnetRouteTableAssociation资源类型。 这些曾经是:

  • ec2:DescribeSubnets
  • ec2:DescribeRouteTables
  • ec2:AssociateRouteTable

上面列表中的最后一个也就不足为奇了。 在我的情况下,用户缺少执行ec2:DescribeRouteTables的权限,因此 CloudFormation 部署将失败并显示所述错误消息。 向用户添加此权限后,它现在可以工作了。

这也解释了为什么它在我执行aws ec2 associate-route-table CLI 命令时有效,而在 CloudFormation 中无效。 两者(完全)一样。

Go 图!

我真诚地怀疑大多数 AWS 书呆子是否会通过我为解决这个问题而采取的相同步骤 go,所以我想一定有一些我错过的文档。 此外,我仍然无法解释为什么失败的 API 调用未显示在 CloudTrail 事件历史记录中。 唉,它现在可以工作了,所以我正在收拾东西。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM