Cómo dar acceso sólo a un ‘bucket’ concreto de S3 con Amazon AIM.

Cómo dar acceso sólo a un ‘bucket’ concreto de S3 con Amazon AIM

Miguel Menéndez

Si has usado alguna vez la consola de Amazon Web Services (AWS) ya sabrás que, aunque tiene una cantidad ingente de funcionalidades para interactuar con los numerosos servicios de Amazon, es bastante espartana. Así que, cuando necesité dar acceso a uno de mis colaboradores a varios de los buckets de S3 que dependían de mi cuenta en AWS tuve que indagar cómo dar permisos adecuados a determinados usuarios para permitirles acceder a servicios concretos.

La consola de S3 es simple pero suficientemente funcional. Es posible subir y descargar archivos, crear directorios, gestionar permisos puntuales e incluso copiar y pegar archivos de bucket a bucket en un momento.

Después de varios ensayos y errores… ¡Lo conseguí! Ahí va una pequeña guía.

1. Accede a la consola de AWS

Accede a la consola con las credenciales del propietario de la cuenta de Amazon. Haz click en la pestaña IAM.

2. Crea un sinónimo de la cuenta

Este paso es opcional, pero te ofrece una URL de acceso fácil de recordar para tus usuarios. Añade un sinónimo de la cuenta en la sección AWS Account Alias de la consola de IAM. Tras esto, tu URL de acceso a la consola será similar a textodeseado.signin.aws.amazon.com.

Si no creas un sinónimo, tu URL de acceso estará compuesta por una serie de caracteres aleatorio (lo que, personalmente, considero más seguro).

3. Crea un nuevo usuario (y/o un nuevo grupo de usuarios)

Con IAM puedes crear un grupo con determinados permisos y luego asignar usuarios a ese grupo. O, si lo prefieres, no crear ningún grupo y asignar los permisos usuario por usuario.

Si quieres crear un grupo, créalo antes. Luego crea el usuario y asignalo a ese grupo.

4. Establece una contraseña para el nuevo usuario

Haz click en el nuevo usuario que acabas de crear y luego haz click en la pestaña Security Credentials. En esa página, haz click en Manage Password para asignar la contraseña al usuario. Si no asignas una contraseña el usuario no podrá acceder a la consola de AWS (esto no es algo malo, ya que el usuario podrá interactuar con S3 gracias a una API Key).

Si habías creado un sinónimo para la URL de acceso (textodeseado.signin.aws.amazon.com), asegúrate de que el nuevo usuario conoce la dirección correcta y completa (no podrá acceder con sus credenciales a través de la página de acceso general).

Ahora la consola te informa de que se ha creado una API Key para la interacción con AWS: Los usuarios de la API que usen esta API Key tienen los mismos permisos que el usuario de la consola para la que fue creada.

5. Da permisos al nuevo usuario

Debes asignar los permisos al grupo si has añadido al usuario a él o asignar los permisos directamente al usuario si no lo has incluido en ningún grupo.

Haz click en el usuario o el grupo, según proceda. Luego haz click en la pestaña Permissions. Aquí podrás ver qué políticas de permisos están ya asignadas al grupo o usuario. Haz click en el botón Attach Policy. En la nueva ventana podrás Manage User Permissions (gestionar los permisos del usuario). Puedes seleccionar una política “precocinada”, usar el Policy Generator (generador de políticas), o simplemente pegar una política personalizada.

Son dos las políticas que necesitas establecer para que el nuevo usuario pueda acceder a la consola, ver la lista de todos los buckets de la cuenta y gestionar el bucket o buckets que le has asignado.

Para menejar el bucket, necesitas dar acceso a la acción s3:* para el bucket adecuado. Las políticas de AWS designan recursos por su “Amazon Resource Name” o ARN y por los buckets de S3. Algo parecido a esto: arn:aws:s3:::nombredelbucket. Así que para conceder todos los permisos a bucket, ésta sería una buena política:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
{
  "Version": "2012-10-17",
  "Statement": [{
    "Action": "s3:*",
    "Effect": "Allow",
    "Resource": [
      "arn:aws:s3:::nombredelbucket",
      "arn:aws:s3:::nombredelbucket/*"
    ]
  }]
}

Ahora podías pensar que ésto es suficiente para permitir al nuevo usuario usar la consola de S3 para gestionar el bucket, pero no es así. Hay que conferir al nuevo usuario un permiso adicional para que pueda ver todos los buckets dependientes de la cuenta de AWS en la consola y así poder seleccionar aquél o aquéllos para los que tiene permisos. El permiso se llama s3:ListAllMyBuckets. La política sería esta:

1
2
3
4
5
6
7
8
{
  "Version": "2012-10-17",
  "Statement": [{
    "Effect": "Allow",
    "Action": "s3:ListAllMyBuckets",
    "Resource": "arn:aws:s3:::*"
  }]
}

6. Ambas políticas fusionadas (JSON)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
{
  "Version": "2012-10-17",
  "Statement": [{
    "Effect": "Allow",
    "Action": "s3:*",
    "Resource": [
      "arn:aws:s3:::nombredelbucket",
      "arn:aws:s3:::nombredelbucket/*"
    ]},
    {
      "Effect": "Allow",
      "Action": "s3:ListAllMyBuckets",
      "Resource": "arn:aws:s3:::*"
    }]
}

7. ¡Listo!

Lo has hecho. Lo único que te falta es facilitar al usuario sus credenciales y la URL de acceso a la consola de AWS.

Fuente: Documentación de AWS.

Comentarios

¿Has encontrado un error? ¿Crees que algo podría mejorarse? No dudes en comentármelo y estaré encantado de echarle un vistazo.