使用 AWS JavaScript SDK 时临时切换 AWS 凭据

Temporarily switch AWS credentials while using AWS JavaScript SDK

我正在写一个 API,它 运行 在节点环境中的 AWS Lambda 上。

我的目的是获取一组 AWS 凭证并在该 AWS 帐户中创建一个 S3 存储桶。问题是需要我 "switch" AWS 凭据,从我的 API 是 运行 到传入的内容。

在网上看,我看到 AWS Python SDK boto3 实际上允许您在初始化 S3 客户端时传递一组凭据,但我在 JavaScript 适用于 AWS 的 SDK。

但是,我能够创建以下代码来实现我想要的效果:

    const {accessKeyId, secretAccessKey} = AWS.config;

    // Switch to their credentials
    AWS.config.update({
        accessKeyId: env.awsAccessKey,
        secretAccessKey: env.awsSecretKey
    });

    // Create the bucket in their AWS account (not ours)
    const client = new AWS.S3();

    await client.createBucket({
        Bucket: env.rootBucket
    }).promise();

    // Switch credentials back
    AWS.config.update({
        accessKeyId,
        secretAccessKey
    });

我遇到的问题是,当我 运行 对 AWS.config 进行此全局更新时,我 API 中的其他调用显然受到影响 - 这不是预期的行为.有什么方法可以在不这样做的情况下在 AWS JS SDK 中完成我想要的吗?

如有任何帮助,我们将不胜感激。

谢谢!

创建多个 S3 客户端对象,每个代表一组不同的凭据(and/or 不同的区域)。如果您的计算是 运行 IAM 角色,则只需使用默认的 S3 客户端构造函数来使用这些凭据。要针对其他 credentials/regions,创建一个特定于该用例的 S3 客户端对象。

例如:

const s3_local = new AWS.S3(); // default credentials provider hierarchy
const s3_remote = new AWS.S3({accessKeyId: akid, secretAccessKey: skid});