Utilizzo dei gruppi di sicurezza AD per il controllo degli accessi Aurora PostgreSQL - Amazon Aurora

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Utilizzo dei gruppi di sicurezza AD per il controllo degli accessi Aurora PostgreSQL

A partire dalle versioni Aurora PostgreSQL 14.10 e 15.5, il controllo degli accessi di Aurora PostgreSQL può essere gestito utilizzando Directory Service per i gruppi di sicurezza Microsoft Active Directory (AD). AWS Le versioni precedenti di Aurora PostgreSQL supportano l’autenticazione basata su Kerberos con AD solo per utenti singoli. Ogni utente AD doveva essere assegnato in modo esplicito al cluster di database per ottenere l’accesso.

Invece di effettuare in modo esplicito il provisioning di ciascun utente AD al cluster di database in base alle esigenze aziendali, è possibile sfruttare i gruppi di sicurezza AD come spiegato di seguito:

  • Gli utenti AD sono membri di vari gruppi di sicurezza AD in Active Directory. Questi non sono dettati dall’amministratore del cluster di database, ma si basano su requisiti aziendali e sono gestiti da un amministratore AD.

  • Gli amministratori dei cluster di database creano ruoli di database nelle istanze database in base ai requisiti aziendali. Questi ruoli di database possono avere autorizzazioni o privilegi diversi.

  • Gli amministratori dei cluster di database configurano una mappatura dai gruppi di sicurezza AD ai ruoli di database per ogni cluster di database.

  • Gli utenti di database possono accedere ai cluster di database utilizzando le proprie credenziali AD. L’accesso si basa sull’appartenenza al gruppo di sicurezza AD. Gli utenti AD ottengono o perdono automaticamente l’accesso in base all’appartenenza ai gruppi AD.

Prerequisiti

Assicurati di disporre di quanto segue prima di configurare l’estensione per i gruppi di sicurezza AD:

  • È possibile configurare l’autenticazione Kerberos per cluster di database PostgreSQL. Per ulteriori informazioni, consulta Setting up Kerberos authentication for PostgreSQL DB clusters.

    Nota

    Per i gruppi di sicurezza AD, salta il passaggio 7: Creare utenti PostgreSQL per i principali Kerberos in questa procedura di configurazione.

    Importante

    Se si abilitano i gruppi di sicurezza AD su un cluster Aurora PostgreSQL in cui è già abilitata l’autenticazione Kerberos, potrebbero verificarsi problemi di autenticazione. Ciò si verifica quando si aggiunge pg_ad_mapping al parametro shared_preload_libraries e si riavvia il database. Quando si utilizzano gli endpoint del cluster, i tentativi di accesso con un utente AD che non è un utente di database con il ruolo rds_ad possono avere esito negativo. Ciò può anche causare potenziali arresti anomali del motore. Per risolvere questo problema, disattivare e riattivare l’autenticazione Kerberos sul cluster. Questa soluzione alternativa è necessaria per le istanze esistenti ma non influisce sulle istanze create dopo aprile 2025.

  • È possibile gestire un cluster di database in un dominio. Per ulteriori informazioni, consulta Gestione di un cluster di database in un dominio.

Configurazione dell’estensione pg_ad_mapping

Aurora PostgreSQL fornisce ora un’estensione pg_ad_mapping per gestire la mappatura tra gruppi di sicurezza AD e ruoli di database nel cluster Aurora PostgreSQL. Per ulteriori informazioni sulle funzioni fornite da pg_ad_mapping, consulta Utilizzo delle funzioni dall’estensione pg_ad_mapping.

Per configurare l’estensione pg_ad_mapping sul cluster di database Aurora PostgreSQL, aggiungere innanzitutto pg_ad_mapping alle librerie condivise nel gruppo di parametri del cluster di database personalizzato per il cluster di database Aurora PostgreSQL. Per informazioni sulla creazione di un gruppo di parametri del cluster di database personalizzato, consulta Gruppi di parametri per Amazon Aurora. Quindi, installa l’estensione pg_ad_mapping. Le procedure in questa sezione mostrano come fare. È possibile utilizzare o il. Console di gestione AWS AWS CLI

