Межрегиональная репликация AWS S3
Amazon Simple Storage Service (S3) - это масштабируемая служба хранения объектов, которая позволяет хранить и извлекать любые объемы данных. В этом руководстве мы рассмотрим настройку межрегиональной репликации (CRR) и совместное использование объектов через предварительно подписанные URL-адреса.
Сначала давайте создадим бакет S3 и добавим объект.
aws s3api create-bucket --bucket your-unique-bucket-name --region us-east-1 echo "Hello, S3!" > hello.txt aws s3 cp hello.txt s3://your-unique-bucket-name/
Это создаст простой текстовый файл с именем hello.txt и загрузит его в бакет S3.
Далее давайте включим публичный доступ и версионирование бакета. Для этого перейдите в консоль AWS S3, выберите бакет и перейдите на вкладку «Permissions». Отредактируйте политику бакета, используя следующий пример JSON:
{
"Version": "2012-10-17",
"Statement": [
{ "Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::your-unique-bucket-name/*"
} ] }
Это позволит получить публичный доступ на чтение к объектам в бакете.
Включите версионирование с помощью AWS CLI:
aws s3api put-bucket-versioning --bucket your-unique-bucket-name --versioning-configuration Status=Enabled
Версионирование помогает отслеживать изменения в объектах с течением времени, включая удаленные объекты.
Репликация CRR
Cross-Region Replication (CRR) - это важная функция AWS S3, которая позволяет реплицировать объекты в разных регионах AWS. Это повышает долговечность и доступность данных, обеспечивая надежное решение для аварийного восстановления и соблюдения нормативных требований.
Шаг 1:
Перед настройкой CRR необходимо создать роль IAM, которая будет предоставлять разрешения, необходимые для репликации. Выполните следующую команду, чтобы создать роль IAM с именем CrossRegionReplicationRole с политикой доверия, указанной в файле crr-trust-policy.json:
aws iam create-role --role-name CrossRegionReplicationRole --assume-role-policy-document file://crr-trust-policy.json
Ниже приведен пример файла crr-trust-policy.json, содержащего политику доверия для роли IAM, используемой в CRR в AWS S3:
{
"Version": "2012-10-17",
"Statement": [
{ "Effect": "Allow",
"Principal": {
"Service": "s3.amazonaws.com"
}, "Action": "sts:AssumeRole"
} ] }
Шаг 2:
Создайте файл с именем crr-policy.json и укажите политику IAM, предоставляющую разрешения для межрегиональной репликации. Эта политика включает в себя разрешения на получение конфигураций репликации, список бакетов, получение версий объектов, репликацию объектов и репликацию удалений.
{
"Version": "2012-10-17",
"Statement": [
{ "Effect": "Allow",
"Action": [
"s3:GetReplicationConfiguration",
"s3:ListBucket",
"s3:GetObjectVersion",
"s3:GetObject"
], "Resource": [
"arn:aws:s3:::your-source-bucket",
"arn:aws:s3:::your-source-bucket/*"
] }, { "Effect": "Allow",
"Action": [
"s3:ReplicateObject",
"s3:ReplicateDelete"
], "Resource": "arn:aws:s3:::your-destination-bucket/*"
} ] }
Шаг 3:
Прикрепите роль IAM к исходному бакету с помощью следующей команды:
aws s3api put-bucket-replication --bucket your-source-bucket --replication-configuration file://crr-configuration.json
Ниже приведен пример файла crr-configuration.json для CRR в AWS S3. Обратите внимание, что Вам нужно заменить значения placeholder, такие как your-source-bucket, your-destination-bucket и arn:aws:iam::123456789012:role/CrossRegionReplicationRole на реальные имена бакетов и ARN роли IAM.
{
"Role": "arn:aws:iam::123456789012:role/CrossRegionReplicationRole",
"Rules": [
{ "ID": "Rule1",
"Prefix": "",
"Status": "Enabled",
"SourceSelectionCriteria": {
"SseKmsEncryptedObjects": {
"Status": "Enabled"
} }, "Destination": {
"Bucket": "arn:aws:s3:::your-destination-bucket",
"StorageClass": "STANDARD_IA",
"BucketAccountId": "123456789012"
} } ] }
Ссылка, которой можно поделиться с другими пользователями
После настройки межрегиональной репликации Вам может потребоваться безопасный обмен объектами с другими пользователями. AWS предоставляет функцию, называемую предварительно подписанными URL-адресами, которые представляют собой ограниченные по времени URL-адреса, предоставляющие временный доступ к объектам S3. Для генерации предварительно подписанного URL для определенного объекта в бакете используйте следующую команду:
aws s3 presign s3://your-unique-bucket-name/hello.txt --expires-in 3600
Флаг --expires-in задает время действия URL в секундах. В данном примере URL действует в течение одного часа (3600 секунд). Сгенерированный URL-адрес можно передать другим пользователям. Любой человек с таким URL может получить доступ к связанному объекту S3 в течение указанного времени.
Очистка
Убедитесь, что Вы удалили следующие ресурсы:
aws s3 rb s3://your-unique-bucket-name --force aws iam delete-role --role-name CrossRegionReplicationRole
Заключение
В этой статье мы погрузились в тонкости работы Amazon Simple Storage Service (S3) на AWS, изучили ключевые особенности и функциональные возможности, которые позволяют эффективно управлять данными и обеспечивать их безопасность. Будьте осторожны при работе с общедоступными и конфиденциальными данными! Регулярно пересматривайте и обновляйте политики бакета для обеспечения его безопасности.





