我已使用AWS API Gateway前端成功配置了对Lambda函数的IAM身份验证访问,但无法找到如何将IAM用户身份传递给Lambda函数。
我需要IAM用户身份,并且不能在调用IAM-user凭证的情况下运行Lambda函数。我所需要的就是在Lambda函数中获得调用IAM-user的标识。
有这样的选择吗?
发布于 2015-08-21 22:50:05
当您发布问题时,尚未提供从Amazon API Gateway请求上下文访问身份和其他信息的支持,但最近添加了该支持,请参阅Announcement: Context Variables
现在,您可以从映射模板中访问context variables,以检索有关
调用的上下文信息。您可以访问阶段、资源路径和HTTP方法等数据,以及有关调用方的标识的信息。然后可以使用$context变量将此信息传递给您的后端集成。强调我的
有关Accessing the $context Variable的参考文档提供了一个$context Variable Reference,并且有各种$context.identity.*参数可用于解决您的用例。
认知同一性
正如Soenke对OPs类似question in the Amazon API Gateway forum的回答中所概述的,到目前为止,有一个尚未记录的integration参数,该参数导致该$context.identity.*上下文变量中包含了Cognito标识符:
为了拥有
(而不是IAM!)IdentityId和IdentityPoolId在Lambda中可用,您必须在API资源的API网关集成请求页面启用带调用者凭证的Invoke。这会产生一个新的上下文结构"identity“(包含传递给Lambda函数的"cognitoIdentityId”和"cognitoIdentityPoolId“)。
发布于 2015-09-30 20:06:30
您可以使用带有“公共”池id的Cognito,然后将角色附加到Cognito池id,该角色访问您的Lambda,我认为它被称为InvokeLambdaRole或其他什么
AWS.config.credentials = new AWS.CognitoIdentityCredentials({
IdentityPoolId: 'REGION:YOUR_POOL_ID',
});使用AWS STS获取具有有限权限的临时凭据。之后,您可以使用带有AWS_IAM身份验证的API Gateway,然后end point将为您调用Lambda方法。或者,您可以使用您获得的凭据直接调用lambda,但同样,您必须为您创建的身份池附加正确的角色。
注意:在你的杆子上设置严格的最低角色,这是一个公开的id,每个人都可以使用它来获得一个临时的或固定的(跟踪用户访问设备的) user_/app_ id。
https://stackoverflow.com/questions/31658816
复制相似问题