我为 API 网关端点创建了 2 个授权方。一个手动使用控制台,另一个使用 boto3。 手动创建的效果很好,但是使用脚本创建的会出现主题行中提到的错误。查看这2个authorizer的内容,是一样的。
可能缺少的部分是什么?我不认为这是对 lambda 的无效权限,因为它在手动配置时在一个授权方上工作。
相同的代码如下:
响应 = client.create_authorizer(
restApiId=apiid,
名称=授权名称,
类型=' token ',
authType='自定义',
authorizerUri=authorizerUri,
##arn:aws:apigateway:us-west-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-west-2::function:CustomAuthorizer/调用
identitySource='method.request.header.Authorization',
identityValidationExpression='.*',
authorizerResultTtlInSeconds=300
)
获取错误: 2016 年 7 月 18 日星期一 11:53:04 UTC:由于配置错误导致执行失败:Lambda 函数的权限无效 2016 年 7 月 18 日星期一 11:53:04 UTC:由于配置错误导致执行失败:授权者错误 2016 年 7 月 18 日星期一 11:53:04 UTC:AuthorizerConfigurationException
最佳答案
刚刚进入这个兔子洞,遇到了一个解决方案(使用 boto3 和 python,希望它在不同的 sdk 中是相似的)。
问题是,当您通过控制台手动创建它时,会出现一个弹出窗口,要求启用 api 网关(确切地说是这个特定的授权方)作为您作为授权方使用的 lambda 函数的触发器。通过 sdk 执行时,显然没有弹出窗口,因此授权方无权调用该 lambda。
您可以通过两种方式启用权限:
- 在 lambda 中,在设计器面板中为您的授权方创建一个新触发器。指定一个 API 和阶段应该可以解决问题
- 创建一个将处理此权限的角色。授予它调用 lambda 的权限(您可以使用 AWSLambdaRole 模板角色)并确保将 api-gateway 添加为受信任的实体以在“信任关系”选项卡中使用此角色。您的政策应如下所示:
{“版本”:“2012-10-17”,“声明”:[{“效果”:“允许”,“主体”:{“服务”:“apigateway.amazonaws.com”} ,"Action": "sts:AssumeRole"}]}
现在,当使用 sdk 创建自定义授权器时,您必须提供一个 authorizerCredentials 参数,该参数被描述为“(字符串)指定所需的凭证作为 API 网关调用授权器的 IAM 角色。要指定一个 IAM API 网关承担的角色,使用角色的 Amazon 资源名称 (ARN)。要对 Lambda 函数使用基于资源的权限,请指定 null。”。
复制您新创建的角色的 arn 并将其用作 authorizerCredentials 参数的值。
中提琴!您现在拥有一个自定义授权方,该授权方可以使用允许它调用 lambda 函数的角色!
(抱歉格式不好,我不经常评论 :D)
关于amazon-web-services - 由于配置错误 : Authorizer error,AWS 执行失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38436444/