Per eseguire tutte queste attività, sono richieste autorizzazioni come il ruolo rds_superuser.

I passaggi seguenti si basano sull’ipotesi che il cluster di database Aurora PostgreSQL sia associato a un gruppo di parametri del cluster di database personalizzato.

Come configurare l’estensione pg_ad_mapping
  1. Accedi a Console di gestione AWS e apri la console Amazon RDS all'indirizzo https://console.aws.amazon.com/rds/.

  2. Nel riquadro di navigazione, scegli l’istanza di scrittura del cluster di database Aurora PostgreSQL.

  3. Apri la scheda Configurazione per l’istanza di scrittura del cluster di database Aurora PostgreSQL. Tra i dettagli dell’istanza, individua il collegamento Gruppo di parametri.

  4. Scegli il collegamento per aprire i parametri personalizzati associati al cluster database Aurora PostgreSQL.

  5. Nel campo di ricerca Parametri, digita shared_pre per trovare il parametro shared_preload_libraries.

  6. Scegli Edit parameters (Modifica parametri) per accedere ai valori delle proprietà.

  7. Aggiungi pg_ad_mapping all’elenco nel campo Values (Valori). Utilizza una virgola per separare gli elementi nell’elenco di valori.

    Immagine del parametro shared_preload_libaries con pgAudit aggiunto.
  8. Riavvia l’istanza di scrittura del cluster di database Aurora PostgreSQL in modo da rendere effettiva la modifica al parametro shared_preload_libraries.

  9. Quando l’istanza è disponibile, verifica che pg_ad_mapping sia stato inizializzato. Utilizza psql per connettersi all’istanza di scrittura del cluster di database Aurora PostgreSQL, quindi esegui il comando seguente.

    SHOW shared_preload_libraries; shared_preload_libraries -------------------------- rdsutils,pg_ad_mapping (1 row)
  10. Con pg_ad_mapping inizializzato, puoi ora creare l’estensione. L’estensione deve essere creata dopo aver inizializzato la libreria per iniziare a utilizzare le funzioni fornite da questa estensione.

    CREATE EXTENSION pg_ad_mapping;
  11. Chiudi la sessione psql.

    labdb=> \q
Come configurare pg_ad_mapping

Per configurare pg_ad_mapping utilizzando il AWS CLI, richiama l'modify-db-parameter-groupoperazione per aggiungere questo parametro nel gruppo di parametri personalizzato, come illustrato nella procedura seguente.

  1. Utilizzate il AWS CLI comando seguente per aggiungere al parametro. pg_ad_mapping shared_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" \ --region aws-region
  2. Usa il AWS CLI comando seguente per riavviare l'istanza writer del cluster Aurora PostgreSQL DB in modo da inizializzare pg_ad_mapping.

    aws rds reboot-db-instance \ --db-instance-identifier writer-instance \ --region aws-region
  3. Quando l’istanza è disponibile, verifica che pg_ad_mapping sia stato inizializzato. Utilizza psql per connettersi all’istanza di scrittura del cluster di database Aurora PostgreSQL, quindi esegui il comando seguente.

    SHOW shared_preload_libraries; shared_preload_libraries -------------------------- rdsutils,pg_ad_mapping (1 row)

    Con pg_ad_mapping inizializzato, puoi ora creare l’estensione.

    CREATE EXTENSION pg_ad_mapping;
  4. Chiudi la sessione psql in modo da poter utilizzare AWS CLI.

    labdb=> \q

Recupero del SID del gruppo Active Directory in PowerShell

Un identificatore di sicurezza (SID) viene utilizzato per identificare in modo univoco un principale di sicurezza o un gruppo di sicurezza. Ogni volta che un gruppo di sicurezza o un account viene creato in Active Directory, gli viene assegnato un SID. Per recuperare il SID del gruppo di sicurezza AD da Active Directory, è possibile utilizzare il Get-ADGroup cmdlet dal computer client Windows che fa parte di quel dominio Active Directory. Il parametro Identity specifica il nome del gruppo Active Directory per ottenere il SID corrispondente.

L'esempio seguente restituisce il SID del gruppo AD. adgroup1

