Blog de Amazon Web Services (AWS)

Conéctese de forma segura a Amazon RDS para PostgreSQL con AWS Identity Center y Active Directory

Por Adrià Morgado, arquitecto senior de infraestructura de nube en AWS y Jose Sánchez Romero,  arquitecto senior de infraestructura de nube en AWS.

En el entorno empresarial actual, la integración de sistemas es clave no solo para optimizar la eficiencia operativa, sino también para asegurar la gestión y protección adecuada de los datos. En una publicación anterior, mostramos cómo conectarse de forma segura a Amazon RDS para PostgreSQL con AWS Session Manager y autenticación de IAM.
Sin embargo, muchas organizaciones buscan centralizar y simplificar la autenticación y autorización a sus bases de datos, con el objetivo principal de reducir la complejidad operativa y mejorar la seguridad.

En este artículo, exploraremos cómo implementar una solución que combina Active Directory y AWS IAM Identity Center para lograr una conexión segura a sus bases de datos RDS. Esta solución integrada, proporciona a los usuarios una experiencia de acceso fluida a los recursos empresariales, al mismo tiempo que ofrece al equipo de gestión un control centralizado y una visibilidad clara sobre la administración de identidades y el acceso a los datos.

El proceso se iniciará con la configuración del directorio principal de usuarios en Active Directory. Luego, integraremos este directorio en AWS IAM Identity Center, que servirá de intermediario entre Active Directory y los recursos en la nube, facilitando el inicio de sesión único y la gestión de identidades. Finalmente, estableceremos la conexión entre Identity Center y Amazon RDS para PostgreSQL, garantizando que los usuarios accedan a la base de datos con un alto nivel de seguridad y control.

Requisitos previos

Para esta publicación debe tener las siguientes herramientas y servicios:

Arquitectura de la solución

En el siguiente diagrama se detallan los componentes que intervienen en la arquitectura y los pasos necesarios para establecer una conexión segura a Amazon RDS con AWS Identity Center y Active Directory.
Arquitectura de la solución

Los diferentes pasos del flujo de trabajo son los siguientes:

  1. Inicie una sesión en el portal de acceso de AWS (URL disponible en AWS IAM Identity Center) con sus credenciales (usuario y contraseña).
  2. AWS IAM Identity Center redirige la solicitud al servicio de autenticación de AWS IAM Identity Center en función del directorio asociado a la dirección de correo electrónico del usuario. En nuestro caso, utilizaremos AWS Managed Active Directory como fuente de identidad. Una vez autenticado, el usuario tiene acceso de inicio de sesión único a cualquiera de las cuentas que aparecen en el portal.
  3. Una vez haya iniciado sesión en su cuenta de AWS, conéctese al host bastión a través del punto de conexión de Amazon EC2 Instance Connect.
  4. Una vez el túnel esté establecido, y desde la ventana de terminal que se abrirá, llame con sus credenciales a Amazon RDS para obtener el token de autenticación a la base de datos.
  5. Conéctese a la base de datos mediante el token de autenticación de la base de datos generado por Amazon RDS.

Como práctica recomendada para la seguridad a nivel de red, recomendamos lanzar las instancias de Amazon RDS en subredes privadas por varias razones de seguridad, entre ellas, reducir la superficie de un posible atacante o proteger contra accesos no autorizados desde fuentes externas.

Para permitir el acceso de los usuarios a estos recursos privados en una red, es necesario disponer de un host bastión a través del cual los usuarios se conecten para acceder a la base de datos. Aunque generalmente los bastiones se encuentran en una subred pública para permitir el acceso desde Internet, existen alternativas que permiten conectarse de forma segura a una instancia de EC2 configurada en una red privada, proporcionando una capa adicional de seguridad al entorno de su VPC. Para esta solución utilizaremos el punto de conexión de EC2 Instance Connect, estableciendo un túnel privado desde el equipo hasta el punto final mediante las credenciales de la entidad de IAM.

Configuración paso a paso

Conexión con un directorio Microsoft Active Directory

