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?
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.
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.