Configuración de autenticación Kerberos para clústeres de base de datos de PostgreSQL - Amazon Aurora

Configuración de autenticación Kerberos para clústeres de base de datos de PostgreSQL

Utilice AWS Directory Service for Microsoft Active Directory (AWS Managed Microsoft AD) para configurar la autenticación Kerberos para un clúster de base de datos de PostgreSQL. Para configurar la autenticación Kerberos, siga los pasos que se indican a continuación:

Paso 1: crear un directorio con AWS Managed Microsoft AD

AWS Directory Service crea un directorio de Active Directory completamente administrado en la nube de AWS. Al crear un directorio de AWS Managed Microsoft AD, AWS Directory Service crea dos controladores de dominio y servidores DNS para usted. Los servidores de directorios se crean en diferentes subredes de una VPC. Esta redundancia ayuda a garantizar que su directorio permanezca accesible incluso si ocurre un error.

Cuando se crea un directorio de AWS Managed Microsoft AD, AWS Directory Service realiza las siguientes tareas en su nombre:

  • Configura un Active Directory dentro de la VPC.

  • Crea una cuenta de administrador del directorio con el nombre de usuario Admin y la contraseña especificada. Esta cuenta le permite administrar el directorio.

    importante

    Asegúrese de guardar esta contraseña. AWS Directory Service no almacena esta contraseña y no se puede recuperar ni restablecer.

  • Crea un grupo de seguridad para los controladores del directorio. El grupo de seguridad debe permitir la comunicación con el clúster de base de datos de PostgreSQL.

Al lanzar AWS Directory Service for Microsoft Active Directory, AWS crea una unidad organizativa (OU) que contiene todos los objetos del directorio. Esta unidad organizativa, que tiene el nombre de NetBIOS que introdujo al crear el directorio, se encuentra en la raíz del dominio. La raíz del dominio es propiedad de , que también se encarga de su administració AWS.

La cuenta Admin que se creó con el directorio de AWS Managed Microsoft AD dispone de permisos para realizar las actividades administrativas más habituales para la unidad organizativa:

  • Crear, actualizar o eliminar usuarios

  • Añadir recursos a su dominio, como servidores de archivos o de impresión y, a continuación, asignar permisos para esos recursos a usuarios dentro de la unidad organizativa

  • Crear unidades organizativas y contenedores adicionales

  • Delegar autoridad

  • Restaurar objetos eliminados de la papelera de reciclaje de Active Directory

  • Ejecute módulos de Active Directory y Domain Name Service (DNS) para Windows Powershell en el servicio web de Active Directory

La cuenta Admin también tiene derechos para realizar las siguientes actividades en todo el dominio:

  • Administrar configuraciones DNS (agregar, quitar o actualizar registros, zonas y programas de envío).

  • Ver logs de eventos DNS

  • Ver logs de eventos de seguridad

