凭证以调用另一个 Lambda"/>
AWS 使用 STS 为 Lambda 生成动态凭证以调用另一个 Lambda
在这里遇到问题。节点.js。我需要使用 STS 从动态生成的高度特定的缩小范围角色中生成临时凭证。然后,我需要使用 STS 凭证调用另一个 Lambda,以便可以将控制权传递给在缩小的临时范围内运行的新 Lambda。 SaaS 工厂风格,但我们需要限制 Lambda 范围本身,而不是在对 S3 和 DynamoDB 之类的单个服务调用中使用凭据。即,传递控制权的 Lambda 是使用 STS 凭证调用的,这会自动限制新 Lambda 执行的代码范围,以便开发人员可能进行的任何调用都已受到限制。
使用如下代码:
let policy = require('./clientPolicy.json');
let sts = new AWS.STS();
let stsParams = {
RoleArn: process.env.clientWrapperRole, //primary execution role
RoleSessionName: `cws-${clientWrapperSession}`,
Policy: policyString, //generated policy
DurationSeconds: 900
}
let stsResult = await sts.assumeRole(stsParams).promise();
let clientWrapperCred = stsResult.Credentials;
let clientLambdaParams = {
FunctionName: process.env.clientWrapper, /* required */
InvocationType: 'RequestResponse',
LogType: 'Tail',
Payload: JSON.stringify(clientLambdaPayload)
};
let clientLambda = new AWS.Lambda({ credentials: clientWrapperCred });
let clientResult = await clientLambda.invoke(clientLambdaParams).promise();
日志显示 STS 调用正常运行,针对具有广泛范围的角色生成凭证,包括调用 Lambda 的能力,它具有对 lambda.amazonaws 的服务信任以及调用 Lambda 的角色委托人。客户端策略包括相当于 Lambda 基本身份验证的范围,并且允许针对新的 Lambda 进行调用。
clientLambda 声明正常,但执行 let clientResult... 在返回错误响应之前挂起最大 Lambda 超时:{"code":"ERR_INVALID_ARG_TYPE"}
如果我不使用 STS 凭证,而是像这样调用 Lambda:
let clientLambda = new AWS.Lambda();
let clientResult = await clientLambda.invoke(clientLambdaParams).promise();
...然后一切正常。
有人有什么想法吗?通常我只是缩小附加到要调用的 Lambda 的执行角色的范围,但在这种情况下,我需要根据像 SaaS 工厂一样传递的有效负载动态调整范围。
回答如下:快速查看 SDK 文档表明,从 assumeRole 返回的
Credentials
是一个映射,而提供给 credentials
客户端构造函数的 AWS.Lambda()
选项是具有不同属性名称的 AWS.Credentials
类型。
所以,尝试像这样创建
clientWrapperCred
:
let clientWrapperCred = {
accessKeyId: stsResult.Credentials.AccessKeyId,
secretAccessKey: stsResult.Credentials.SecretAccessKey,
sessionToken: stsResult.Credentials.SessionToken
}
更多推荐
AWS 使用 STS 为 Lambda 生成动态凭证以调用另一个 Lambda
发布评论