Skip to main content

Command Palette

Search for a command to run...

POC Sync de bucket S3 en diferentes cuentas

El escenario es simple, tenemos 2 bucket que necesitamos mantener en sync pero en 2 cuentas de AWS diferentes, qué podemos hacer?

Published
2 min read
POC Sync de bucket S3 en diferentes cuentas

Siganme en esta historia de pruebas sobre el sync de bucket de S3 con la particularidad de que cada uno de ellos está en una cuenta de AWS diferente. (y si, vamos a necesitar policies que nos permitan hacer esto)

Escenario

  • Tenemos 2 cuentas de AWS

    • Cuenta A ORIGEN: AAAAAAAAAAAA
    • Cuenta B DESTINO: BBBBBBBBBBBB
  • Tenemos un bucket S3 en cada una de ellas.

  • Tenemos configurado en nuestro CLI el usuario de IAM de la cuenta B (destino)

Cuenta origen

Sobre el bucket de Origen

Debemos permitir que desde la otra cuenta puedan hacer GET y LIST de los objetos del bucket, para poder luego hacer el sync. Para esto debemos modificar la policy en el bucket.

En la parte de permisos del bucket, buscamos la sección bucket policy y editamos. image.png

Copiamos la siguiente policy Cambiando BBBBBBBBBBBB por la cuenta de destino, y el NOMBRE_BUCKET_ORIGEN por el nombre de nuestro bucket

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "DelegateS3Access",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::BBBBBBBBBBBB:root"
            },
            "Action": [
                "s3:ListBucket",
                "s3:GetObject",
                "s3:GetObjectTagging"
            ],
            "Resource": [
                "arn:aws:s3:::NOMBRE_BUCKET_ORIGEN/*",
                "arn:aws:s3:::NOMBRE_BUCKET_ORIGEN"
            ]
        }
    ]
}

Cuenta destino

Policy en usuario de destino

Nos vamos al usuario en la cuenta de destino y le agregamos una política que permita:

  • LIST y GET en el bucket de orignen
  • LIST y PUT en el bucket de destino
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::NOMBRE_BUCKET_ORIGEN",
                "arn:aws:s3:::NOMBRE_BUCKET_ORIGEN/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:PutObject",
                "s3:PutObjectAcl"
            ],
            "Resource": [
                "arn:aws:s3:::NOMBRE_BUCKET_DESTINO",
                "arn:aws:s3:::NOMBRE_BUCKET_DESTINO/*"
            ]
        }
    ]
}

Sync

Por último, y teniendo la CLI configurada con el usuario de destino, ejecutamos el sync de los archivos

aws s3 sync s3://NOMBRE_BUCKET_ORIGEN s3://NOMBRE_BUCKET_DESTINO --source-region NOMBRE_REGION_ORIGEN --region NOMBRE_REGION_DESTINO

Con esta configuración podemos datos en tiempos super bajos ya que evitamos descargar en local para luego subir al otro bucket.

Espero que sea útil! Cualquier consulta dejanos un mensaje, y si te gusó compartilo para que aprendamos entre todos.

More from this blog

Deceroait

25 posts

Soy un apasionado por aprender tecnologías para resolver problemas. Enseñar es la mejor manera de aprender Ubuntu: I am because you are! Devops - Cloud Engineer - Manager