将AWS API-Gateway调用的IAM身份传递给后端服务器

时间:2016-05-18 07:59:59

标签: amazon-web-services saas aws-api-gateway amazon-cloudwatch

我们希望使用AWS将现有API设置为SAAS 我们的代码已通过elastic-beanstalk部署,我们通过Gateway创建了对方法的访问权限以管理权限。

我们现在正在尝试记录用户的活动,以便进行结算

目前,我们发现的最佳解决方案是完整记录呼叫(启用CloudWatch Logs + Log完整请求/响应数据),这看起来非常繁重,甚至可能最终变得昂贵。

我们在集成请求中重新设计了请求体,为身体添加了一个映射模板,但这看起来很复杂,希望我们错过了更好的解决方案。

基本上,我们更换了默认" passthrough"生成的基本" passthrough"代码,并添加了一个值" MyUserArn" :" $ context.identity.userArn"在它里面,它填满了请求主体一大堆,但看起来像是#34;避免破坏某些东西的最可靠的方法"。

我们只想在标头或查询字符串参数中添加IAM用户标识符,但无法找到是否可能。几个帖子提到了一个" Invoke with caller credentials"选项,但我们也没有找到。
是否与认知或其他相关的东西?

我们做错了吗?

1 个答案:

答案 0 :(得分:1)

您可以通过几种不同的方式获取此信息,这两种选择都有权衡:

  1. 您当前的解决方案从映射模板中的$context.identity中提取值并作为正文的一部分发送到Lambda。看起来你反对这个,因为你的#34;大混乱"评论,但最终你可以控制传递给Lambda的内容。
  2. 启用"用户来电凭证"在您的方法上,然后在Lambda中使用标识值 。目前,只有在您使用从Cognito身份验证流程中提供的凭据并且确实要求Lambda调用也是您的角色策略的一部分,但是并不需要对模板进行任何修改时,此功能才有效。
  3. 更新道歉,我不知道你错过了使用Beanstalk而不是Lambda。您绝对可以只在集成请求中添加标题,只需从$context.identity.userArn中提取其值。

    UPDATE 2 双重道歉,在标题中使用上下文变量时,省略$,因此您需要使用context.identity.userArn