Para crear un directorio con AWS Managed Microsoft AD
  1. En el panel de navegación de la consola de AWS Directory Service, elija Directories (Directorios) y, a continuación, elija Set up Directory (Configurar directorio).

  2. Elija AWS Managed Microsoft AD. AWS Managed Microsoft AD es la única opción que se admite actualmente para usar con Amazon Aurora.

  3. Elija Siguiente.

  4. En la página Enter directory information (Especifique la información del directorio), facilite la siguiente información:

    Edición

    Elija la edición que se adapte a sus necesidades.

    Nombre de DNS del directorio

    El nombre completo del directorio, como por ejemplo corp.example.com.

    Nombre NetBIOS del directorio

    Un nombre abreviado del directorio opcional, como COR CORP.

    Descripción del directorio

    Descripción opcional del directorio.

    Contraseña de administrador

    Contraseña del administrador del directorio. Al crear el directorio, se crea también una cuenta de administrador con el nombre de usuario Admin y esta contraseña.

    La contraseña del administrador del directorio no puede contener la palabra "admin". La contraseña distingue entre mayúsculas y minúsculas y debe tener un mínimo de 864 caracteres y un máximo de 64. También debe contener al menos un carácter de tres de las siguientes categorías:

    • Letras minúsculas (a–z)

    • Letras mayúsculas (A–Z)

    • Números (0–9)

    • Caracteres no alfanuméricos (~!@#$%^&*_-+=`|\(){}[]:;"'<>,.?/)

    Confirm password

    Vuelva a escribir la contraseña de administrador.

    importante

    Asegúrese de guardar esta contraseña. AWS Directory Service no almacena esta contraseña y no se puede recuperar ni restablecer.

  5. Elija Siguiente.

  6. En la página Choose VPC and subnets (Elegir la VPC y las subredes), proporcione la información siguiente:

    VPC

    Elija la VPC del directorio. Puede crear el clúster de base de datos de PostgreSQL en esta misma VPC o en una VPC diferente.

    Subredes

    Elija las subredes de los servidores del directorio. Las dos subredes deben estar en diferentes zonas de disponibilidad.

  7. Elija Siguiente.

  8. Revise la información del directorio. Si es necesario realizar algún cambio, seleccione Previous (Anterior) y realizar los cambios. Cuando la información sea correcta, seleccione Create directory (Crear directorio).

    Detalles del directorio

La creación del directorio tarda varios minutos. Cuando se haya creado correctamente, el valor de Status (Estado) cambiará a Active (Activo).

Para ver información acerca de su directorio, seleccione el ID del directorio en la lista de directorios. Anote el valor de Directory ID (ID de directorio). Necesita este valor cuando cree o modifique su instancia de base de datos de PostgreSQL.

Imagen de página de detalles

Paso 2: (opcional) crear una relación de confianza entre su Active Directory en las instalaciones y AWS Directory Service

Si no planea usar su propio Microsoft Active Directory local, vaya a Paso 3: crear un rol de IAM para que Amazon Aurora acceda a AWS Directory Service.

Para obtener la autenticación Kerberos mediante Active Directory en las instalaciones, debe crear una relación de dominio de confianza entre Microsoft Active Directory en las instalaciones y el directorio AWS Managed Microsoft AD (creado en Paso 1: crear un directorio con AWS Managed Microsoft AD). La confianza puede ser unidireccional, donde el directorio AWS Managed Microsoft AD confía en Microsoft Active Directory local. La confianza también puede ser bidireccional, donde ambos Active Directories confían entre sí. Para obtener más información acerca de la configuración de relaciones de confianza con AWS Directory Service, consulte Cuándo crear una relación de confianza en la guía de administración de AWS Directory Service.

nota

Si utiliza Microsoft Active Directory en las instalaciones:

  • Los clientes de Windows deben conectarse con el nombre de dominio del AWS Directory Service en el punto de conexión en lugar de con rds.amazonaws.com. Para obtener más información, consulte Conexión a PostgreSQL con autenticación Kerberos.

  • Los clientes de Windows no pueden conectarse con utilizando punto de conexión personalizados de Aurora. Para obtener más información, consulte Administración de conexiones de Amazon Aurora.

  • Para bases de datos globales:

    • Los clientes de Windows solo pueden conectarse mediante los puntos de enlace de la instancia o los del clúster en la Región de AWS principal de la base de datos global.

    • Los clientes de Windows no pueden conectarse mediante los puntos de enlace del clúster en Regiones de AWS secundarias.

Asegúrese de que el nombre de dominio local de Microsoft Active Directory incluya un enrutamiento de sufijo DNS que corresponda a la relación de confianza recién creada. En la siguiente captura de pantalla, se muestra un ejemplo.

El enrutamiento DNS corresponde a la confianza creada

Paso 3: crear un rol de IAM para que Amazon Aurora acceda a AWS Directory Service

Para que Amazon Aurora llame a AWS Directory Service en su nombre, su cuenta de AWS se precisa un rol de IAM que utilice la política de IAM administrada AmazonRDSDirectoryServiceAccess. Este rol permite que Amazon Aurora llame a AWS Directory Service. (Tenga en cuenta que este rol de IAM es diferente para acceder a AWS Directory Service al rol de IAM utilizado para Autenticación de bases de datos de IAM ).

Cuando se crea una instancia de base de datos con la AWS Management Console y la cuenta de usuario de la consola tiene el permiso iam:CreateRole, la consola crea automáticamente el rol de IAM necesario. En este caso, el nombre del rol es rds-directoryservice-kerberos-access-role. De no ser así, debe crear el rol de IAM manualmente. Cuando cree este rol de IAM, elija Directory Service y asocie la política administrada de AWS AmazonRDSDirectoryServiceAccess a este.

A fin de obtener más información acerca de la creación de roles de IAM para un servicio, consulte Creación de un rol para delegar permisos a un servicio de AWS en la guía del usuario de IAM.

nota

El rol de IAM utilizado para la autenticación de Windows para RDS para Microsoft SQL Server no puede ser utilizado por Amazon Aurora.

Como alternativa al uso de la política administrada de AmazonRDSDirectoryServiceAccess, puede crear políticas con los permisos necesarios. En este caso, el rol de IAM debe tener la siguiente política de confianza de IAM.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": [ "directoryservice.rds.amazonaws.com", "rds.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }

