Вопрос или проблема
У меня возникли некоторые трудности с работой с копиями данных между учетными записями. В частности, я пытаюсь клонировать S3 бакет из одной учетной записи AWS (в eu-west-1
) в другую (в eu-west-2
).
Я пытался настроить репликацию бакета согласно этому руководству, добавляя операцию пакетной репликации для копирования существующих файлов, а также пробовал задачу DataSync согласно этому руководству.
Несмотря на то, что я следовал руководствам дословно:
-
Метрики репликации не показывают никаких активностей, и бакет назначения по-прежнему пуст через 24 часа.
-
Операция пакетной репликации прервана по причине
Уровень неудачи задачи 100% выше 50%
. -
Лог CloudWatch для задачи DataSync предоставляет только эту информацию:
завершена со статусом Невозможно подключиться к конечной точке S3
Интересно, не пропустил ли я какие-либо предварительные требования, которые руководства предполагают, что уже должны быть настроены; например, нужно ли установить какое-либо доверительное отношение между двумя учетными записями AWS, прежде чем разрешения между учетными записями будут работать?
То есть, если предназначенный бакет S3 в учетной записи 987654321098 имеет политику разрешений, которая включает этот фрагмент для идентификации роли действия в исходной учетной записи:
"Sid": "DataSyncCreateS3LocationAndTaskAccess",
"Effect": "Allow",
"Principal": { "AWS": "arn:aws:iam::123456789012:role/source-account-datasync-s3-copy-role" }
..это всё, что нужно, чтобы учетная запись назначения доверяла IAM роли из другой учетной записи?
Ответ или решение
Для успешного выполнения операций между двумя аккаунтами AWS необходимо установить доверительное отношение на уровне аккаунтов, однако важно учитывать нюансы, касающиеся разрешений и политик IAM.
Установление доверительных отношений
Да, для выполнения операций между аккаунтами, таких как копирование данных между S3-бакетами, вам необходимо правильно настроить разрешения на обеих сторонах, а также установить доверие, если вы используете роли IAM для выполнения операций, таких как DataSync. Ваше сообщение указывает на то, что вы на правильном пути, однако вам нужно убедиться в ряде моментов:
-
Политики доступа для S3-бакетов:
В политику S3-бакета назначения (в вашем случае, в аккаунте987654321098
) нужно добавить разрешения, позволяющие роли из исходного аккаунта (123456789012
) выполнять необходимые действия (например,s3:PutObject
,s3:GetObject
и другие). Убедитесь, что объекты политик включают правильный ARN вашей роли.Пример политики, позволяющей роль из другого аккаунта писать в бакет:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:role/source-account-datasync-s3-copy-role" }, "Action": [ "s3:PutObject", "s3:PutObjectAcl", "s3:GetObject" ], "Resource": "arn:aws:s3:::ваш-бакет-назначения/*" } ] }
-
Доверительная политика для IAM роли:
Если вы используете роль IAM для выполнения операций из исходного аккаунта, установите доверительную политику для этой роли, позволяющую ей быть использованной другими аккаунтами. Например:{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::987654321098:root" }, "Action": "sts:AssumeRole" } ] }
-
Проблемы с DataSync:
ОшибкаUnable to connect to S3 endpoint
может сигнализировать о некорректных разрешениях или сетевых ограничениях. Убедитесь, что у вас не настроены VPC или другие сетевые компоненты, блокирующие доступ. Также проверьте, что вы используете правильные параметры конфигурации для задания DataSync, включая правильные пункты назначения и источники.
Что еще проверить
- Корректность ARN-ов: Убедитесь, что вы используете правильные ARN для всех ролей и ресурсов в ваших политиках.
- Консоль CloudWatch: Используйте метрики и логи CloudWatch для отслеживания и диагностики проблем. Это может дать дополнительную информацию о том, что может быть не так.
- IAM Policies: Убедитесь, что в политиках IAM не существует дополнительных ограничений, которые могут блокировать доступ к ресурсам в другой учетной записи.
Вывод
Для успешного выполнения операций между аккаунтами вам действительно нужен установочный уровень доверия, если роли используются. Тщательная настройка разрешений и ролей на обеих сторонах, а также использование инструментов отладки, таких как CloudWatch, помогут вам выявить и устранить проблему с копированием данных между S3-бакетами.