AWS Lambda函数调用策略的问题以及SDK的权限

时间:2017-02-27 02:38:33

标签: amazon-web-services aws-lambda aws-api-gateway boto3

我有一个非常奇怪的问题。我正在使用boto3为Lambda函数创建API网关代理。我可以在API网关控制台中创建方法,它告诉我API网关将被授予调用该功能的权限。这很有效。

但是,如果我使用SDK(lambda.add_permission)创建API网关方法,我会遇到以下异常:

Execution failed due to configuration error: Invalid permissions on Lambda function

我已经确认我创建的策略与控制台向导创建的策略完全相同,所以我对发生的事情以及为什么API无法调用该函数感到困惑。这是我附加的许可:

{
    "Policy": "{\"Version\":\"2012-10-17\",\"Id\":\"default\",\"Statement\":[{\"Sid\":\"1ac63c2c972f3cbdbcf0f4b0038133e2\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"apigateway.amazonaws.com\"},\"Action\":\"lambda:InvokeFunction\",\"Resource\":\"arn:aws:lambda:REGION:ACCOUNT:function:FUNCTION_NAME\",\"Condition\":{\"ArnLike\":{\"AWS:SourceArn\":\"arn:aws:execute-api:REGION:ACCOUNT:API_ID/*/*/*\"}}}]}"
}

似乎其他人也有类似的问题,但这些解决方案是我已经尝试过的:

https://forums.aws.amazon.com/thread.jspa?threadID=217254&tstart=0

1 个答案:

答案 0 :(得分:2)

TL; WR:通过CLI或SDK为其添加权限时,为功能版本指定ARN。

在使用CLI和API网关控制台搞乱之后,我能够解决这个问题。由于我是动态更新我的Lambda函数,因此每次更新时都会创建版本号。当我在Method中创建API网关请求时,我将其指向该函数的特定版本,然后我更新了最新版本的策略那个版本的政策。在控制台向导中,它不会使用版本号,因此策略是正确的......

弄清楚多么痛苦!应该更好地记录!!