El origen de identidad en AWS IAM Identity Center define dónde se administran sus usuarios y grupos de Active Directory. Tras configurar su origen de identidad, usted puede buscar a sus usuarios o grupos de Active Directory para concederles acceso a las cuentas de AWS o aplicaciones.

En esta sección le guiamos a través de los pasos necesarios para configurar una conexión de un directorio AWS Managed Microsoft Active Directory con AWS IAM Identity Center. Si usted ya ha configurado dicha conexión con un directorio Microsoft Active Directory, pase a la siguiente sección.

Para configurar su fuente de identidad en AWS Identity Center:

  1. Abra la consola de AWS IAM Identity Center.
  2. Elija Configuración.
  3. En la página de Configuración, elija la pestaña Fuente de identidadAcciones, y a continuación, Cambiar fuente de identidad.
  4. Seleccione Active Directory en Elegir origen de identidad, y a continuación seleccione Siguiente.
    Choose identity source
  5. En Conectar Active Directory, elija su directorio AWS Managed Microsoft AD, y a continuación, pulse Siguiente.
    Connect Active Directory
  6. En Confirmar el cambio,escriba Aceptar, y a continuación, elija Cambiar fuente de Identidad.

Configuración de AWS IAM Identity Center

Crear un conjunto de permisos para el grupo de usuarios

Para que el usuario pueda conectarse a la base de datos necesita tener acceso a un host bastión que utilice de puente para establecer dicha conexión.
Para ello, y en AWS IAM Identity center, vamos a crear un conjunto de permisos para dotar al usuario de los privilegios necesarios para conectarse al host bastión y desde allí a la base de datos Amazon RDS para PostgreSQL.

Antes de crear el conjunto de permisos, deberemos crear las políticas de AWS IAM administradas por el cliente:

  1. Abra la consola de IAM.
  2. En el panel de navegación, elija Políticas.
  3. Elija Crear Políticas, y en la sección Editor de políticas, seleccione la opción JSON.
  4. Introduzca ahora el siguiente documento de políticas JSON. Esta política de IAM permitirá al usuario que ha iniciado sesión en AWS Identity Center, conectarse a su instancia de base de datos.
    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "rds-db:connect"
                ],
                "Resource": [
                    "arn:aws:rds-db:<region>:<account-id>:dbuser:<DBInstanceResourceID>/${aws:PrincipalTag/Username}"
                ]
            }
        ]
    }

    Asegúrese de reemplazar los siguientes elemenos debidamente:

    • region – La región de AWS de la instancia de base de datos.
    • account-id – El número de cuenta de AWS de la instancia de base de datos.
    • DBInstanceResourceID – El identificador de la instancia de base de datos. Para buscar el ID de recurso de la instancia de base de datos en la consola de Amazon RDS, elija la instancia de base de datos para ver sus detalles. A continuación, elija la pestaña Configuración y el ID del recurso se mostrará en la sección Configuración.
  1. Elija Revisar la política e introduzca un nombre para la política. En nuestro caso utilizaremos dbaccesspost.
  2. Si lo desea, puede introducir una descripción.
  3. Seleccione Crear política.

Siguiendo de nuevo los pasos anteriores, ahora crearemos una segunda política llamada dbaaccessec2. Esta política nos permitirá conectarnos al host bastión a través de EC2 Instance Connect. Para ello utilizaremos el siguiente documento JSON:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "EC2InstanceConnect",
            "Action": [
                "ec2-instance-connect:SendSSHPublicKey"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:ec2:<region>:<account-id>:instance/<instance-id>",
            "Condition": {
                "StringEquals": {
                    "ec2:osuser": "ec2-user"
                }
            }
        },
        {
            "Sid": "EC2InstanceDescribe",
            "Action": [
                "ec2:DescribeInstances",
                "ec2:DescribeVolumes",
                "ec2:DescribeSecurityGroups"
            ],
            "Effect": "Allow",
            "Resource": "*"
        }
    ]
}

