Nodejs AWS Lambda切换到另一个帐户访问和密钥来执行功能

use*_*520 5 javascript amazon-web-services node.js aws-lambda aws-sdk-js

我正在使用带有lambda和AWS Javascript SDK的Node.我有一个角色附加到lambda函数,允许我需要访问.我希望能够接受用户对访问和密钥的输入,并更新我的AWS配置以使用这些更新的凭据执行新操作.至今

let AWS = require("aws-sdk");  // I do the normal import 
let ddb = new AWS.DynamoDB({apiVersion: '2012-10-08'});  // do some dynamo action 
Run Code Online (Sandbox Code Playgroud)

....

然后使用这些具有其他帐户资源权限的密钥

AWS.config = new AWS.Config({
    accessKeyId: data.accessKey,
    secretAccessKey: data.secretAccessKey
}); 
Run Code Online (Sandbox Code Playgroud)

当我执行新任务时,它只使用lambda角色提供的权限,而不是更新的AWS信用.有任何想法吗?

Tom*_*ijs 3

当您更新 AWS.config 时,它会更新 AWS 对象。此后创建的任何 AWS 服务对象(S3、EC2、DynamoDB...)对象都将具有更新后的凭证。它不会更新在更新到 AWS.config之前创建的任何服务对象。

正如 AWS Guru @johnrotenstein 建议的那样,您应该在更新配置创建服务对象。如果ddb此时已经创建了对象,只需将其重新声明为new DynamoDB({...})

const AWS = require('aws-sdk')
AWS.config = new AWS.Config({
    accessKeyId: data.accessKey,
    secretAccessKey: data.secretAccessKey
})
let ddb = new AWS.DynamoDB({apiVersion: '2012-10-08'})
Run Code Online (Sandbox Code Playgroud)

另一个可能更简单的解决方案是在服务对象的配置属性上使用 update 方法,如下所示:

const AWS = require('aws-sdk')
let ddb = new AWS.DynamoDB({apiVersion: '2012-10-08'})
ddb.config.update({accessKeyId: '', secretAccessKey: ''})
// ddb will now use the new credentials for future calls
Run Code Online (Sandbox Code Playgroud)