6

我正在使用带有 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 

……

然后使用这些有权访问另一个帐户资源的密钥

AWS.config = new AWS.Config({
    accessKeyId: data.accessKey,
    secretAccessKey: data.secretAccessKey
}); 

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

4

1 回答 1

2

当您更新 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'})

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

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
于 2018-06-25T15:55:12.730 回答