Transfiriendo la propiedad de recursos S3 entre cuentas.
Hace un tiempo en mi actual trabajo se hizo una reorganización y reestructuración que requería la creación de nuevas cuentas de Amazon Web Services para el uso de S3, dichas cuentas nuevas debían poseer el mismo contenido en S3 que las cuentas anteriores.
Me fue encargada esa tarea, así que puesto a investigar decidí mirar la documentación que el propio sitio de AWS nos da, descubriendo que no es posible mover objetos entre cuentas pero si se pueden crear copias exactas, de eso trata este articulo.
Primero que nada necesitaremos tener acceso a las dos cuentas con las que vamos a trabajar, las cuales serán cuenta origen y cuenta destino. Necesitamos obtener el ID de cada una de estas cuentas, este se obtiene en el Support Center de la cuenta AWS y es un número de 12 dígitos.
Lo siguiente es agregar una política al bucket S3 del cual queremos copiar los recursos lo cual permitirá a la cuenta destino obtener los objetos de la cuenta origen. El ejemplo es el siguiente, debemos tomar en cuenta que en el valor Principal de la política será necesario colocar el ID de la cuenta destino.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "CompartirRecursos",
"Effect": "Allow",
"Principal": {"AWS": "222222222222"},
"Action": ["s3:ListBucket","s3:GetObject"],
"Resource": [
"arn:aws:s3:::bucketorigen/*",
"arn:aws:s3:::bucketorigen"
]
}
]
}
En nuestra cuenta destino debemos tener disponible un bucket en S3 el cual será el que reciba los objetos de la cuenta origen, una vez que se encuentre listo el bucket, debemos agregar una política de usuario para poder comenzar a copiar los objetos.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::bucketorigen",
"arn:aws:s3:::bucketorigen/*"
]
},
{
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:PutObject",
"s3:PutObjectAcl"
],
"Resource": [
"arn:aws:s3:::bucketdestino",
"arn:aws:s3:::bucketdestino/*"
]
}
]
}
Teniendo ya todo configurado podremos ejecutar el siguiente comando en nuestra consola, cabe resaltar que será necesario instalar Python para utilizar módulos de AWS. Esto se puede lograr siguiendo este articulo (Usuarios Windows)
aws s3 sync s3://bucketorigen s3://bucketdestino
Todo el proceso resumido en un video se encuentra aquí.