Reemplaze los siguientes elementos debidamente:

  • region – La región de AWS de la instancia de base de datos.
  • account-id – El número de cuenta de AWS de la instancia de base de datos.
  • instance-id – El identificador de la instancia host bastión.

Una vez hayamos creado las políticas de IAM, procederemos a crear un conjunto de permisos en AWS Identity Center. Para ello complete los siguientes pasos:

  1. Abra la consola AWS IAM de Identity Center.
  2. En Permisos para varias cuentas, elija ahora Conjunto de permisos.
  3. Elija Crear Conjunto de permisos.
  4. En Tipo de conjunto de permisos seleccione Conjunto de permisos personalizado.
    Select permission set type
  5. En Política para un conjunto de permisos personalizado, elegimos Políticas Administradas por el cliente. Ahora introducimos el nombre de las políticas que deseemos añadir al conjunto de permisos. En nuestro caso, añadiremos los nombres de las dos políticas IAM administradas creadas anteriormente, dbaccesspost y dbaaccessec2. Seleccione Siguiente.
    Permission set details
  6. Escriba ahora el Nombre del conjunto de permisos. En nuestro ejemplo, lo llamaremos dbapostgresqlaccess. Opcionalmente puede añadir una descripción o modificar los valores de la duración de sesión o el estado de retransmisión.
    Permission set details
  7. Elija Siguiente, y en la página Revisar y crear, revise las selecciones que ha realizado, y a continuación seleccione Crear.

Aprovisionamiento de usuarios y grupos dentro del directorio de Active Directory

  1. Acceda a su directorio de Active Directory y proceda a crear un grupo de usuarios llamado dbs.
    MS Active Directory
  2. Cree un usuario (en nuestro ejemplo dbajosanrno) dentro del directorio de Active Directory, y asócielo al grupo creado anteriormente, dbs.
    MS Active Directory

Sincronización con IAM Identity Center

Con AWS IAM Identity Center y la sincronización con Active Directory, usted puede utilizar AWS IAM Identity Center para asignar a los usuarios y grupos de Active Directory el acceso a las aplicaciones o cuentas de AWS. Todas las identidades asignadas se sincronizarán automáticamente en AWS IAM Identity Center.

Para sincronizar los usuarios y el grupo de usuarios creado anteriormente en el directorio de Active Directory, siga estos pasos:

  1. Abra la consola de AWS IAM Identity Center.
  2. Seleccione Configuración.
  3. Dentro de la pestaña Origen de la identidad, elija Acciones y, a continuación, Administrar sincronización.
  4. Ahora elija Usuarios, y a continuación, seleccione Añadir usuarios y grupos.
  5. En la pestaña Usuarios, en Usuario, introduzca el nombre de usuario exacto creado en el paso anterior (en nuestro caso dbajosanrno) y seleccione Añadir.
  6. Seleccione Enviar.
  7. En la página Usuarios, deberá aparecer el usuario que especificó anteriormente. Es posible que el proceso tarde algún tiempo.
    Identity Center Sync

Realice ahora el mismo proceso para añadir el grupo de usuarios creado en la sección anterior, dbs.
Identity Center Sync

Asigne el acceso de los usuarios a cuentas de AWS

Siga los siguientes pasos para asignar el acceso de inicio de sesión único a usuarios y grupos del directorio de Active Directory.

  1. Abra la consola AWS IAM de Identity Center.
  2. En el panel de navegación, en Permisos para varias cuentas, elija Cuentas de AWS.
  3. Seleccione ahora la casilla de verificación situada junto a la cuenta o cuentas de AWS a las que desee asignar el acceso de inicio de sesión.
  4. Seleccione Asignar usuarios o grupos.
    Identity Center assign users
  5. Seleccione ahora el grupo de usuarios (en nuestro caso, dbs) y elija Siguiente.
    Identity Center assign users
  6. Seleccione el conjunto de permisos en la sección Asignar conjuntos de permisos. En nuestro ejemplo, seleccionaremos dbapostgresqlaccess. Seleccione Siguiente.
    Identity Center assign users
  7. Revisamos los usuarios, grupos y los conjuntos de permisos seleccionados. Ahora seleccionamos Enviar.
    Identity Center assign users

