Переместить файлы непосредственно из одной учетной записи S3 в другую?

Довольно простой вопрос, но я не смог найти ответ. Используя Transit, я могу "переместить" файлы из одного ведра S3 на одну учетную запись AWS в другую ведро S3 на другой учетной записи AWS, но то, что она на самом деле делает, это загрузка файлов с первого, а затем загрузка их на второй.

Есть ли способ переместить файлы непосредственно из одной учетной записи S3 в другую, не загружая их между ними?

Ответ 1

Если вы просто ищете готовое решение, есть несколько решений, которые могут это сделать. Bucket Explorer работает на Mac и Windows и может копировать через учетные записи как можно Cloudberry S3 Explorer и S3 Browser, но они - Windows только так может не работать для вас.

Я подозреваю, что консоль AWS также могла бы сделать это с соответствующей настройкой разрешений, но я не тестировал это.

Вы также можете сделать это с помощью AWS API, пока вы предоставили учетную запись AWS, которую вы используете записать разрешения в целевой контейнер.

Ответ 2

Да, есть способ. И это довольно просто, хотя его трудно найти. 8)

Например, предположим, что ваше первое имя пользователя учетной записи - [email protected], а второе - [email protected]

Откройте Консоль управления AWS как acc1. Перейдите в свойства ковша Amazon S3, а на вкладке "Разрешения" нажмите "Добавить дополнительные разрешения". Затем добавьте разрешения "Список" и "Просмотр" для "Аутентифицированных пользователей".

Далее, в AWS IAM (доступном из вкладок консоли) acc2 создайте пользователя с полным доступом к ведро S3 (чтобы быть более безопасным, вы можете установить точные разрешения, но я предпочитаю создавать временного пользователя для передачи, а затем удалить его).

Затем вы можете использовать s3cmd (используя учетные данные только что созданного пользователя в acc2), чтобы сделать что-то вроде:

s3cmd cp s3://acc1_bucket/folder/ s3://acc2_bucket/folder --recursive

Вся передача будет выполняться на стороне Амазонки.

Ответ 3

Используйте aws cli (я использовал экземпляр ubuntu 14 ec2) и просто запустил следующую команду:

aws s3 sync s3://bucket1 s3://bucket2

Вам нужно будет указать данные учетной записи для одного и иметь открытый доступ на запись или открытый доступ для чтения к другому.

Это приведет к синхронизации двух ведер. Вы можете снова использовать ту же команду позже для быстрой синхронизации. Наилучшая часть состоит в том, что, похоже, нет никакой пропускной способности (например, файлы не проходят через локальный компьютер).

Ответ 4

boto работает хорошо. См. эту тему. Используя boto, вы копируете объекты прямо из одного ведра в другое, вместо того, чтобы загружать их на локальный компьютер и загружать их в другое хранилище.

Ответ 5

В Mac OS X я использовал приложение Transmit из Panic. Я открыл одно окно для каждой учетной записи S3 (используя ключи и секреты API). Затем я мог перетащить из одного ведра в одно окно в другое ведро в другом окне. Не нужно сначала загружать файлы локально.

Андрей прав, Transmit загружает файлы локально, затем загружает файлы.

Ответ 6

Вы можете использовать Cyberduck (с открытым исходным кодом)

Ответ 7

CrossFTP может копировать файлы S3 прямо из одного ведра в другое, не загружая их. Это клиент GUI S3, который работает на Windows, Mac и Linux.

Ответ 8

Для вновь созданных файлов (НЕ существующие объекты) вы можете использовать новые функции от AWS. Репликация кросс-региона (в разделе "Версии" для ведра S3). Вы можете создать политику, которая позволит вам реплицировать новые объекты в ведро в другой учетной записи.

Для существующих объектов вам все равно придется копировать свои объекты с помощью другого метода - если AWS не представит в будущем собственные функции для этого.