Копировать файлы из корзины S3 в одну учетную запись AWS в другую учетную запись AWS - PullRequest
0 голосов
/ 06 ноября 2018

Есть корзина S3, принадлежащая другой учетной записи AWS, в которой есть список файлов. Мне нужно скопировать файлы в мое ведро S3. Я хотел бы выполнить 2 вещи, чтобы сделать это:

  1. Добавьте событие S3 bucket в другую учетную запись, которая приведет к лямбда-копированию файлов в моей учетной записи aws.
  2. Моему лямбде должно быть предоставлено разрешение (возможно, через предполагаемую роль) для копирования файлов.

Какие шаги я должен выполнить, чтобы достичь 1 и 2?

Ответы [ 3 ]

0 голосов
/ 06 ноября 2018

Существует более простой способ сделать это без лямбды, AWS позволяет настроить репликацию корзины S3 (включая межрегиональную и другую учетную запись), когда при настройке репликации все новые объекты будут скопированы в реплицированную корзину, для существующие объекты, использующие интерфейс командной строки aws, просто снова копируют объект с тем же сегментом, чтобы он реплицировался в целевой сегмент. Как только все существующие объекты будут скопированы, вы можете отключить репликацию, если не хотите, чтобы будущие объекты реплицировались. Здесь AWS делает тяжелая работа для вас :) https://docs.aws.amazon.com/AmazonS3/latest/dev/crr.html

0 голосов
/ 06 ноября 2018

Базовое требование для копирования файлов простое:

  • Создать событие в исходной корзине S3, которое запускает лямбда-функцию
  • Функция Lambda копирует объект в другое ведро

Осложняющим фактором является необходимость копирования между учетными записями.

Возможны два сценария:

  • Вариант 1 («извлечение»): Корзина в учетной записи-A вызывает лямбду в учетной записи-B. Это можно сделать с помощью политик на основе ресурсов для AWS Lambda (политики функций лямбда) - AWS Lambda . Вам нужно будет настроить триггер через командную строку, а не консоль управления. Затем политика Bucket для корзины в Account-A должна разрешить GetObject доступ по роли IAM, используемой функцией Lambda в Account-B.
  • Вариант 2 («Push»): Bucket in Account-A вызывает Lambda в Account-A (та же учетная запись). Политика Bucket для корзины в Account-B должна разрешать PutObject доступ по роли IAM, используемой функцией Lambda в Account-A. Убедитесь, что он сохраняет объект с ACL bucket-owner-full-control, так что Account-B «владеет» скопированным объектом.

Если возможно, я бы порекомендовал опцию Push, потому что все в одной учетной записи (кроме Bucket Policy).

0 голосов
/ 06 ноября 2018

Есть несколько способов достичь этого.

Вы можете использовать уведомление SNS и IAM между учетными записями для запуска лямбды. Прочитайте это: cross-account-s3-data-copy-using-lambda-function очень хорошо объясняет, чего вы пытаетесь достичь.

Другой подход заключается в развертывании лямбды и всех ресурсов, необходимых для учетной записи, в которой хранятся файлы. Вам необходимо создать уведомление S3, которое запускает лямбду, которая копирует файлы в вашу учетную запись или имеет расписание облачных часов (немного похожее на cronjob), которое запускает лямбду.
В этом случае лямбда и триггер должны существовать в учетной записи, которая содержит файлы.

В обоих сценариях минимальные разрешения IAM, которые должны быть у lambda, должны позволять читать и записывать данные в сегменты s3 и из них. Использовать СТС для того, чтобы взять на себя роль. Вам также необходимо добавить разрешения Cloudwatch, чтобы иметь возможность создавать лямбда-журналы.
Остальные необходимые разрешения IAM будут зависеть от подхода, который вы собираетесь использовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...