Aws lambda API网关CLI Lambda权限(添加权限)

Aws lambda API网关CLI Lambda权限(添加权限),aws-lambda,aws-sdk,aws-api-gateway,aws-cli,Aws Lambda,Aws Sdk,Aws Api Gateway,Aws Cli,在浏览了大量页面(包括一些SO页面)后,我提出了一些建议(请参见下面的列表),但我仍然无法通过AWS CLI命令行工具授予APIGateway访问权限,以执行新添加的Lambda函数 i、 e.我试图复制这一点: 我已使用以下集成设置创建了一个新端点: 只要我尝试并测试它(从API网关控制台中),我就会得到 <AccessDeniedException> <Message>Unable to determine service/operation name to

在浏览了大量页面(包括一些SO页面)后,我提出了一些建议(请参见下面的列表),但我仍然无法通过AWS CLI命令行工具授予APIGateway访问权限,以执行新添加的Lambda函数

i、 e.我试图复制这一点:

我已使用以下集成设置创建了一个新端点:

只要我尝试并测试它(从API网关控制台中),我就会得到

<AccessDeniedException>
  <Message>Unable to determine service/operation name to be authorized</Message>
</AccessDeniedException>
我尝试了上述
arn
地址的多个版本(包括
/*/*
{code>/{STAGE}/{METHOD}{code>/{STAGE}/{METHOD}/{RESOURCE})

我还尝试在这些更改前后部署API,但没有效果

PS-我也读过将函数的集成类型更改为POST的建议(请参见URL),但我的要求是要有一个GET方法,而且-通过控制台手动添加此GET方法效果很好,因此,通过CLI工具也应该这样做

URL列表(如果其他人正在查找有关此问题/主题的资源):

更新#1

我还可以确认,在将新创建的
get policy
与现有的有效策略进行比较后,它们看起来几乎相同(只是名称不同):

使用的AWS CLI命令:
AWS lambda获取策略--函数名{FunctionName}

已生效策略与新创建策略的结果:

这让我怀疑这可能是我错过的又一步

编辑(每个请求)

测试屏幕截图-此日志继续显示
AccessDeniedException
错误

以文本形式记录(为便于阅读而稍微缩短):

请求测试请求的执行日志 2017年3月28日星期二22:59:40 UTC:开始执行请求:测试调用请求 2017年3月28日星期二22:59:40 UTC:HTTP方法:GET,资源路径:/api/v1/{Path} 2017年3月28日星期二22:59:40 UTC:方法请求路径:{} 2017年3月28日星期二22:59:40 UTC:方法请求查询字符串:{fileName=x.doc} 2017年3月28日星期二22:59:40 UTC:方法请求头:{} 2017年3月28日星期二22:59:40 UTC:转换前的方法请求正文: 2017年3月28日星期二22:59:40 UTC:端点请求URI:{accountid}:函数:xx url/调用 2017年3月28日星期二22:59:40 UTC:端点请求头:{X-Amz-Date=20170328T240Z,X-amzn-APIGATWAY-api-id={resourceid},Accept=application/json,Access-Control-Allow-Origin=*,User-Agent=AmazonAPIGateway_f,Host=lambda.ap-southest-2.amazonaws.com,X-Amz-Content-Sha256=93438097f7627fe62032b05e2257de86b32f74f8306,X-Amzn-Trace-Id=Root=1-58daeadc-bdd8f80d358164c70,X-Amzn-lambda-integration-tag=test请求,授权=*********************************************d309e7,X-Amz-Source-Arn=Arn:aws:execute-api:ap-southest-2:{AccountId}:{resourceId}/null/GET/api/v1/{path},X-Amz-Security-Token=FQODYXDZEDCADAZSJIBADB9J0WBJWFBXP++dR0+CGiK3flLOatlCr2[截断] 2017年3月28日星期二22:59:40 UTC:转换后的端点请求正文:{“resource”:“/api/v1/{path}”、“path”:“/api/v1/{path}”、“httpMethod”:“GET”、“headers”:null,“queryStringParameters”:{“fileName”:“x.doc”},“pathParameters”:null,“stageVariables”:null,“requestContext”:{“accountId”:“{accountId}”、“resourceId”:“{accountId:{resourceId}”、“stage”:“测试调用阶段”、“请求ID”:“测试调用请求”、“标识”:{“cognitoIdentityPoolId”:null,“accountId”{resourceId}”、“cognitoIdentityId”:null,“调用方”:“ABPPLGO4:”,“apiKey”:“测试调用api密钥”,“源ip”:“测试调用源ip”,“访问密钥”:“ASHYYQ”,“cognitoAuthenticationType”:null,“cognitoAuthenticationProvider”:null,“userArn”:”arn:aws:sts::111:假定角色/aws Admins/{name},“用户代理”:“ApacheHttpClient/4.5.x(Java/1.8.0112)”,“用户”:“ArozBPLGO4:{name}”,resourcePath:“/api/v1/{path}”,“httpMethod:“GET”,“APID:{resourceId}”,body:“null”,“isBase64Encoded”:false} 2017年3月28日星期二22:59:40 UTC:转换前的端点响应主体:


无法确定要授权的服务/操作名称

2017年3月28日星期二22:59:40 UTC:端点响应标题:{x-amzn-RequestId=39398a3e-140a-11e7-92a3-3fdc0fbb61c2,连接=保持活动,内容长度=130,日期=2017年3月28日星期二22:59:39 GMT} 2017年3月28日星期二22:59:40 UTC:由于配置错误,执行失败:Lambda代理响应格式错误 2017年3月28日星期二22:59:40 UTC:方法完成,状态:502


事实上,读取格式错误的Lambda代理响应并不是问题所在-我已经通过手动重新选择Lambda函数证明了这一点,允许应用权限,立即重新测试,一切正常,Lambda甚至没有被调用。

从聊天中总结调试:

GET方法是使用不正确的http方法为Lambda创建的,
GET
。这导致Lambda无法解释来自API网关的请求,从而生成XML错误响应。XML错误响应不是有效的JSON代理响应,因此生成502


控制台正在添加必要的权限并将http方法重置为POST,这就是为什么使用控制台后会成功的原因。

要总结聊天中的调试:

GET方法是使用不正确的http方法为Lambda创建的,
GET
。这导致Lambda无法解释来自API网关的请求,从而生成XML错误响应。XML错误响应不是有效的JSON代理响应,因此生成502


控制台正在添加必要的权限并将http方法重置为POST,这就是为什么使用控制台后会成功的原因。

您正在执行哪些命令/代码,生成“无法确定要授权的服务/操作名称”错误?如果
aws lambda add-permission --function-name xx-url --statement-id apigateway-perm-1 --action lambda:InvokeFunction --principal apigateway.amazonaws.com --s
ource-arn "arn:aws:execute-api:{REGION}:{AWS_ACCOUNT_ID}:{API_ID}/*/*"