CloudFormation脚本卡在UPDATE_ROLLBACK_FAILED中,AWSLambdaInternal需要GetObject权限。怎么解决?

时间:2019-01-17 20:37:17

标签: amazon-s3 aws-lambda amazon-cloudformation

我的CloudFormation堆栈处于UPDATE_ROLLBACK_FAILED状态。

我看到的与Lambda创建相关的错误消息是:

Your access has been denied by S3, please make sure your request credentials 
have permission to GetObject for <codepipeline-bucket-name>/<file-name>]. S3 
Error Code: AccessDenied. S3 Error Message: Access Denied (Service: 
AWSLambdaInternal; Status Code: 403; Error Code: AccessDeniedException; 
Request ID: <request-id>)

我已经仔细检查了与堆栈关联的IAM角色是否具有正确的S3权限,但是我不认为是CloudFormation引发了权限错误。我认为这是AWSLambdaInternal服务。

我还有其他十多个使用相同IAM角色的堆栈,但我没有遇到这个问题。我什至尝试将特定的S3对象公开,以查看是否可能是问题所在。但是我只能假定AWSLambdaInternal没有S3 GetObject权限。我什至尝试将lambda.awsamazon.com的sts:AssumeRole权限添加到CloudFormation脚本使用的IAM角色,但这并没有改变。

在我决定将其创建的Lambda函数移至VPC之前,堆栈工作正常。

2 个答案:

答案 0 :(得分:1)

实际上,状态UPDATE_ROLLBACK_FAILED意味着您不仅更新失败,而且回滚失败,这实际上是不应该发生的。

您应该检查是否手动更改了CloudFormation个托管资源中的任何一个,以及是否确定没有-向CloudFormation支持人员报告问题。

答案 1 :(得分:0)

您移入VPC的lambda函数-难道不是有机会为您提供自定义CloudFormation资源吗?因为回滚失败对我来说通常是我自己的事-当我弄乱了自定义资源的lambda函数而失败时。如有疑问,我通常将自定义资源的删除操作设为无操作,或者使它始终报告成功(即使失败)(然后我必须手动删除资源)。

如果lambda函数确实负责管理自定义资源,则应1)将其移回原处; 2)创建一个新的lambda函数,您将知道该函数可以访问并且可以使用; 3)然后再切换到使用lambda函数。

在CloudFormation的堆栈事件列表中,查看哪些资源更新失败。单个错误的重要性不如为其触发的资源重要。