aws cli cloudformation lambda 无效输入错误

问题描述

我正在尝试使用此示例修改 java 中的 lambda 函数示例:

https://github.com/awsdocs/aws-lambda-developer-guide/tree/main/sample-apps/s3-java

但在此过程中,我开始收到随机错误,因此我开始删除堆栈和剩余资源,并在没有锁定的情况下再次托盘。所以我决定重新下载示例,但错误不会消失。

即使尝试过 aws-nuke,但在尝试部署示例时仍然存在以下错误

{
        "StackId": "arn:aws:cloudformation:us-east-2:XXXXX:stack/s3-java/XXX","EventId": "functionRole-CREATE_Failed-2021-03-26T22:38:14.278Z","StackName": "s3-java","LogicalResourceId": "functionRole","PhysicalResourceId": "s3-java-functionRole-13JFU76O57RLT","ResourceType": "AWS::IAM::Role","Timestamp": "2021-03-26T22:38:14.278000+00:00","ResourceStatus": "CREATE_Failed","ResourceStatusReason": "ARN AWSLambdaReadOnlyAccess is not valid. (Service: AmazonIdentityManagement; Status Code: 400; Error Code: InvalidInput; Request ID:XXXXXXX; Proxy: null)","ResourceProperties": "{\"ManagedPolicyArns\":[\"arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole\",\"arn:aws:iam::aws:policy/AWSXraywriteonlyAccess\",\"AWSLambdaReadOnlyAccess\",\"arn:aws:iam::aws:policy/service-role/AWSLambdaVPCAccessExecutionRole\",\"arn:aws:iam::aws:policy/AmazonS3FullAccess\"],\"AssumeRolePolicyDocument\":{\"Version\":\"2012-10-17\",\"Statement\":[{\"Action\":[\"sts:AssumeRole\"],\"Effect\":\"Allow\",\"Principal\":{\"Service\":[\"lambda.amazonaws.com\"]}}]},\"Tags\":[{\"Value\":\"SAM\",\"Key\":\"lambda:createdBy\"}]}"
    }

当我转到 IAM 策略时,没有称为 AWSLambdaReadOnlyAccess 的策略。我该如何解决这个问题?

解决方法

2021 年 3 月 1 日之后,AWS 托管策略 AWSLambdaReadOnlyAccess 和 AWSLambdaFullAccess 将被弃用,并且不能再附加到新的 IAM 用户。有关策略弃用的更多信息,请参阅 IAM 用户指南中的弃用 AWS 托管策略。 [1]

AWSLambda_ReadOnlyAccess 的亚马逊资源名称是 arn:aws:iam::aws:policy/AWSLambda_ReadOnlyAccess。 您必须指定完整的 ARN。 由于您在模板中使用 AWS::Serverless::Function,放置 AWSLambda_ReadOnlyAccess 应该可以解决此问题。我不知道 aws-nuke 是否也删除了 AWS Managed Policies,但需要注意的是

[1] https://docs.aws.amazon.com/lambda/latest/dg/security_iam_troubleshoot.html