C:\Users\Admin> Get-ADGroup -Identity adgroup1 | select SID SID ----------------------------------------------- S-1-5-21-3168537779-1985441202-1799118680-1612

Mappatura del ruolo di database con il gruppo di sicurezza AD

È necessario eseguire il provisioning in modo esplicito dei gruppi di sicurezza AD nel database come ruolo di database PostgreSQL. Un utente AD, che fa parte di almeno un gruppo di sicurezza AD di cui è stato eseguito il provisioning, avrà accesso al database. Non è consigliabile concedere rds_ad role al ruolo di database basato sulla sicurezza del gruppo AD. L'autenticazione Kerberos per il gruppo di sicurezza verrà attivata utilizzando il suffisso del nome di dominio like. user1@example.com Questo ruolo di database non può utilizzare l’autenticazione tramite password o IAM per accedere al database.

Nota

Gli utenti AD che hanno un ruolo di database corrispondente nel database a cui è stato concesso il ruolo rds_ad non possono accedere come parte del gruppo di sicurezza AD. Avranno accesso tramite il ruolo di database come utente individuale.

Ad esempio, accounts-group è un gruppo di sicurezza in AD in cui si desidera eseguire il provisioning di questo gruppo di sicurezza in Aurora PostgreSQL come accounts-role.

Gruppo di sicurezza AD Ruolo di database di PostgreSQL
accounts-group accounts-role

Quando si esegue la mappatura del ruolo di database con il gruppo di sicurezza AD, è necessario assicurarsi che il ruolo di database abbia l’attributo LOGIN impostato e che disponga del privilegio CONNECT sul database di accesso richiesto.

postgres => alter role accounts-role login; ALTER ROLE postgres => grant connect on database accounts-db to accounts-role;

L’amministratore può ora procedere alla creazione della mappatura tra il gruppo di sicurezza AD e il ruolo di database di PostgreSQL.

admin=>select pgadmap_set_mapping('accounts-group', 'accounts-role', <SID>, <Weight>);

Per informazioni sul recupero del SID del gruppo di sicurezza AD, consulta Recupero del SID del gruppo Active Directory in PowerShell.

Potrebbero verificarsi casi in cui un utente AD appartiene a più gruppi; in tal caso, l’utente AD erediterà i privilegi del ruolo di database, di cui è stato eseguito il provisioning con il peso più elevato. Se i due ruoli hanno lo stesso peso, l’utente AD erediterà i privilegi del ruolo di database corrispondente alla mappatura aggiunta di recente. Si consiglia di specificare pesi che riflettano i ruoli relativi permissions/privileges ai singoli ruoli del DB. Maggiore è il livello di autorizzazioni o privilegi di un ruolo di database, maggiore sarà il peso da associare alla voce di mappatura. Ciò eviterà l’ambiguità di due mappature aventi lo stesso peso.

La tabella seguente mostra un esempio di mappatura dai gruppi di sicurezza AD ai ruoli di database di Aurora PostgreSQL.

Gruppo di sicurezza AD Ruolo di database di PostgreSQL Weight
accounts-group accounts-role 7
sales-group sales-role 10
dev-group dev-role 7

Nell’esempio seguente, user1 erediterà i privilegi di sales-role poiché ha il peso maggiore, mentre user2 erediterà i privilegi di dev-role poiché la mappatura per questo ruolo è stata creata dopo accounts-role, che ha lo stesso peso di accounts-role.

Username Appartenenza al gruppo di sicurezza
user1 accounts-group sales-group
user2 accounts-group dev-group

I comandi psql per stabilire, elencare e cancellare le mappature sono mostrati di seguito. Al momento non è possibile modificare una singola voce di mappatura. La voce esistente deve essere eliminata e la mappatura deve essere ricreata.

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)

Registrazione di log/audit dell’identità dell’utente AD

Utilizza il comando seguente per determinare il ruolo di database ereditato dall’utente corrente o di sessione:

postgres=>select session_user, current_user; session_user | current_user -------------+-------------- dev-role | dev-role (1 row)

Per determinare l’identità del principale di sicurezza AD, utilizza il seguente comando:

postgres=>select principal from pg_stat_gssapi where pid = pg_backend_pid(); principal ------------------------- user1@example.com (1 row)

