AWS API Gateway:如何将IAM身份传递给Lambda函数?

时间:2015-07-27 16:48:44

标签: aws-lambda aws-api-gateway amazon-iam

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

我需要确切的IAM用户身份,并且无法在调用IAM用户凭据下运行Lambda函数。 我只需要在我的Lambda函数中调用IAM用户身份。

有选择吗?

3 个答案:

答案 0 :(得分:8)

当您发布问题时,支持从Amazon API Gateway请求上下文访问身份和其他信息,但最近已添加,请参阅Announcement: Context Variables

  

您现在可以从映射模板中访问context variables,以检索有关API调用的上下文信息。您可以访问阶段,资源路径和HTTP方法等数据,以及有关呼叫者身份的信息。然后,可以使用$ context变量将此信息传递到后端集成。 [强调我的]

Accessing the $context Variable上的参考文档包含$context Variable Reference,并且有各种$context.identity.*参数可以解决您的使用案例。

Cognito Identity

正如Soenke对类似question in the Amazon API Gateway forum的OP的回答所述,有一个尚未记录的integration参数导致Cognito标识符包含在此$context.identity.*上下文变量中:< / p>

  

为了拥有Cognito(不是IAM!)IdentityId和IdentityPoolId   在Lambda中可用,您必须启用“与调用者一起调用”   凭证“在API网关上”集成请求“API页面   GW资源。这导致新的上下文结构“身份”   (包含“cognitoIdentityId”和“cognitoIdentityPoolId”)   传递给Lambda函数。)

答案 1 :(得分:0)

你不需要那个。每个Lambda函数都可以让它自己的IAM Role在运行时授予它所有必需的权限。这意味着您可以授予您的Lambda功能执行其操作所需的任何权限。然后,当您使用AWS SDK时,它会自动检索这些凭据。

AWS API Gateway presentation的幻灯片22。

答案 2 :(得分:-1)

您可以将Cognito与“公共”池ID一起使用,然后将角色附加到Cognito池ID,该角色正在访问您的Lambda,我认为它被称为InvokeLambdaRole或其他东西

AWS.config.credentials = new AWS.CognitoIdentityCredentials({
    IdentityPoolId: 'REGION:YOUR_POOL_ID',
});

使用AWS STS获取具有有限权限的临时凭证。之后,您可以将API网关与AWS_IAM身份验证一起使用,然后端点将为您调用Lambda方法。或者您可以使用您获得的凭据直接调用lambda,但是您必须再次为您创建的身份池附加正确的角色。

注意:严格按照最小角色放置,这是一个公开的ID,每个机构都可以使用它来获取临时或固定(跟踪设备上的用户)user_ / app_ id。