Подтвердить что ты не робот

S3 перемещает файлы между ведрами на разных учетных записях?

Я делаю некоторую работу для клиента с двумя отдельными учетными записями AWS. Нам нужно переместить все файлы в ведро на одной из своих учетных записей S3 в новое ведро на второй учетной записи.

Мы думали, что s3cmd позволит это, используя формат:

s3cmd cp s3://bucket1 s3://bucket2 --recursive

Однако это только позволяет мне использовать ключи одной учетной записи, и я не могу указать учетные записи второй учетной записи.

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

4b9b3361

Ответ 1

Вам не нужно открывать разрешения для всех. Используйте приведенные ниже политики Bucket для источника и назначения для копирования из корзины в одну учетную запись в другую с помощью пользователя IAM.

  • Bucket для копирования из: SourceBucket

  • Bucket для копирования в: DestinationBucket

  • Идентификатор учетной записи источника AWS: XXXX–XXXX-XXXX

  • Исходный пользователь IAM: src–iam-user

Приведенная ниже политика означает - пользователь IAM - XXXX–XXXX-XXXX:src–iam-user имеет привилегии s3:ListBucket и s3:GetObject on SourceBucket/* и s3:ListBucket и s3:PutObject для DestinationBucket/*

На SourceBucket политика должна быть такой:

{
  "Id": "Policy1357935677554",
  "Statement": [{
    "Sid": "Stmt1357935647218",
    "Action": ["s3:ListBucket"],
    "Effect": "Allow",
    "Resource": "arn:aws:s3:::SourceBucket",
    "Principal": {"AWS": "arn:aws:iam::XXXXXXXXXXXX:user/src–iam-user"}
  }, {
    "Sid": "Stmt1357935676138",
    "Action": ["s3:GetObject"],
    "Effect": "Allow",
    "Resource": "arn:aws:s3:::SourceBucket/*",
    "Principal": {"AWS": "arn:aws:iam::XXXXXXXXXXXX:user/src–iam-user"}
  }]
}

На DestinationBucket политика должна быть:

{
  "Id": "Policy1357935677555",
  "Statement": [{
    "Sid": "Stmt1357935647218",
    "Action": ["s3:ListBucket"],
    "Effect": "Allow",
    "Resource": "arn:aws:s3:::DestinationBucket",
    "Principal": {"AWS": "arn:aws:iam::XXXXXXXXXXXX:user/src–iam-user"}
  }, {
    "Sid": "Stmt1357935676138",
    "Action": ["s3:PutObject"],
    "Effect": "Allow",
    "Resource": "arn:aws:s3:::DestinationBucket/*",
    "Principal": {"AWS": "arn:aws:iam::XXXXXXXXXXXX:user/src–iam-user"}
  }]
}

Команда для запуска: s3cmd cp s3://SourceBucket/File1 s3://DestinationBucket/File1

Ответ 2

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

Что касается этого, не имея при этом файла прикоснуться к компьютеру где-то - не думайте так.

Кроме того: поскольку они выполняют массовую загрузку с жестких дисков, которые вы отправляете по почте, они могут сделать то же самое для вас для переноса ведра в ведро.

Ответ 3

Я бы предложил использовать cloudberry s3 explorer, как простое решение для быстрого перемещения вещей. Кроме того, он позволяет использовать внутренние службы передачи пропускной способности без aws.

Вы также можете использовать инструменты cloudberry sdk для интеграции в свои приложения.

Удачи Джон

Ответ 4

Даже если Роли и Политики - действительно изящный способ, у меня есть другое решение:

  • Получите ваши AWS-Credentials для Source-Buckets-Account
  • То же самое для Destination-Buckets-Account
  • На вашем локальном компьютере (Desktop или любом сервере вне AWS) создайте новый профиль с учетными данными учетных записей источника-источника.

    aws --profile ${YOUR_CUSTOM_PROFILE} настроить

  • заполните aws_access_key_id и aws_secret_access_key (вы можете пропустить область и выход)

  • Сохраните свои целевые данные-ведомости в качестве переменных среды

    export AWS_ACCESS_KEY_ID = AKI...

    экспорт AWS_SECRET_ACCESS_KEY = CN...

  • Теперь выполните синхронизацию, но добавьте критический "профиль" -параметр

    aws --profile ${YOUR_CUSTOM_PROFILE} s3 sync s3://${SOURCE_BUCKET_NAME} s3://${DESTINATION_BUCKET_NAME}

Ответ 5

Хорошо, понял ответ. Вероятно, есть и другие способы сделать это, но это очень просто.

Я смог сделать это с помощью утилиты s3cmd, но, скорее всего, это можно сделать с помощью похожих инструментов.

При настройке s3cmd настройте его с помощью ключа доступа и секретного ключа доступа.

Войдите в веб-консоль S3, используя учетную запись ведра , которую вы переносите на.

Посетите веб-консоль S3.

https://console.aws.amazon.com/s3/home

Нажмите на свое ведро, затем выберите "Действия", затем "Свойства".

Внизу под вкладкой "Разрешения" нажмите "Добавить дополнительные разрешения".

Set "Grantee" to Everyone

Check "List" and "Upload/Delete"

Save

Чтобы передать, запустите с вашего терминала

s3cmd cp s3://from_account_bucket s3://to_account_bucket --recursive

Когда передача завершена, вы должны немедленно снова посетить консоль S3 и удалить разрешения, добавленные для этого ведра.

Здесь, очевидно, проблема безопасности. Ведро, которое мы передаем, открыто для всех. Шансы на то, что кто-то найдет ваше имя ведра, небольшие, но существуют.

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

Надеюсь, что это поможет.