Nodejs AWS Lambda 切换到另一个帐户访问权限和密钥以执行功能
Nodejs AWS Lambda switching to another accounts access and secret key to perform functions
我将 Node 与 lambda 和 AWS Javascript SDK 结合使用。我有一个角色附加到 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 凭证。有什么想法吗?
当您更新 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
我将 Node 与 lambda 和 AWS Javascript SDK 结合使用。我有一个角色附加到 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 凭证。有什么想法吗?
当您更新 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