Attualmente, l’identità dell’utente AD non è visibile nei log di audit. È possibile abilitare il parametro log_connections per registrare log della creazione della sessione di database. Per ulteriori informazioni, consulta log_connections. L’output risultante include l’identità dell’utente AD, come illustrato di seguito. Il PID di backend associato a questo output può quindi aiutare ad attribuire le azioni all’utente AD effettivo.

pgrole1@postgres:[615]:LOG: connection authorized: user=pgrole1 database=postgres application_name=psql GSS (authenticated=yes, encrypted=yes, principal=Admin@EXAMPLE.COM)

Limitazioni

  • Microsoft Entra ID noto come Azure Active Directory non è supportato.

Utilizzo delle funzioni dall’estensione pg_ad_mapping

L’estensione pg_ad_mapping ha fornito supporto alle seguenti funzioni:

pgadmap_set_mapping

Questa funzione stabilisce la mappatura tra il gruppo di sicurezza AD e il ruolo di database con un peso associato.

Sintassi

pgadmap_set_mapping( ad_group, db_role, ad_group_sid, weight)

Arguments (Argomenti)

Parametro Description
ad_group Nome del gruppo AD. Il valore non può essere null o una stringa vuota.
db_role Ruolo di database da mappare al gruppo AD specificato. Il valore non può essere null o una stringa vuota.
ad_group_sid Identificatore di sicurezza utilizzato per identificare in modo univoco il gruppo AD. Il valore inizia con ‘S-1-’ e non può essere null o una stringa vuota. Per ulteriori informazioni, consulta Recupero del SID del gruppo Active Directory in PowerShell.
peso Peso associato al ruolo di database. Il ruolo con il peso più elevato ha la precedenza quando l’utente è membro di più gruppi. Il valore predefinito del peso è 1.

Tipo restituito

None

Note per l’utilizzo

Questa funzione aggiunge una nuova mappatura dal gruppo di sicurezza AD al ruolo di database. Può essere eseguito solo sull’istanza database primaria del cluster di database da un utente con il privilegio rds_superuser.

Esempi

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

Questa funzione elenca le mappature tra il gruppo di sicurezza AD e il ruolo di database che sono state impostate utilizzando la funzione pgadmap_set_mapping.

Sintassi

pgadmap_read_mapping()

Arguments (Argomenti)

None

Tipo restituito

Parametro Description
ad_group_sid Identificatore di sicurezza utilizzato per identificare in modo univoco il gruppo AD. Il valore inizia con ‘S-1-’ e non può essere null o una stringa vuota. Per ulteriori informazioni, consulta Recupero del SID del gruppo Active Directory in PowerShell.accounts-role@example.com
db_role Ruolo di database da mappare al gruppo AD specificato. Il valore non può essere null o una stringa vuota.
peso Peso associato al ruolo di database. Il ruolo con il peso più elevato ha la precedenza quando l’utente è membro di più gruppi. Il valore predefinito del peso è 1.
ad_group Nome del gruppo AD. Il valore non può essere null o una stringa vuota.

Note per l’utilizzo

Chiama questa funzione per elencare tutte le mappature disponibili tra il gruppo di sicurezza AD e il ruolo di database.

Esempi

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

Questa funzione ripristina una o tutte le mappature impostate con la funzione pgadmap_set_mapping.

Sintassi

pgadmap_reset_mapping( ad_group_sid, db_role, weight)

Arguments (Argomenti)

Parametro Description
ad_group_sid Identificatore di sicurezza utilizzato per identificare in modo univoco il gruppo AD.
db_role Ruolo di database da mappare al gruppo AD specificato.
peso Peso associato al ruolo di database.

Se non vengono forniti argomenti, tutte le mappature dei gruppi AD ai ruoli di database vengono reimpostate. È necessario fornire tutti gli argomenti o nessuno.

Tipo restituito

None

Note per l’utilizzo

Chiama questa funzione per eliminare uno specifico gruppo AD nella mappatura dei ruoli di database o per ripristinare tutte le mappature. Questa funzione può essere eseguita solo sull’istanza database primaria del cluster di database da un utente con il privilegio rds_superuser.

Esempi

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)