Control de acceso basado en atributos

Para poder configurar el control de acceso es necesario asignar los tags que serán transferidos a través de la solicitud SAML. En este caso utilizamos como tag el atributo Username, que será el usuario que tendrá que estar dado de alta en la base de datos. Para que la autenticación funcione, el Username procedente del sistema de autenticación debe coincidir con el usuario de base de datos.

Para configurar los atributos:

  1. Abra la consola AWS IAM de Identity Center.
  2. Elija Configuración en el panel de opciones, y seleccione la pestaña Atributos para el control de acceso. A continuación, elija Administrar atributos.
  3. Seleccione ahora Añadir atributo e introduzca los detalles de clave y valor.
    Username=${user:preferredUsername}

    Attributes for access control

  4. Elija Guardar Cambios.

Inicie sesión en el portal de AWS acceso

Ahora accedemos al portal de AWS acceso con las credenciales del AWS Identity Center.
Para ello seguiremos los siguientes pasos:

  1. Abra la consola de AWS IAM Identity Center.
  2. En el panel de navegación elija Panel. En el resumen de la configuración, seleccione la URL del portal de AWS acceso.
  3. Inicie ahora sesión, introduciendo el usuario y la contraseña.
    AWS access portal sign-in
  4. Una vez dentro, navegue a la consola de Amazon EC2 y seleccione Instancias.
    EC2 Bastion Host
  5. Elija la instancia que actúa como host bastión y conéctese a ella usando la función EC2 Instance Connect. Para ello utilizaremos el usuario ec2-user, que es el único autorizado en base a la definición de la política de IAM creada anteriormente (dbaaccessec2).
    EC2 Instance Connect

No cierre la sesión de SSH.

Configuración de la base de datos Amazon RDS para PostgreSQL

Para conectarse a la instancia de base de datos mediante la autenticación de bases de datos de AWS IAM, deberemos crear una cuenta de usuario de base de datos.
Para ello puede seguir los pasos descritos en la sección “Autenticación de la base de datos” de la publicación Conéctese de forma segura a Amazon RDS para PostgreSQL con AWS Session Manager y autenticación de IAM.

Conectándose a la base de datos 

Una vez realizada la configuración ya estamos en condiciones de acceder a nuestra base de datos.

  1. Acceda al portal de AWS acceso y obtenga unas credenciales de acceso temporales.
    AWS access portal
  2. Desde la sesión de SSH que usted abrió en la sección anterior a través de Amazon EC2 Instance Connect, configure las variables de entorno de AWS:
    $ export AWS_ACCESS_KEY_ID="ASIAUYIYMMMMMM"
    $ export AWS_SECRET_ACCESS_KEY="ShMfTylznXF4MMMMMMMMEm4rIJZDIZh6BQwxJCla"
    $ export AWS_SESSION_TOKEN="IQoJb3JpZ2luX2VjEDoaMMMMMMMMMMMtM........11JyCd"

    Exporte también como variable de entorno, el nombre del host para conexión a la base de datos:

    $ export RDSHOST="<RDSHost>"
  3. Genere el token de autenticación de base de datos para el usuario de la base de datos, en nuestro caso dbajosanrno.
    $ export PGPASSWORD="$(aws rds generate-db-auth-token —hostname $RDSHOST —port 5432 —region <region> —username dbajosanrno)"
  4. Inicie ahora la conexión a la base de datos.
    Consulte la sección “Conéctese a su instancia de base de datos RDS para PostgreSQL con la autenticación de IAM” en la publicación mencionada anteriormente para obtener más detalles sobre los pasos a seguir.
  5. Verifique que el acceso funciona correctamente.
    psql (15.5, server 16.1) 

    WARNING: psql major version 15, server major version 16. 
             Some psql features might not work.
    SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, compression: off)
    Type "help" for help. 
    
    postgres=>

