Saltar al contenido principal

Replicación S3

Pasos para configurar el servicio de S3 replication para replicar archivos de un bucket a otro en diferentes cuentas.

Como requisito es necesario tener en ambos buckets el versionado activo.

1. Crear IAM Role en la cuenta donde está el bucket de origen​

Trust Policy​

Necesitas una política de confianza que permita al servicio S3 asumir el rol:

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "s3.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}

Permissions Policy​

Una política de permisos que permita:

  • Leer objetos y metadatos del bucket de origen (Cuenta A).
  • Poner (put) objetos en el bucket de destino (Cuenta B).
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "ReadSourceBucket",
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:GetObjectAcl",
"s3:GetObjectVersion",
"s3:GetObjectVersionAcl"
],
"Resource": "arn:aws:s3:::<NOMBRE_BUCKET_ORIGEN>/*"
},
{
"Sid": "WriteDestBucket",
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:PutObjectAcl",
"s3:ReplicateObject",
"s3:ReplicateDelete",
"s3:ReplicateTags",
"s3:GetObjectVersionTagging",
"s3:PutObjectVersionTagging"
],
"Resource": "arn:aws:s3:::<NOMBRE_BUCKET_DESTINO>/*"
}
]
}

2. Agregar política al bucket de destino​

Dentro del detalle del bucket de destino, ir a la pestaña de permisos y agregar la siguiente política:

{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowReplicationFromAccountA",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::<ID_CUENTA_A>:role/<NOMBRE_DE_LA_ROLE>"
},
"Action": [
"s3:PutObject",
"s3:PutObjectAcl",
"s3:ReplicateObject",
"s3:ReplicateDelete",
"s3:ReplicateTags"
],
"Resource": ["arn:aws:s3:::<NOMBRE_BUCKET_DESTINO>/*"]
}
]
}

3. Configurar la regla de replicación en el bucket de origen​

  • En el detalle del bucket de origen, ir a la pestaña "Management" (o "Properties" según versión de la consola) y buscar la sección de Replication.
  • Crear una nueva regla de replicación y definir:
    • Rule name: Un nombre descriptivo.
    • Status: Enabled (habilitada).
    • Source bucket: El bucket actual (ya está seleccionado).
    • Prefix/Filter: Puedes elegir replicar todo el bucket o solo un prefijo en particular.
    • Destination:
      • Bucket: especificar el ARN del bucket de destino en la Cuenta B.
    • IAM role: elegir el rol que creaste en el primer paso, que permite la replicación.

Opcionales​

  • Si se activa la opción de "Transfer to destination bucket owner" debe agregarse, tanto en AllowReplicationFromAccountA (política del bucket destino) como en WriteDestBucket (IAM role), la action: "s3:ObjectOwnerOverrideToBucketOwner"

Formas de copiar archivos ya existentes​

Existen 3 maneras diferentes de copiar los archivos ya existentes del bucket:

1. Hacerlo junto con la replicación​

Al activar la replicación, te da una opción para copiar todos los archivos existentes.

2. Usar la opción de migración S3 que brinda Sleakops​

En el detalle de la dependencia de tipo S3, se puede encontrar esta función donde te guía paso a paso lo que se tiene que hacer.

3. Usar el servicio de Batch Operation​

Una vez creada la regla de replicación, siguiendo estas guías:

Agregar a la política S3ReplicationRolePolicy las siguientes acciones:

  • "s3:PutObjectTagging" al "Sid": "WriteDestBucket"
  • "s3:GetObjectTagging" y "s3:ListBucket" al "Sid": "ReadSourceBucket"
{
"Sid": "ReadReportBucket",
"Effect": "Allow",
"Action": ["s3:GetObject", "s3:GetObjectVersion"],
"Resource": ["arn:aws:s3:::bucket-reports/*"]
}

Y agregar tanto a WriteDestBucket como SourceBucket el permiso "s3:InitiateReplication".