CloudFormation "You are not authorized to perform this operation" create 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-tableCLI命令时它有效,而不是从CloudFormation中无效。两者是而不是(完全(相同。

想想看!

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

相关内容

最新更新