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

90

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

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

Андрей
источник

Ответы:

22

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

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

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

Джефф Эпплфорд
источник
+1 для Bucket Explorer. Намного проще, чем консоль управления AWS или s3cmd, для копирования корзины между учетными записями. Второй набор инструкций сработал для меня с их бесплатной пробной версией
LennonR
Морошка - лучший выбор. Бесплатно, плюс это легкое перетаскивание после еще более простой настройки. И нет, я там не работаю :)
скидадон
3
Загружает ли Bucket Explorer и повторно загружает данные или перемещает данные непосредственно между серверами Amazon?
Wouter
Обратите внимание, что пробная версия Cloudberry (как минимум версия 5.0.0.32) имеет ограничение на передачу 5 ГБ!
DarthPablo
123

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

Например, предположим, что ваше первое имя пользователя учетной записи - acc1@gmail.com, а второе - acc2@gmail.com.

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

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

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

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

Все переводы будут осуществляться на стороне Amazon.

side2k
источник
9
Отличный совет! Также для синхронизации целых сегментов а-ля rsyncвы можете использовать s3cmd sync s3://acc1_bucket s3://acc2_bucket.
lllllll 05
6
Если у вас возникли проблемы с 403 AccessDenied при копировании файлов с целевого компьютера на хост, см. Этот пост. Возможно, есть другой способ сделать это, но результаты здесь сработали для меня. alfielapeter.com/posts/…
crlane 02
а как насчет несколько больших ведер? скажем в районе 50гб, у вас какие то проблемы?
ianstarz
4
s3cmdтакже может быть установлен с homebrew, fyi
ianstarz 06
3
если ваш целевой сегмент предназначен для публичного обслуживания файлов ... в --acl-publicпротивном случае вы можете добавить , все файлы являются частными (по крайней мере, это было для меня, когда я выполнял команду). при таком
большом
58

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

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

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

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

Программист
источник
3
На очень большом ведре мне повезло больше. s3cmd, похоже, останавливал создание списка файлов в первой корзине. Возможно, он завершился, но я потерял терпение.
переосмыслил
2
У меня был такой же опыт; по какой-то причине, aws s3 syncкажется, работает примерно на порядок быстрее, чем s3cmd cp.
pix0r
2
Это сработало для меня. Если у вас возникнут проблемы с разрешениями, попробуйте использовать эту --grantsопцию. Дополнительная информация в документации: docs.aws.amazon.com/cli/latest/reference/s3/sync.html
findzen 09
3
Разрешения не копируются при синхронизации, поэтому вам придется указать --grants. Я узнал об этом после копирования тонны данных, а затем мне пришлось повторить синхронизацию с новым сегментом. --grants read=uri=http://acs.amazonaws.com/groups/global/AllUsersустанавливает разрешение на чтение для публичных пользователей.
Дэн Сэндленд
Это работало примерно в 10 раз быстрее, чем s3cmdу меня, и также может синхронизировать файлы изменений, а не повторно копировать все, если вам нужно повторно запустить команду в будущем - намного лучше!
nfm 06
5

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

Роза Перроне
источник
связанное обсуждение, похоже, не отвечает на этот вопрос, поскольку OP конкретно спрашивает о копировании из одной учетной записи AWS в другую.
TolkienWASP
3

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

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

One Giant Leap AB
источник
2
У меня есть передача, и я на 99% уверен, что описываемая вами передача загружает файлы во временную папку, а затем загружает их на другой сервер. Вы уверены, что файлы не прошли через ваш компьютер?
Эндрю
2
Я подтверждаю. Передавать загрузки и выгрузки. Это делает работу ужасно медленной, но дает огромное преимущество хранения скопированного содержимого под правом владельца.
Фабио Руссо
3

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

Давайте рассмотрим, что есть две учетные записи: исходная и целевая. И два ведра, source-bucketи destination bucket. Мы хотим переместить все файлы из source-bucketв destination-bucket. Мы можем сделать это следующим образом:

  1. aws configure
    • Настройте целевую учетную запись, используя учетные данные или роль IAM.
  2. Создайте политику пользователя для пользователя целевой учетной записи.
  3. Предоставьте конечному пользователю доступ к исходному сегменту, изменив политику исходного сегмента и добавив в него политику пользователя целевой учетной записи. Таким образом, конечный пользователь получит доступ к source-bucket.
  4. aws s3 ls s3://source-bucket/
    • это проверит, имеет ли целевой аккаунт доступ к исходному сегменту. Просто для подтверждения сделайте это.
  5. aws s3 cp s3://source-bucket s3://destination-bucket --recursive
    • это скопирует все файлы из исходной корзины в целевую корзину. Все файлы копируются с использованием флага --recursive.
  6. aws s3 mv s3://source-bucket s3://destination-bucket --recursive
    • это переместит все файлы из исходного ведра в целевое ведро.

В качестве альтернативы вы можете использовать команду синхронизации - aws s3 sync s3://source-bucket s3://detination-bucket

Для лучшего объяснения перейдите по ссылке

Ананд Трипати
источник
2

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

Gatorhall
источник
4
Следует отметить, что это возможно только в платной версии. Это не бесплатное решение.
Майкл Брук
2

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

Марко Делавегуа
источник
В магазине Windows они взимают плату за то, чтобы загрузить это, но на их веб-сайте вы можете получить это бесплатно. После создания идентификатора ключа доступа AWS и секретного ключа доступа мне удалось подключиться к своему хранилищу S3. Еще не тестировал копирование, но похоже, что это может сработать.
Wouter
1

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

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

curious_george
источник
0

Это можно сделать с помощью следующего:

aws s3 mv (sync for keeping buckets in sync) s3://source-bucket s3://destination-bucket --recursive

  1. Прикрепите политику корзины к исходной корзине в исходной учетной записи.

  2. Прикрепите политику AWS Identity and Access Management (IAM) к пользователю или роли в целевой учетной записи.

  3. Используйте пользователя или роль IAM в целевой учетной записи для выполнения перемещения между учетными записями.

Свикрамджит
источник