Amazon web services 如何使用aws lambda调用另一个具有用户凭据的lambda?

Amazon web services 如何使用aws lambda调用另一个具有用户凭据的lambda?,amazon-web-services,aws-lambda,aws-cognito,Amazon Web Services,Aws Lambda,Aws Cognito,我在aws lambda服务器上用不同的语言编写了2个lambda 假设它名为C和J 当用户调用带有参数的C时,有一个逻辑匹配某些条件。它会做一些事情,然后调用J,就像用户自己调用J(相同的认知ID) 因此,我需要获取调用我的Clambda函数的用户的凭据,并使用它调用J 但我找不到从lambda环境中获取当前用户凭证的线索 我只能获取context.Identity,但这还不足以为作为模拟用户调用lambda创建凭据 我能做什么呢?我将使用Java SDK中的示例,但这些方法在所有SDK中都可

我在aws lambda服务器上用不同的语言编写了2个lambda

假设它名为
C
J

当用户调用带有参数的
C
时,有一个逻辑匹配某些条件。它会做一些事情,然后调用
J
,就像用户自己调用
J
(相同的认知ID)

因此,我需要获取调用我的
C
lambda函数的用户的凭据,并使用它调用
J

但我找不到从lambda环境中获取当前用户凭证的线索

我只能获取
context.Identity
,但这还不足以为作为模拟用户调用lambda创建凭据


我能做什么呢?

我将使用Java SDK中的示例,但这些方法在所有SDK中都可用,因此请根据您选择的语言进行调整

您可以使用以下方法将identityId令牌交换为凭据(基本上是临时访问密钥/密钥):

public GetCredentialsForIdentityResult getCredentialsForIdentity(GetCredentialsForIdentityRequest getCredentialsForIdentityRequest)

获取一个可替换为的标识ID。您可以对结果使用
getCredentials()
,以获得一个实例,然后使用该实例调用Lambda J。

我将使用Java SDK中的示例,但这些方法在所有SDK中都可用,因此请根据您选择的语言进行调整

您可以使用以下方法将identityId令牌交换为凭据(基本上是临时访问密钥/密钥):

public GetCredentialsForIdentityResult getCredentialsForIdentity(GetCredentialsForIdentityRequest getCredentialsForIdentityRequest)

获取一个可替换为的标识ID。您可以对结果使用
getCredentials()
,以获取一个实例,然后使用该实例调用Lambda J。

我现在唯一可以使用的解决方法是,使用DeveloperCredential始终为每个用户获取访问令牌,并使用该凭据调用子序列Lambda。缺点是所有用户都不能是匿名用户

我现在可以使用的唯一解决方法是,使用DeveloperCredential始终为每个用户获取访问令牌,并使用该凭据调用子序列lambda。缺点是所有用户都不能是匿名用户

请检查AWS Lambda中设置的环境变量process@Leon有
AWS\u访问密钥\u ID
AWS\u密码\u访问密钥
AWS\u会话\u令牌
,但这是否来自cognito?我只是认为它来自我自己的amazon IAM凭据,不是吗?@Leon,或者如果从cognito调用函数,它会被重写吗?
AWS_-ACCESS_-KEY_-ID
AWS_-SECRET_-ACCESS_-KEY
对应于调用lambda函数的凭据。@Leon我已经用编写lambda来测试它,以返回{env,context}作为有效载荷。用cognito凭证调用它。然后使用env更改凭据返回并再次调用相同的函数。不,第一个调用上下文有cognito,但第二个调用没有cognitoCheck在AWS Lambda中设置的环境变量process@Leon有
AWS\u访问密钥\u ID
AWS\u密码\u访问密钥
AWS\u会话\u令牌
,但这是否来自cognito?我只是认为它来自我自己的amazon IAM凭据,不是吗?@Leon,或者如果从cognito调用函数,它会被重写吗?
AWS_-ACCESS_-KEY_-ID
AWS_-SECRET_-ACCESS_-KEY
对应于调用lambda函数的凭据。@Leon我已经用编写lambda来测试它,以返回{env,context}作为有效载荷。用cognito凭证调用它。然后使用env更改凭据返回并再次调用相同的函数。不,第一个调用上下文有cognito,但第二个调用没有cognito遗憾的是,我尝试了getCredentialsForIdentity,但无法单独使用identity ID的身份验证,它需要登录,即使它是从管理员凭据调用的不幸的是,我尝试了getCredentialsForIdentity,但无法单独使用identity ID的身份验证,它需要登录,即使它是从管理员凭据调用的