AWS IAM – Identity and Access Management

Ya escribimos una entrada sobre las políticas de IAM, así que en esta entrada vamos a profundizar en algunos aspectos avanzados de IAM, y cómo integrarlo con otros servicios.

STS – Security Token Service

Es un mecanismo que sirve para ofrecer acceso limitado y temporal a recursos AWS (misma cuenta o Cross Account), mediante un token de una hora de duración. Lo que hace STS es asumir un rol asociado a ese token:

  1. Se define un rol IAM
  2. Se identifica qué personas/aplicaciones pueden acceder a ese rol
  3. Se utiliza AWS STS para conseguir las credenciales e impersonar el rol IAM
  4. Estas credenciales temporales sirven entre 15 minutos y una hora

Identity Federation

Este mecanismo permite que usuarios que se autentican contra un servicio externo, asuman un rol temporal para el acceso a los recursos en AWS. Se pueden utilizar distintas variantes de este mecanismo:

  • SAML 2.0
  • Custom Identity Broker
  • Web Identity Federation con o sin Amazon Cognito
  • Single Sign On
  • AWS Microsoft AD

Utilizando este mecanismo, no es necesario crear los usuarios en IAM, ya que están creados en ese proveedor externo:

Identity Federation en AWS

SAML 2.0 Federation

Se puede utilizar para integrar Directorio Activo o ADFS con AWS. Proporciona acceso a la consola AWS o CLI mediante credenciales temporales, y así evita tener que crear usuarios en IAM para cada usuario que necesite acceso.

Esta configuración se basa en una relación de confianza entre AWS IAM y SAML, en ambos sentidos, y se utiliza la API de STS: AssumeRoleWithSAML.

Este mecanismo es antiguo, y AWS ahora recomienda utilizar Amazon Single Sign On (SSO) Federation.

Custom Identity Broker Application

En este caso, si el servicio que queremos integrar no es compatible con SAML, podemos utilizar el API para integrar nuestro propio servicio de autenticación, utilizando STS para obtener las credenciales temporales:

Web Identity Federation

AWS no recomienda este mecanismo de Federación, porque está disponible el servicio AWS Cognito que ofrece mejor integración y mayor funcionalidad. En todo caso es así como funciona:

AWS Cognito

Este servicio se puede utilizar para dar un acceso directo a recursos AWS desde el lado de cliente, una aplicación web o móvil. Se evita tener que crear usuarios en IAM para la aplicación, y se confía en la gestión de usuarios de otros servicios: Google, Facebook, Twitter, …

AWS Directory Services

Es un servicio de Directorio Activo, compatible con el servicio de Microsoft, pero gestionado por AWS. Se puede configurar de dos modos diferentes, basado en cómo se relaciona con el AD On-Premise existente, si hay alguno:

  • AWS Managed Microsoft AD: Se basa en la creación de un AD en AWS, con gestión de usuarios local y MFA, pero estableciendo una relación de confianza bidireccional con un servicio de AD On-Premise:
  • AD Connector: en este caso, se trata de desplegar un «proxy» en AWS, que redirecciona todas las peticiones al AD On-Premise, donde se realiza la gestión de usuarios:
  • Simple AD: se despliega un AD en AWS, pero no hay ningún tipo de sincronización con AD On-Premise, toda la gestión se realiza en el AD de AWS:

AWS Single Sign-On (SSO)

Permite autenticarse una sola vez, y que esto permita acceder a diferentes recursos, en AWS y en otras aplicaciones de terceros (Dropbox, Slack, Office365, …). Algunas características:

  • Está integrado con AWS Organizations
  • Soporta SAML 2.0
  • Integración con AD On-Premise
  • Gestión de permisos centralizada
  • Auditoría centralizada con CloudTrail

Organizaciones AWS

Las Organizaciones de AWS permiten gestionar múltiples cuentas AWS, mediante este servicio global. Una organización está formada por una cuenta principal (master account), que no se puede cambiar, y luego otras cuentas asociadas (member accounts). Una cuenta asociada solo puede pertenecer a una organización.

La Organización permite unificar la facturación de todas las cuentas, mediante un único método de pago, y además beneficiarse del uso agregado de todas ellas (descuentos por volumen, …)

Estrategias

Creación de cuentas por departamento, por entorno (dev, test, prod), … de forma que se puedan establecer límites por cuenta, e diferenciar el coste de cada una de ellas. Hay varios criterios que habrá que estudiar y decidir:

  • Multi-account vs una única cuenta con múltiples VPC
  • Usar tags estándar para facturación diferenciada
  • Habilitar CloudTrail en todas las cuentas, y unificar los logs en un bucket S3 para análisis
  • Enviar los logs de CloudWatch a una cuenta central para unificarlo
  • Establecer roles de administración para varias cuentas

Organizational Units (OU)

Esta es la forma de organizar las cuentas, eligiendo el criterio más adecuado: por departamento, por proyecto, …

Service Control Policies (SCP)

Es un método para establecer listas blancas o negras de acciones IAM, a nivel de OU o de Account, teniendo en cuenta que no aplica a la Master Account. SCP se aplica a todos los usuarios y grupos de una cuenta, incluyendo el Root.

SCP no aplica a los roles asociados a servicios, y SCP debe especificar una acción de permitir explícita, es decir, que no se puede permitir todas las acciones por defecto.

Todas las reglas SCP se heredan y aplican en todos los usuarios/grupos que hay por debajo de la jerarquía. Si para un usuario hay dos reglas opuestas, que permiten y rechazan una determinada acción, siempre tendrá preferencia la regla de denegación.

Aplicación de políticas IAM

Además de las SCP comentadas en el apartado anterior, hay que tener en cuenta los Permissions Boundary, que es una forma de limitar los permisos a los usuarios, independientemente de las políticas IAM que se apliquen posteriormente. Es decir, que un Permission Boundary puede limitar exactamente a los recursos y acciones que podría realizar un usuario, si tuviera aplicadas las políticas adecuadas en IAM. Aquí está la foto completa de cómo se aplican los permisos:

Aquí está el flujo completo de la evaluación de políticas de IAM, SCP y Permission Boundary:

Resource Access Manager (RAM)

Es un servicio para compartir recursos (subnet, …) con otras cuentas, ya sean de la misma organización o de otras diferentes.

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.