Configuración de autenticación Kerberos para instancias 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 una instancia de base de datos de PostgreSQL. Para configurar la autenticación Kerberos, siga los pasos que se indican a continuación:
Temas
- Paso 1: crear un directorio con AWS Managed Microsoft AD
- Paso 2: (opcional) crear una relación de confianza entre su Active Directory en las instalaciones y AWS Directory Service
- Paso 3: crear un rol de IAM para que Amazon RDS acceda a AWS Directory Service
- Paso 4: crear y configurar usuarios
- Paso 5: habilitar el tráfico entre VPC entre el directorio y la instancia de base de datos
- Paso 6: crear o modificar una instancia de base de datos de PostgreSQL
- Paso 7: crear usuarios de PostgreSQL para las entidades principales de Kerberos
- Paso 8: configurar un cliente de PostgreSQL
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 la instancia 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
-
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). -
Elija AWS Managed Microsoft AD. AWS Managed Microsoft AD es la única opción que se admite actualmente para usar con Amazon RDS.
-
Elija Siguiente.
-
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.
-
Elija Siguiente.
-
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 la instancia 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.
-
Elija Siguiente.
-
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).
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.
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 RDS 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 se conectan 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.
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.
Paso 3: crear un rol de IAM para que Amazon RDS acceda a AWS Directory Service
Para que Amazon RDS 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 RDS llame a AWS Directory Service.
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 RDS para PostgreSQL.
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
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 la instancia de base de datos en la misma VPC, omita este paso y continúe con Paso 6: crear o modificar una instancia 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
-
Configure las reglas de enrutamiento de VPC adecuadas para garantizar que el tráfico de red pueda fluir en ambos sentidos.
-
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.
-
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
-
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.
-
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. -
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 una instancia de base de datos de PostgreSQL
Cree o modifique una instancia de base de datos de PostgreSQL para usarla con su directorio. Puede utilizar la consola, la CLI o la API de RDS para asociar una instancia de base de datos con un directorio. Puede hacerlo de una de las siguientes formas:
-
Cree una nueva instancia de base de datos de PostgreSQL utilizando la consola, el comando de CLI create-db-instance o la operación CreateDBInstance de la API de RDS. Para obtener instrucciones, consulte Creación de una instancia de base de datos de Amazon RDS.
-
Modifique una instancia de base de datos de PostgreSQL existente utilizando la consola, el comando de CLI modify-db-instance o la operación ModifyDBInstance de la API de RDS. Para obtener instrucciones, consulte Modificación de una instancia de base de datos de Amazon RDS.
-
Restaure una instancia de base de datos de PostgreSQL a partir de una instantánea de base de datos utilizando la consola, el comando de CLI restore-db-instance-from-db-snapshot o la operación RestoreDBInstanceFromDBSnapshot de la API de RDS. Para obtener instrucciones, consulte Restauración a una instancia de base de datos.
-
Restaure una instancia de base de datos de PostgreSQL a partir de un punto en el tiempo utilizando la consola, el comando de CLI restore-db-instance-to-point-in-time o la operación RestoreDBInstanceToPointInTime de la API de RDS. Para obtener instrucciones, consulte Restauración de una instancia de base de datos a un momento especificado para Amazon RDS.
La autenticación de Kerberos solo es compatible con de clústeres de base de datos de PostgreSQL en una VPC. La instancia de DB puede estar en la misma VPC que el directorio o en una VPC diferente. La instancia 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 la instancia de base de datos pueda comunicarse con el directorio.
Si utiliza la consola para crear, modificar o restaurar una instancia de base de datos, elija Password and Kerberos authentication (Contraseña y 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.
Cuando utilice la AWS CLI, se necesitan los siguientes parámetros para que la instancia 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íticaAmazonRDSDirectoryServiceAccess
de IAM administrada.
Por ejemplo, el siguiente comando de CLI modifica una instancia de base de datos para que use un directorio.
aws rds modify-db-instance --db-instance-identifier
mydbinstance
--domain d-Directory-ID
--domain-iam-role-namerole-name
importante
Si modifica una instancia de base de datos para habilitar la autenticación de Kerberos, reinicie la instancia 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 instancia de base de datos de RDS para 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 la instancia de base de datos de RDS para 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
Use
psql
para conectarse a su punto de conexión de la instancia de base de datos del RDS para PostgreSQL mediantepsql
. En el siguiente ejemplo, se usa la cuenta depostgres
predeterminada del rol derds_superuser
.psql --host=
cluster-instance-1.111122223333
.aws-region
.rds.amazonaws.com --port=5432 --username=postgres --passwordCree 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
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 a la instancia de base de datos de RDS para 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 para MariaDB, MySQL, and PostgreSQL.
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.rproxy.goskope.com.cn = EXAMPLE.COM .amazon.com = EXAMPLE.COM