我已成功使用AWS API Gateway前端配置对我的Lambda函数进行IAM身份验证的访问,但无法找到如何将IAM用户身份传递给我的Lambda函数。
我需要确切的IAM用户身份,并且无法在调用IAM用户凭据下运行Lambda函数。 我只需要在我的Lambda函数中调用IAM用户身份。
有选择吗?
答案 0 :(得分:8)
当您发布问题时,支持从Amazon API Gateway请求上下文访问身份和其他信息,但最近已添加,请参阅Announcement: Context Variables:
您现在可以从映射模板中访问context variables,以检索有关API调用的上下文信息。您可以访问阶段,资源路径和HTTP方法等数据,以及有关呼叫者身份的信息。然后,可以使用$ context变量将此信息传递到后端集成。 [强调我的]
Accessing the $context Variable上的参考文档包含$context Variable Reference
,并且有各种$context.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。