Копирование файлов из корзины S3 в одной учетной записи в корзину S3 в другой - PullRequest
0 голосов
/ 25 марта 2020

У меня 2 AWS аккаунтов. У account1 есть 1 файл в bucket1 в регионе us-east-1. Я пытаюсь скопировать файл из учетной записи 1 в account2 в bucket2 в регионе us-west-2. У меня есть все необходимые политики IAM и одинаковые учетные данные работают для обеих учетных записей. Я использую python библиотеку boto3.

cos = boto3.resource('s3', aws_access_key_id=COMMON_KEY_ID, aws_secret_access_key=COMMON_ACCESS_KEY, endpoint_url="https://s3.us-west-2.amazonaws.com")

copy_source = {
                'Bucket': bucket1,
                'Key': SOURCE_KEY
              }
cos.meta.client.copy(copy_source, "bucket2", TARGET_KEY)

Как видно, функция копирования выполняется на клиентском объекте, указывающем на целевой account2 / us-west-2. Как он получает исходные файлы в account1 / us-east1? Должен ли я предоставить SourceClient в качестве ввода для функции копирования?

1 Ответ

0 голосов
/ 25 марта 2020

Самый простой способ выполнить такую ​​копию:

  • Использовать учетные данные (пользователь IAM или роль IAM) из Account-2, которые имеют разрешение GetObject для Bucket-1 (или для всех сегментов) и PutObject разрешения для Bucket-2
  • Добавить политику Bucket в Bucket-1, которая разрешает учетные данные Account-2 для GetObject из корзины
  • Отправьте команду копирования на регион назначения

Этот метод хорош, поскольку он требует только одного набора учетных данных.

Несколько замечаний:

  • Если вместо этого вы копируете файлы с использованием учетных данных из учетной записи source , обязательно установите ACL=bucket-owner-full-control для владения передачей в целевое хранилище.
  • Метод copy() ресурса позволяет SourceClient быть уточненным. Я не думаю, что это доступно для метода клиента copy().
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...