El rol debe también tener la siguiente política de rol de IAM.

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "ds:DescribeDirectories", "ds:AuthorizeApplication", "ds:UnauthorizeApplication", "ds:GetAuthorizedApplicationDetails" ], "Effect": "Allow", "Resource": "*" } ] }

Paso 4: crear y configurar usuarios

Puede crear usuarios usando la herramienta Usuarios y equipos de Active Directory. Es una de las herramientas Active Directory Domain Services y Active Directory Lightweight Directory Services. Para obtener más información, consulte Agregar usuarios y equipos al dominio de Active Directory en la documentación de Microsoft. En este caso, los usuarios son individuos u otras entidades, como sus equipos, que forman parte del dominio y cuyas identidades se mantienen en el directorio.

Para crear usuarios en un directorio de AWS Directory Service, debe estar conectado a una instancia de Amazon EC2 con Windows que sea miembro del directorio de AWS Directory Service. Al mismo tiempo, debe iniciar sesión como usuario con privilegios para crear usuarios. Para obtener más información, consulte Crear un usuario en la Guía de administración de AWS Directory Service.

Paso 5: habilitar el tráfico entre VPC entre el directorio y la instancia de base de datos

Si prevé ubicar el directorio y el clúster de base de datos en la misma VPC, omita este paso y continúe con Paso 6: crear o modificar un clúster de base de datos de PostgreSQL.

Si tiene previsto ubicar el directorio y la instancia de base de datos en diferentes VPC, configure el tráfico entre VPC mediante la interconexión de VPC o AWSTransit Gateway.

El siguiente procedimiento permite el tráfico entre VPC mediante la interconexión de VPC. Siga las instrucciones de ¿Qué es una interconexión de VPC? en la Guía de interconexión de Amazon Virtual Private Cloud.

Para habilitar el tráfico entre VPC mediante la interconexión de VPC
  1. Configure las reglas de enrutamiento de VPC adecuadas para garantizar que el tráfico de red pueda fluir en ambos sentidos.

  2. Asegúrese de que el grupo de seguridad de la instancia de base de datos pueda recibir tráfico de entrada del grupo de seguridad del directorio.

  3. Asegúrese de que no haya una regla de lista de control de acceso (ACL) a la red para bloquear el tráfico.

Si una cuenta de AWS distinta es la propietaria del directorio, debe compartirlo.

Para compartir el directorio entre cuentas de AWS
  1. Comience a compartir el directorio con la cuenta de AWS en la que se creará la instancia de base de datos mediante las instrucciones de Tutorial: Uso compartido del directorio de AWS Managed Microsoft AD para realizar la unión al dominio de EC2 sin problemas en la Guía de administración de AWS Directory Service.

  2. Inicie sesión en la consola de AWS Directory Service utilizando la cuenta para la instancia de base de datos y asegúrese de que el dominio tiene el estado SHARED antes de continuar.

  3. Una vez iniciada sesión en la consola de AWS Directory Service utilizando la cuenta de la instancia de base de datos, anote el valor de Directory ID (ID de directorio). Utilice este identificador de directorio para unir la instancia de base de datos al dominio.

