我已使用 AWS API Gateway 前端成功配置了对我的 Lambda 函数的 IAM 身份验证访问,但无法找到如何将 IAM 用户身份传递给我的 Lambda 函数。
我完全需要 IAM 用户身份,并且无法在调用 IAM 用户凭证下运行 Lambda 函数。我所需要的只是在我的 Lambda 函数中调用 IAM 用户身份。
有选择吗?
我已使用 AWS API Gateway 前端成功配置了对我的 Lambda 函数的 IAM 身份验证访问,但无法找到如何将 IAM 用户身份传递给我的 Lambda 函数。
我完全需要 IAM 用户身份,并且无法在调用 IAM 用户凭证下运行 Lambda 函数。我所需要的只是在我的 Lambda 函数中调用 IAM 用户身份。
有选择吗?
当您发布问题时,不支持从Amazon API Gateway请求上下文访问身份和其他信息,但最近已添加,请参阅公告:上下文变量:
您现在可以从映射模板中访问上下文变量,以检索有关 API 调用的上下文信息。您可以访问阶段、资源路径和 HTTP 方法等数据,以及有关调用者身份的信息。然后可以使用 $context 变量将此信息传递给您的后端集成。[强调我的]
有关访问 $context 变量的参考文档具有 a$context Variable Reference
和各种$context.identity.*
参数可以解决您的用例。
正如 Soenke在 Amazon API Gateway 论坛中对 OPs 类似问题的回答中所述,有一个尚未记录的集成参数导致 Cognito 标识符包含在此$context.identity.*
上下文变量中:
为了在 Lambda 中使用 Cognito(不是 IAM!)IdentityId 和 IdentityPoolId,您必须在 API GW 资源的 API Gateway“集成请求”页面上启用“使用调用方凭据调用”。这会产生一个新的上下文结构“identity”(包含“cognitoIdentityId”和“cognitoIdentityPoolId”被传递给 Lambda 函数)。
您可以将 Cognito 与“公共”池 id 一起使用,然后将角色附加到 Cognito 池 id,该角色正在访问您的 Lambda,我认为它称为 InvokeLambdaRole 之类的
AWS.config.credentials = new AWS.CognitoIdentityCredentials({
IdentityPoolId: 'REGION:YOUR_POOL_ID',
});
使用 AWS STS 获取具有有限权限的临时凭证。之后,您可以将 API Gateway 与 AWS_IAM 身份验证一起使用,然后端点将为您调用 Lambda 方法。或者您可以使用您获得的凭据直接调用 lambda,但您必须再次为您创建的身份池附加正确的角色。
注意:在您的杆上严格设置最低角色,即公开可用的 id,每个人都可以使用它来获取临时或固定(跨设备跟踪用户)user_/app_ id。