Временно переключите AWS учетные данные при использовании AWS JavaScript SDK - PullRequest
1 голос
/ 08 января 2020

Я пишу API, который работает на AWS Lambda в среде Node.

Мое намерение состоит в том, чтобы взять набор AWS учетных данных и создать корзину S3 в этой учетной записи AWS. Проблема в том, что мне нужно «переключить» AWS учетные данные с того, с чем работает мой API, на то, что было передано.

Просматривая в Интернете, я увидел, что AWS Python SDK, boto3, фактически позволяет вам передавать набор учетных данных при инициализации клиента S3, но я не увидел аналогичной концепции в JavaScript SDK для AWS.

Однако мне удалось создать следующий код я достиг желаемого эффекта:

    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, очевидно, затрагиваются - и это не так. предполагаемое поведение. Есть ли способ выполнить sh то, что я хочу в AWS JS SDK, без этого?

Любая помощь будет оценена.

Спасибо!

1 Ответ

1 голос
/ 08 января 2020

Создание нескольких клиентских объектов S3, каждый из которых представляет свой набор учетных данных (и / или разные регионы). Если ваши вычисления выполняются с ролью IAM, просто используйте конструктор клиента S3 по умолчанию, чтобы использовать эти учетные данные. Чтобы указать другие учетные данные / регионы, создайте клиентский объект S3, указывающий c для этого варианта использования.

Например:

const s3_local = new AWS.S3(); // default credentials provider hierarchy
const s3_remote = new AWS.S3({accessKeyId: akid, secretAccessKey: skid});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...