【问题标题】:Problems with AWS Lambda function invocation policy with permission via SDK通过 SDK 获得权限的 AWS Lambda 函数调用策略问题
【发布时间】:2017-07-17 13:08:44
【问题描述】:

我遇到了一个非常奇怪的问题。我正在使用 boto3 为 Lambda 函数创建 API Gateway 代理。我可以在 API Gateway 控制台中创建 Method,它会通知我 API Gateway 将被授予调用该函数的权限。这很好用。

但是,如果我使用 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

【问题讨论】:

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


    【解决方案1】:

    TL;WR:通过 CLI 或 SDK 向函数版本添加权限时指定函数版本的 ARN。

    在对 CLI 和 API 网关控制台进行了大量操作之后,我终于弄明白了。因为我是动态更新我的 Lambda 函数,所以每次更新时它都会创建版本号。当我在方法中创建 API 网关请求时,我将它指向该函数的特定 version,然后我正在更新 latest 版本的策略而不是那个 版本的政策。在控制台向导中,它不会使用版本号,因此策略是正确的......

    想明白是多么痛苦啊!应该有更好的文档记录!

    【讨论】:

      猜你喜欢
      • 2019-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-29
      • 1970-01-01
      • 2018-02-15
      • 2015-09-30
      • 2021-06-05
      相关资源
      最近更新 更多