Uso de grupos de seguridad de AD para el control de acceso de Aurora PostgreSQL
A partir de las versiones 14.10 y 15.5 de Aurora PostgreSQL, el control de acceso de Aurora PostgreSQL se puede administrar mediante AWS Directory Service para los grupos de seguridad de Microsoft Active Directory (AD). Las versiones anteriores de Aurora PostgreSQL admiten la autenticación basada en Kerberos con AD solo para usuarios individuales. Cada usuario de AD tenía que estar aprovisionado de forma explícita en el clúster de base de datos para poder obtener el acceso.
En lugar de aprovisionar explícitamente a cada usuario de AD en un clúster de base de datos en función de las necesidades empresariales, puede aprovechar los grupos de seguridad de AD, tal como se explica a continuación:
Los usuarios de AD son miembros de varios grupos de seguridad de AD en un Active Directory. No los determina el administrador del clúster de base de datos, sino que se basan en los requisitos empresariales y los gestiona un administrador de AD.
-
Los administradores de clústeres de bases de datos crean roles de base de datos en las instancias de base de datos en función de los requisitos empresariales. Estos roles de base de datos pueden tener permisos o privilegios diferentes.
-
Los administradores de clústeres de bases de datos configuran un mapeo entre los grupos de seguridad de AD y los roles de base de datos por clúster de base de datos.
-
Los usuarios de bases de datos pueden acceder a los clústeres de bases de datos con sus credenciales de AD. El acceso se basa en la pertenencia a un grupo de seguridad de AD. Los usuarios de AD obtienen o pierden el acceso automáticamente en función de su pertenencia a grupos de AD.
Requisitos previos
Asegúrese de tener lo siguiente antes de configurar la extensión para los grupos de seguridad de AD:
-
Configuración de la autenticación Kerberos para clústeres de base de datos de PostgreSQL. Para obtener más información, consulte Configuración de autenticación Kerberos para clústeres de base de datos de PostgreSQL.
nota
Para los grupos de seguridad de AD, omita el paso 7: creación de usuarios de PostgreSQL para las entidades principales de Kerberos de este procedimiento de configuración.
Administración de un clúster de base de datos en un dominio Para obtener más información, consulte Administración de un clúster de base de datos en un dominio.
Configuración de la extensión pg_ad_mapping
Aurora PostgreSQL ahora ofrece una extensión pg_ad_mapping
para administrar el mapeo entre los grupos de seguridad de AD y los roles de base de datos en el clúster de Aurora PostgreSQL. Para obtener más información sobre las funciones que proporciona pg_ad_mapping
, consulte Uso de las funciones de la extensión pg_ad_mapping.
Para configurar la extensión pg_ad_mapping
en el clúster de base de datos de Aurora PostgreSQL, primero debe agregar pg_ad_mapping
a las bibliotecas compartidas en el grupo de parámetros del clúster de base de datos personalizado para su clúster de base de datos de Aurora PostgreSQL. Para obtener información acerca de cómo crear un grupo de parámetros del clúster de base de datos personalizado, consulte Grupos de parámetros para Amazon Aurora. A continuación, instale la extensión pg_ad_mapping
. Los procedimientos de esta sección le muestran cómo hacerlo. Puede utilizar la AWS Management Console o la AWS CLI.
Debe tener permisos como el rol rds_superuser
para realizar todas estas tareas.
En los pasos siguientes se supone que su clúster de base de datos de Aurora PostgreSQL está asociado a un grupo de parámetros de clúster de base de datos personalizado.
Para configurar la extensión pg_ad_mapping
Inicie sesión en la AWS Management Console y abra la consola de Amazon RDS en https://console.aws.amazon.com/rds/
. -
En el panel de navegación, elija la instancia del escritor del clúster de base de datos de Aurora PostgreSQL.
-
Abra la pestaña Configuración para su instancia de escritor del clúster de base de datos de Aurora PostgreSQL. Entre los detalles de la instancia, busque el enlace del grupo de parámetros.
-
Elija el enlace para abrir los parámetros personalizados asociados al clúster de base de datos de Aurora PostgreSQL.
-
En el campo de búsqueda Parametes (Parámetros), escriba
shared_pre
para buscar el parámetroshared_preload_libraries
. -
Seleccione Edit parameters (Editar parámetros) para acceder a los valores de las propiedades.
-
Añada
pg_ad_mapping
a la lista en el campo Values (Valores). Utilice una coma para separar los elementos de la lista de valores. Reinicie la instancia de escritor de su clúster de base de datos de Aurora PostgreSQL para que se aplique el cambio en el parámetro
shared_preload_libraries
.Cuando la instancia esté disponible, verifique si se ha inicializado
pg_ad_mapping
. Usepsql
para conectarse a la instancia de escritor de su clúster de bases de datos de Aurora PostgreSQL y, a continuación, ejecute el siguiente comando.SHOW shared_preload_libraries;
shared_preload_libraries -------------------------- rdsutils,pg_ad_mapping (1 row)
Con
pg_ad_mapping
inicializado, ahora ya puede crear la extensión. Debe crear la extensión después de inicializar la biblioteca para empezar a utilizar las funciones que proporciona la extensión.CREATE EXTENSION pg_ad_mapping;
Cierre la sesión de
psql
.labdb=>
\q
Para configurar pg_ad_mapping
Para configurar pg_ad_mapping mediante la AWS CLI, llame a la operación modify-db-parameter-group para agregar este parámetro a su grupo de parámetros personalizado, tal como se muestra en el siguiente procedimiento.
Utilice el siguiente comando AWS CLI para añadir
pg_ad_mapping
al parámetroshared_preload_libraries
.aws rds modify-db-parameter-group \ --db-parameter-group-name
custom-param-group-name
\ --parameters "ParameterName=shared_preload_libraries,ParameterValue=pg_ad_mapping,ApplyMethod=pending-reboot" \ --regionaws-region
-
Utilice el siguiente comando AWS CLI para reiniciar la instancia de escritura del clúster de base de datos de Aurora PostgreSQL para que se inicialice la biblioteca pg_ad_mapping.
aws rds reboot-db-instance \ --db-instance-identifier
writer-instance
\ --regionaws-region
Cuando la instancia esté disponible, puede verificar si
pg_ad_mapping
se ha inicializado. Usepsql
para conectarse a la instancia de escritor de su clúster de bases de datos de Aurora PostgreSQL y, a continuación, ejecute el siguiente comando.SHOW shared_preload_libraries;
shared_preload_libraries -------------------------- rdsutils,pg_ad_mapping (1 row)
Con pg_ad_mapping inicializado, ahora ya puede crear la extensión.
CREATE EXTENSION pg_ad_mapping;
Cierre la sesión de
psql
para poder utilizar AWS CLI.labdb=>
\q
Recuperación del SID del grupo de Active Directory en PowerShell
Se utiliza un identificador de seguridad (SID) para identificar de forma exclusiva una entidad principal de seguridad o un grupo de seguridad. Siempre que se crea un grupo o una cuenta de seguridad en Active Directory, se le asigna un SID. Para obtener el SID del grupo de seguridad de AD desde Active Directory, puede usar el cmdlet Get-ADGroup desde un equipo cliente Windows que esté unido a ese dominio de Active Directory. El parámetro Identity especifica el nombre del grupo de Active Directory para obtener el SID correspondiente.
En el siguiente ejemplo, se devuelve el SID del grupo de AD adgroup1
.
C:\Users\Admin>
Get-ADGroup -Identity adgroup1 | select SID
SID ----------------------------------------------- S-1-5-21-3168537779-1985441202-1799118680-1612
Asignación del rol de base de datos al grupo de seguridad de AD
Debe aprovisionar explícitamente los grupos de seguridad de AD en la base de datos como un rol de base de datos de PostgreSQL. Un usuario de AD que forme parte de al menos un grupo de seguridad de AD aprovisionado tendrá acceso a la base de datos. No debe conceder rds_ad role
a un rol de base de datos basado en un grupo de seguridad de AD. La autenticación Kerberos para el grupo de seguridad se activará mediante el sufijo del nombre de dominio, como user1@example.com
. Este rol de base de datos no puede usar la autenticación por contraseña o IAM para acceder a la base de datos.
nota
Los usuarios de AD que tengan un rol de base de datos correspondiente en la base de datos y el rol rds_ad
concedido no pueden iniciar sesión como parte del grupo de seguridad de AD. Obtendrán acceso a través del rol de base de datos como usuarios individuales.
Por ejemplo, accounts-group es un grupo de seguridad de AD y querría aprovisionar este grupo de seguridad en Aurora PostgreSQL como accounts-role.
Grupo de seguridad de AD | Rol de base de datos de PosgreSQL |
---|---|
accounts-group | accounts-role |
Al asignar el rol de base de datos al grupo de seguridad de AD, debe asegurarse de que el rol de la base de datos tenga el atributo LOGIN establecido y el privilegio CONNECT en la base de datos de inicio de sesión requerida.
postgres =>
alter role
accounts-role
login;ALTER ROLE
postgres =>
grant connect on databaseaccounts-db
toaccounts-role
;
El administrador ahora puede proceder a crear la asignación entre el grupo de seguridad de AD y el rol de base de datos de PostgreSQL.
admin=>
select pgadmap_set_mapping(
'accounts-group'
,'accounts-role'
,<SID>
,<Weight>
);
Para obtener información sobre cómo recuperar el SID del grupo de seguridad de AD, consulte Recuperación del SID del grupo de Active Directory en PowerShell.
Puede haber casos en los que un usuario de AD pertenezca a varios grupos; en ese caso, el usuario de AD heredará los privilegios del rol de la base de datos, que se aprovisionó con una mayor ponderación. Si los dos roles tienen la misma ponderación, el usuario de AD heredará los privilegios del rol de base de datos correspondiente a la asignación que se efectuase más recientemente. La recomendación es especificar ponderaciones que reflejen los permisos y privilegios relativos de los roles de base de datos individuales. Cuanto mayores sean los permisos o privilegios de un rol de base de datos, mayor será la ponderación que se le deberá asociar a la entrada de la asignación. Esto evitará la ambigüedad de que dos asignaciones tengan la misma ponderación.
En la siguiente tabla se muestra un ejemplo de asignación de grupos de seguridad de AD a roles de base de datos de Aurora PostgreSQL.
Grupo de seguridad de AD | Rol de base de datos de PosgreSQL | Peso |
---|---|---|
accounts-group | accounts-role | 7 |
sales-group | sales-role | 10 |
dev-group | dev-role | 7 |
En el siguiente ejemplo, user1
heredará los privilegios de sales-role, ya que tiene mayor ponderación, mientras que user2
heredará los privilegios de dev-role
, ya que la asignación para este rol se creó después de accounts-role
, que comparte la misma ponderación que accounts-role
.
Nombre de usuario | Pertenencia al grupo de seguridad |
---|---|
user1 | accounts-group sales-group |
user2 | accounts-group dev-group |
A continuación se muestran los comandos psql para establecer, enumerar y borrar las asignaciones. En la actualidad, no es posible modificar una única entrada de asignación. Es necesario eliminar la entrada existente y volver a crear la asignación.
admin=>
select pgadmap_set_mapping('accounts-group', 'accounts-role', 'S-1-5-67-890', 7);
admin=>
select pgadmap_set_mapping('sales-group', 'sales-role', 'S-1-2-34-560', 10);
admin=>
select pgadmap_set_mapping('dev-group', 'dev-role', 'S-1-8-43-612', 7);
admin=>
select * from pgadmap_read_mapping();
ad_sid | pg_role | weight | ad_grp -------------+----------------+--------+--------------- S-1-5-67-890 | accounts-role | 7 | accounts-group S-1-2-34-560 | sales-role | 10 | sales-group S-1-8-43-612 | dev-role | 7 | dev-group (3 rows)
Registro/auditoría de la identidad de los usuarios de AD
Utilice el siguiente comando para determinar el rol de base de datos heredado por el usuario actual o de la sesión:
postgres=>
select session_user, current_user;
session_user | current_user -------------+-------------- dev-role | dev-role (1 row)
Para determinar la identidad de la entidad principal de seguridad de AD, utilice el siguiente comando:
postgres=>
select principal from pg_stat_gssapi where pid = pg_backend_pid();
principal ------------------------- user1@example.com (1 row)
Actualmente, la identidad del usuario de AD no está visible en los registros de auditoría. El parámetro log_connections
se puede habilitar para registrar el establecimiento de la sesión de base de datos. Consulte log_connections para obtener más información. El resultado de esto incluye la identidad del usuario de AD, como se muestra a continuación. A continuación, el PID del backend asociado a este resultado puede ayudar a atribuir las acciones al usuario real de AD.
pgrole1@postgres:[615]:LOG: connection authorized: user=pgrole1 database=postgres application_name=psql GSS (authenticated=yes, encrypted=yes, principal=Admin@EXAMPLE.COM)
Limitaciones
El ID de Microsoft Entra conocido como Azure Active Directory no es compatible.
Uso de las funciones de la extensión pg_ad_mapping
La extensión pg_ad_mapping
ofrece compatibilidad con las siguientes funciones:
pgadmap_set_mapping
Esta función establece la asignación entre el grupo de seguridad de AD y el rol de base de datos con una ponderación asociada.
Sintaxis
pgadmap_set_mapping(
ad_group,
db_role,
ad_group_sid,
weight)
Argumentos
Parámetro | Descripción |
---|---|
ad_group | Nombre del grupo de AD. El valor no puede ser una cadena vacía o nula. |
db_role | El rol de la base de datos que se asignará al grupo de AD especificado. El valor no puede ser una cadena vacía o nula. |
ad_group_sid | Identificador de seguridad que se utiliza para identificar de forma exclusiva al grupo de AD. El valor comienza por 'S-1-' y no puede ser una cadena vacía o nula. Para obtener más información, consulte Recuperación del SID del grupo de Active Directory en PowerShell. |
weight | Ponderación asociada al rol de la base de datos. El rol con mayor ponderación tiene prioridad cuando el usuario es miembro de varios grupos. El valor de ponderación predeterminado es 1. |
Tipo de retorno
None
Notas de uso
Esta función agrega una nueva asignación del grupo de seguridad de AD al rol de la base de datos. Solo lo puede ejecutar en la instancia de base de datos principal del clúster de base de datos un usuario que tenga el privilegio rds_superuser.
Ejemplos
postgres=>
select pgadmap_set_mapping('accounts-group','accounts-role','S-1-2-33-12345-67890-12345-678',10);pgadmap_set_mapping (1 row)
pgadmap_read_mapping
Esta función muestra las asignaciones entre el grupo de seguridad de AD y el rol de base de datos que se establecieron mediante la función pgadmap_set_mapping
.
Sintaxis
pgadmap_read_mapping()
Argumentos
None
Tipo de retorno
Parámetro | Descripción |
---|---|
ad_group_sid | Identificador de seguridad que se utiliza para identificar de forma exclusiva al grupo de AD. El valor comienza por 'S-1-' y no puede ser una cadena vacía o nula. Para obtener más información, consulte Recuperación del SID del grupo de Active Directory en PowerShell.accounts-role@example.com |
db_role | El rol de la base de datos que se asignará al grupo de AD especificado. El valor no puede ser una cadena vacía o nula. |
weight | Ponderación asociada al rol de la base de datos. El rol con mayor ponderación tiene prioridad cuando el usuario es miembro de varios grupos. El valor de ponderación predeterminado es 1. |
ad_group | Nombre del grupo de AD. El valor no puede ser una cadena vacía o nula. |
Notas de uso
Llame a esta función para obtener una lista de todas las asignaciones disponibles entre el grupo de seguridad de AD y el rol de base de datos.
Ejemplos
postgres=>
select * from pgadmap_read_mapping();ad_sid | pg_role | weight | ad_grp ------------------------------------+---------------+--------+------------------ S-1-2-33-12345-67890-12345-678 | accounts-role | 10 | accounts-group (1 row) (1 row)
pgadmap_reset_mapping
Esta función restablece una o todas las asignaciones que se establecieron mediante la función pgadmap_set_mapping
.
Sintaxis
pgadmap_reset_mapping(
ad_group_sid,
db_role,
weight)
Argumentos
Parámetro | Descripción |
---|---|
ad_group_sid | Identificador de seguridad que se utiliza para identificar de forma exclusiva al grupo de AD. |
db_role | El rol de la base de datos que se asignará al grupo de AD especificado. |
weight | Ponderación asociada al rol de la base de datos. |
Si no se proporcionan argumentos, se restablecen todas las asignaciones de roles de base de datos de los grupos de AD. Es necesario proporcionar todos los argumentos o ninguno.
Tipo de retorno
None
Notas de uso
Llame a esta función para eliminar la asignación de roles de un grupo de AD específico a la base de datos o para restablecer todas las asignaciones. Esta función solo la puede ejecutar en la instancia de base de datos principal del clúster de base de datos un usuario que tenga el privilegio rds_superuser
.
Ejemplos
postgres=>
select * from pgadmap_read_mapping();
ad_sid | pg_role | weight | ad_grp --------------------------------+--------------+-------------+------------------- S-1-2-33-12345-67890-12345-678 | accounts-role| 10 | accounts-group S-1-2-33-12345-67890-12345-666 | sales-role | 10 | sales-group (2 rows)
postgres=>
select pgadmap_reset_mapping('S-1-2-33-12345-67890-12345-678', 'accounts-role', 10);
pgadmap_reset_mapping (1 row)
postgres=>
select * from pgadmap_read_mapping();
ad_sid | pg_role | weight | ad_grp --------------------------------+--------------+-------------+--------------- S-1-2-33-12345-67890-12345-666 | sales-role | 10 | sales-group (1 row)
postgres=>
select pgadmap_reset_mapping();
pgadmap_reset_mapping (1 row)
postgres=>
select * from pgadmap_read_mapping();
ad_sid | pg_role | weight | ad_grp --------------------------------+--------------+-------------+-------------- (0 rows)