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 di Aurora PostgreSQL
A partire dalle versioni 14.10 e 15.5 di Aurora PostgreSQL, il controllo degli accessi di Aurora PostgreSQL può essere gestito utilizzando AWS Directory Service per i gruppi di sicurezza Microsoft Active Directory (AD). Le versioni precedenti di Aurora PostgreSQL supportano l’autenticazione basata su Kerberos con AD solo per singoli utenti. 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
Assicurarsi di disporre di quanto segue prima di configurare l’estensione per i gruppi di sicurezza AD:
-
Configurazione dell’autenticazione Kerberos per cluster di database di PostgreSQL. Per ulteriori informazioni, consulta Configurazione dell’autenticazione Kerberos per cluster di database di PostgreSQL.
Nota
Per i gruppi di sicurezza AD, saltare 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_mappingal parametroshared_preload_librariese 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 ruolords_adpossono 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. -
Gestione di 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 personalizzato del cluster di database, consulta Gruppi di parametri per Amazon Aurora. Quindi, installare l’estensione pg_ad_mapping. Le procedure in questa sezione mostrano come fare. Puoi utilizzare la Console di gestione AWS o l’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 personalizzato del cluster di database.
Per configurare l’estensione pg_ad_mapping
Accedi alla Console di gestione AWS e apri la console Amazon RDS all’indirizzo https://console.aws.amazon.com/rds/
. -
Nel riquadro di navigazione, scegliere l’istanza di scrittura del cluster di database Aurora PostgreSQL.
-
Aprire 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.
-
Scegli il collegamento per aprire i parametri personalizzati associati al cluster database Aurora PostgreSQL.
-
Nel campo di ricerca Parametri, digita
shared_preper trovare il parametroshared_preload_libraries. -
Scegli Edit parameters (Modifica parametri) per accedere ai valori delle proprietà.
-
Aggiungi
pg_ad_mappingall’elenco nel campo Values (Valori). Utilizza una virgola per separare gli elementi nell’elenco di valori.
-
Riavviare l’istanza di scrittura del cluster di database Aurora PostgreSQL in modo da rendere effettiva la modifica al parametro
shared_preload_libraries. -
Quando l’istanza è disponibile, verifica che
pg_ad_mappingsia stato inizializzato. Utilizzarepsqlper connettersi all’istanza di scrittura del cluster di database Aurora PostgreSQL, quindi eseguire il comando seguente.SHOW shared_preload_libraries;shared_preload_libraries -------------------------- rdsutils,pg_ad_mapping (1 row) -
Con
pg_ad_mappinginizializzato, 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; -
Chiudi la sessione
psql.labdb=>\q
Per configurare pg_ad_mapping
Per configurare pg_ad_mapping utilizzando AWS CLI, chiamare l’operazione modify-db-parameter-group per aggiungere questo parametro al gruppo di parametri personalizzato, come mostrato nella procedura seguente.
-
Utilizza il seguente comando AWS CLI per aggiungere
pg_ad_mappingal parametroshared_preload_libraries.aws rds modify-db-parameter-group \ --db-parameter-group-namecustom-param-group-name\ --parameters "ParameterName=shared_preload_libraries,ParameterValue=pg_ad_mapping,ApplyMethod=pending-reboot" \ --regionaws-region -
Utilizzare il comando AWS CLI seguente per riavviare l’istanza di scrittura del cluster di database Aurora PostgreSQL in modo che pg_ad_mapping venga inizializzato.
aws rds reboot-db-instance \ --db-instance-identifierwriter-instance\ --regionaws-region -
Quando l’istanza è disponibile, verifica che
pg_ad_mappingsia stato inizializzato. Utilizzarepsqlper connettersi all’istanza di scrittura del cluster di database Aurora PostgreSQL, quindi eseguire 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; -
Chiudi la sessione
psqlin 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, utilizzare il cmdlet Get-ADGroup in un computer client Windows che fa parte del 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 SIDSID ----------------------------------------------- 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 come 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 roleaccounts-rolelogin;ALTER ROLEpostgres =>grant connect on databaseaccounts-dbtoaccounts-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. È consigliabile specificare pesi che riflettano le autorizzazioni/privilegi relativi dei singoli ruoli di database. 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
Utilizzare 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à principale di sicurezza AD, utilizzare 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 la creazione della sessione di database. Per ulteriori informazioni, consulta log_connections. L’output di ciò include l’identità dell’utente AD, come illustrato di seguito. Il PID di backend associato a questo output può quindi aiutare ad attribuire le operazioni 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)
Argomenti
| Parametro | Descrizione |
|---|---|
| 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. |
| weight | 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()
Argomenti
None
Tipo restituito
| Parametro | Descrizione |
|---|---|
| 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. |
| weight | 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
Chiamare 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)
Argomenti
| Parametro | Descrizione |
|---|---|
| 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. |
| weight | 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
Chiamare 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)