Paso 6: crear o modificar un clúster de base de datos de PostgreSQL

Cree o modifique un clúster de base de datos de PostgreSQL para usarla con su directorio. Puede utilizar la consola, la CLI o la API de RDS para asociar un clúster de base de datos con un directorio. Puede hacerlo de una de las siguientes formas:

La autenticación de Kerberos solo es compatible con instancias de base de datos de PostgreSQL en una VPC. El clúster de DB puede estar en la misma VPC que el directorio o en una VPC diferente. El clúster de base de datos debe usar un grupo de seguridad que permita el ingreso y la salida dentro de la VPC del directorio, de modo que el clúster de base de datos pueda comunicarse con el directorio.

nota

Actualmente, el clúster de base de datos de Aurora PostgreSQL no permite habilitar la autenticación Kerberos durante la migración desde RDS para PostgreSQL. Solo puede habilitar la autenticación Kerberos en un clúster de base de datos de Aurora PostgreSQL independiente.

Si utiliza la consola para crear, modificar o restaurar un clúster de base de datos, elija Kerberos authentication (Autenticación de Kerberos) en la sección Database authentication (Autenticación de base de datos). Luego, elija Browse Directory (Examinar directorio). Seleccione el directorio o elija Create a new directory (Crear un nuevo directorio) para utilizar Directory Service.

Elegir Kerberos para la autenticación e identificar el directorio que se va a utilizar.

Cuando utilice la AWS CLI, se necesitan los siguientes parámetros para que el clúster de base de datos pueda usar el directorio que ha creado:

  • Para el parámetro --domain, utilice el identificador de dominio (identificador "d-*") que se generó cuando creó el directorio.

  • Para el parámetro --domain-iam-role-name, utilice el rol que creó que usa la política AmazonRDSDirectoryServiceAccess de IAM administrada.

Por ejemplo, el siguiente comando de CLI modifica un clúster de base de datos para que use un directorio.

aws rds modify-db-cluster --db-cluster-identifier mydbinstance --domain d-Directory-ID --domain-iam-role-name role-name
importante

Si modifica un clúster de base de datos para habilitar la autenticación de Kerberos, reinicie el clúster de base de datos después de hacer el cambio.

Paso 7: crear usuarios de PostgreSQL para las entidades principales de Kerberos

En este punto, su clúster de base de datos de Aurora PostgreSQL se une al dominio AWS Managed Microsoft AD. Los usuarios que haya creado en el directorio en el Paso 4: crear y configurar usuarios deben configurarse como usuarios de la base de datos de PostgreSQL y tener privilegios para iniciar sesión en la base de datos. Para ello, inicie sesión como usuario de la base de datos con privilegios rds_superuser. Por ejemplo, si ha aceptado los valores predeterminados al crear el clúster de base de datos de Aurora PostgreSQL , utiliza postgres, tal como se muestra en los pasos siguientes.

Para crear usuarios de la base de datos de PostgreSQL para las entidades principales de Kerberos
  1. Use psql para conectarse a su punto de conexión de la instancia de base de datos del clúster de base de datos de Aurora PostgreSQL mediante psql. En el siguiente ejemplo, se usa la cuenta de postgres predeterminada del rol de rds_superuser.

    psql --host=cluster-instance-1.111122223333.aws-region.rds.amazonaws.com --port=5432 --username=postgres --password
  2. Cree un nombre de usuario de base de datos para cada entidad principal de Kerberos (nombre de usuario de Active Directory) al que desee otorgar acceso a la base de datos. Utilice el nombre de usuario canónico (identidad) tal como se define en la instancia de Active Directory, es decir, un alias en minúsculas (nombre de usuario en Active Directory) y el nombre en mayúsculas del dominio de Active Directory para ese nombre de usuario. El nombre de usuario de Active Directory es un usuario autenticado externamente, así que utilice comillas alrededor del nombre tal como se muestra a continuación.

    postgres=> CREATE USER "username@CORP.EXAMPLE.COM" WITH LOGIN; CREATE ROLE
  3. Otorgue el rol rds_ad al usuario de la base de datos.

    postgres=> GRANT rds_ad TO "username@CORP.EXAMPLE.COM"; GRANT ROLE

