18

我已使用 AWS API Gateway 前端成功配置了对我的 Lambda 函数的 IAM 身份验证访问,但无法找到如何将 IAM 用户身份传递给我的 Lambda 函数。

我完全需要 IAM 用户身份,并且无法在调用 IAM 用户凭证下运行 Lambda 函数。我所需要的只是在我的 Lambda 函数中调用 IAM 用户身份。

有选择吗?

4

2 回答 2

9

当您发布问题时,不支持从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 函数)。

于 2015-08-21T14:50:05.000 回答
-1

您可以将 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。

于 2015-09-30T12:06:29.540 回答