Verificación del paso de parámetros desde Active Directory a AWS Identity Center

Para asegurarnos de que los parámetros se están transmitiendo correctamente entre Active Directory y AWS Identity Center, podemos revisar la traza de auditoría de AWS CloudTrail. En esta traza, podremos observar que al invocar el método AssumeRoleWithSAML, se intercambia el parámetro clave-valor mapeado dentro del bloque de datos principalTags.

CloudTrail logs

El principalTag es el valor que se debe seleccionar en la política de acceso para que la política pueda identificar al usuario basado en el tag. Como se mostró anteriormente, en este caso se utiliza como key Username para que la política reconozca al usuario correspondiente.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "rds-db:connect"
            ],
            "Resource": [
                "arn:aws:rds-db:<region>:<account-id>:dbuser:<DBInstanceResourceID>/${aws:PrincipalTag/Username}"
            ]
        }
    ]
}

Aunque la selección de la key es flexible, ésta debe ser consistente y coincidir exactamente tanto en la configuración del mapeo en AWS Identity Center como en la definición de la política de acceso a la base de datos.

Eliminar los recursos innecesarios

Asegúrese de eliminar cualquier recurso que haya lanzado en su cuenta de AWS siguiendo los pasos anteriores.

Para eliminar las políticas administradas por el cliente de IAM (consola)

  1. Abra la consola de IAM.
  2. En el panel de navegación, elija Políticas.
  3. Seleccione el botón de radio situado junto a la política administrada por el cliente que desee eliminar. Puede utilizar el cuadro de búsqueda para filtrar la lista de políticas (dbaccesspost y dbaaccessec2 en nuestro ejemplo).
  4. Seleccione Acciones y Eliminar.
  5. Siga las instrucciones para confirmar que desea eliminar la política, y seleccione Eliminar.

Para eliminar un conjunto de permisos en Identity Center (consola)

  1. Abra la consola AWS IAM de Identity Center.
  2. En Permisos para varias cuentas, elija ahora Conjunto de permisos.
  3. Seleccione la casilla de verificación situada junto al nombre del conjunto que desea eliminar (en nuestro ejemplo, dbapostgresqlaccess).
  4. Seleccione Eliminar en la parte superior.
  5. En el cuadro de diálogo de confirmación, seleccione Eliminar.

Conclusión

En muchas compañías y organizaciones, un sistema central de autenticación basado en Active Directory (AD) es una solución común para gestionar usuarios. Active Directory actúa como el punto central donde los administradores controlan el perfil de los usuarios. Sin embargo, para una gestión completa de autenticación y autorización en aplicaciones y sistemas, es necesario integrar AD con todas las plataformas y servicios relevantes.

En esta publicación, hemos explorado cómo simplificar la gestión de la autenticación y autorización para bases de datos Amazon RDS PostgreSQL. Al integrar Active Directory con AWS IAM Identity Center y añadir usuarios directamente a la base de datos, logramos una solución que no solo optimiza el acceso, sino que también refuerza la seguridad. Este enfoque proporciona una integración robusta y sin fricciones, garantizando que la administración de usuarios sea segura, eficiente y acorde con las necesidades modernas de su organización.

Si tiene alguna pregunta, comentario o sugerencia, deje un comentario.


 Acerca de los autores

Jose Sánchez Romero es arquitecto senior de infraestructura de nube en Amazon Web Services con especialización en el diseño e implementación de soluciones para el sector de la energía. Atesora más de 20 años de experiencia en consultoría tecnológica.
Adrià Morgado es arquitecto senior de infraestructura de nube en Amazon Web Services. Está especializado en diseñar e implementar soluciones sólidas, escalables y seguras para clientes de grandes empresas.

Acerca del revisor

Alan Oberto Jiménez es un arquitecto y desarrollador de la nube especializado en ayudar a los clientes a diseñar, desarrollar y rediseñar aplicaciones que puedan aprovechar al máximo las ventajas de la nube de AWS.