Cuando termine de crear todos los usuarios de PostgreSQL para sus identidades de usuario de Active Directory, los usuarios podrán acceder al clúster de base de datos de Aurora PostgreSQL con sus credenciales de Kerberos.

Es necesario que los usuarios de bases de datos que se autentican mediante Kerberos lo hagan desde máquinas de cliente que sean miembros del dominio de Active Directory.

Los usuarios de bases de datos a los que se les ha otorgado el rol rds_ad tampoco pueden tener el rol rds_iam. Esto se aplica también a las membresías anidadas. Para obtener más información, consulte Autenticación de bases de datos de IAM .

Configuración del clúster de base de datos de Aurora PostgreSQL para nombres de usuario que no distinguen mayúsculas de minúsculas

Las versiones 14.5, 13.8, 12.12 y 11.17 de Aurora PostgreSQL admiten el parámetro krb_caseins_users de PostgreSQL. Este parámetro admite nombres de usuario de Active Directory que no distinguen mayúsculas de minúsculas. De forma predeterminada, este parámetro está configurado en false, por lo que Aurora PostgreSQL interpreta los nombres de usuario con distinción entre mayúsculas y minúsculas. Este es el comportamiento predeterminado en todas las versiones anteriores de Aurora PostgreSQL. Sin embargo, puede establecer este parámetro en true en el grupo de parámetros del clúster de base de datos personalizado y permitir que su clúster de base de datos de Aurora PostgreSQL interprete los nombres de usuario sin distinguir mayúsculas de minúsculas. Considere la posibilidad de hacerlo para facilitar la vida a los usuarios de la base de datos, ya que a veces pueden escribir mal las mayúsculas y minúsculas de su nombre de usuario al autenticarse mediante Active Directory.

Para cambiar el parámetro krb_caseins_users, su clúster de base de datos de Aurora PostgreSQL debe utilizar un grupo de parámetros del clúster de base de datos personalizado. Para obtener más información acerca de cómo crear un grupo de parámetros del clúster de base de datos personalizado, consulte Working with parameter groups (Trabajar con grupos de parámetros).

Puede utilizar la AWS CLI o la AWS Management Console para cambiar la configuración. Para obtener más información, consulte Modificación de parámetros de un grupo de parámetros de clúster de base de datos.

Paso 8: configurar un cliente de PostgreSQL

Para configurar un cliente de PostgreSQL, siga los pasos siguientes:

  • Cree un archivo krb5.conf (o equivalente) para apuntar al dominio.

  • Verifique que el tráfico puede fluir entre el host cliente y AWS Directory Service. Use una utilidad de red como, por ejemplo, Netcat para lo siguiente:

    • Verificar el tráfico sobre DNS para el puerto 53.

    • Verificar el tráfico sobre TCP/UDP para el puerto 52 y para Kerberos, lo que incluye los puertos 88 y 464 para AWS Directory Service.

  • Verifique que el tráfico puede fluir entre el host cliente y la instancia de base de datos sobre el puerto de base de datos. Por ejemplo, utilice psql para conectarse y acceder a la base de datos.

A continuación, se muestra el contenido krb5.conf para AWS Managed Microsoft AD.

[libdefaults] default_realm = EXAMPLE.COM [realms] EXAMPLE.COM = { kdc = example.com admin_server = example.com } [domain_realm] .example.com = EXAMPLE.COM example.com = EXAMPLE.COM

A continuación, se muestra el contenido krb5.conf de ejemplo para un Microsoft Active Directory local.

[libdefaults] default_realm = EXAMPLE.COM [realms] EXAMPLE.COM = { kdc = example.com admin_server = example.com } ONPREM.COM = { kdc = onprem.com admin_server = onprem.com } [domain_realm] .example.com = EXAMPLE.COM example.com = EXAMPLE.COM .onprem.com = ONPREM.COM onprem.com = ONPREM.COM .rds.amazonaws.com = EXAMPLE.COM .amazonaws.com.cn = EXAMPLE.COM .amazon.com = EXAMPLE.COM