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 SQL Postgree
Dalle versioni SQL 14.10 e 15.5 di Aurora Postgre, il controllo degli accessi di Aurora Postgre può essere gestito tramite SQL AWS Directory Service per gruppi di sicurezza Microsoft Active Directory (AD). Le versioni precedenti di Aurora Postgre SQL supportano l'autenticazione basata su Kerberos con AD solo per singoli utenti. Ogni utente AD doveva essere fornito in modo esplicito al cluster DB per ottenere l'accesso.
Invece di assegnare esplicitamente il provisioning di ogni utente AD al cluster DB in base alle esigenze aziendali, puoi 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 DB, ma si basano su requisiti aziendali e sono gestiti da un amministratore AD.
-
Gli amministratori di cluster DB creano ruoli DB in istanze DB in base ai requisiti aziendali. Questi ruoli DB possono avere autorizzazioni o privilegi diversi.
-
Gli amministratori di cluster DB configurano una mappatura dai gruppi di sicurezza AD ai ruoli DB per ogni cluster DB.
-
Gli utenti DB possono accedere ai cluster DB 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 AD Security:
-
Configura l'autenticazione Kerberos per i cluster SQL Postgree DB. Per ulteriori informazioni, consulta Configurazione dell'autenticazione Kerberos per i cluster Postgre DB. SQL
Nota
Per i gruppi di sicurezza AD, salta il Passaggio 7: Crea SQL utenti Postgre per i principali Kerberos in questa procedura di configurazione.
Gestione di un cluster DB in un dominio. Per ulteriori informazioni, vedere Gestione di un cluster DB in un dominio.
Configurazione dell'estensione pg_ad_mapping
Aurora Postgre fornisce ora SQL un'pg_ad_mapping
estensione per gestire la mappatura tra gruppi di sicurezza AD e ruoli DB nel cluster Aurora Postgre. SQL Per ulteriori informazioni sulle funzioni fornite da, vedere. pg_ad_mapping
Utilizzo delle funzioni dell'estensione pg_ad_mapping
Per configurare l'pg_ad_mapping
estensione sul cluster Aurora Postgre SQL DB, è necessario innanzitutto aggiungerla pg_ad_mapping
alle librerie condivise nel gruppo di parametri del cluster DB personalizzato per il cluster Aurora Postgre DB. SQL Per informazioni sulla creazione di un gruppo di parametri del cluster DB personalizzato, consulta. Successivamente, si installa l'pg_ad_mapping
estensione. Le procedure in questa sezione mostrano come fare. Puoi utilizzare il plugin AWS Management Console o il AWS CLI.
Per eseguire tutte queste attività, sono richieste autorizzazioni come il ruolo rds_superuser
.
I passaggi seguenti presuppongono che il cluster Aurora Postgre SQL DB sia associato a un gruppo di parametri del cluster DB personalizzato.
Per configurare l'estensione pg_ad_mapping
Accedi a AWS Management Console e apri la RDS console Amazon all'indirizzo https://console.aws.amazon.com/rds/
. -
Nel pannello di navigazione, scegli l'istanza Writer del cluster Aurora Postgre SQL DB.
-
Apri la scheda Configurazione per l'istanza del cluster writer Aurora Postgre SQL DB. Tra i dettagli dell'istanza, individua il collegamento Gruppo di parametri.
-
Scegli il link per aprire i parametri personalizzati associati al tuo cluster Aurora SQL Postgre DB.
-
Nel campo di ricerca Parametri, digita
shared_pre
per trovare il parametroshared_preload_libraries
. -
Scegli Edit parameters (Modifica parametri) per accedere ai valori delle proprietà.
-
Aggiungi
pg_ad_mapping
all'elenco nel campo Values (Valori). Utilizza una virgola per separare gli elementi nell'elenco di valori. Riavvia l'istanza writer del cluster Aurora SQL Postgre DB in modo che la modifica al
shared_preload_libraries
parametro abbia effetto.Quando l'istanza è disponibile, verifica che
pg_ad_mapping
sia stato inizializzato. Utilizzalopsql
per connetterti all'istanza writer del tuo cluster Aurora Postgre SQL DB, 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. È necessario creare l'estensione 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 usando il AWS CLI, si chiama l'modify-db-parameter-groupoperazione per aggiungere questo parametro nel gruppo di parametri personalizzato, come illustrato nella procedura seguente.
Utilizzate quanto segue AWS CLI comando da aggiungere
pg_ad_mapping
alshared_preload_libraries
parametro.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
-
Usa quanto segue AWS CLI comando per riavviare l'istanza writer del cluster Aurora SQL Postgre DB in modo che pg_ad_mapping sia inizializzato.
aws rds reboot-db-instance \ --db-instance-identifier
writer-instance
\ --regionaws-region
Quando l'istanza è disponibile, verifica che
pg_ad_mapping
sia stato inizializzato. Utilizzalopsql
per connetterti all'istanza writer del tuo cluster Aurora Postgre SQL DB, quindi esegui il comando seguente.SHOW shared_preload_libraries;
shared_preload_libraries -------------------------- rdsutils,pg_ad_mapping (1 row)
Con pg_ad_mapping inizializzato, ora puoi creare l'estensione.
CREATE EXTENSION pg_ad_mapping;
Chiudi la sessione in modo da poter utilizzare il
psql
AWS CLI.labdb=>
\q
Recupero del gruppo Active Directory in SID PowerShell
Un identificatore di sicurezza (SID) viene utilizzato per identificare in modo univoco un'entità di sicurezza o un gruppo di sicurezza. Ogni volta che un gruppo o un account di sicurezza viene creato in Active Directory, gli SID viene assegnato un. Per recuperare il gruppo di sicurezza AD SID da Active Directory, è possibile utilizzare il ADGroup cmdlet Get- 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 corrispondente. SID
L'esempio seguente restituisce il SID gruppo AD adgroup1
.
C:\Users\Admin>
Get-ADGroup -Identity adgroup1 | select SID
SID ----------------------------------------------- S-1-5-21-3168537779-1985441202-1799118680-1612
Mappatura del ruolo DB con il gruppo di sicurezza AD
È necessario fornire in modo esplicito i gruppi di sicurezza AD nel database come ruolo SQL Postgre DB. Un utente AD, che fa parte di almeno un gruppo di sicurezza AD assegnato, avrà accesso al database. Non dovresti concedere rds_ad role
al gruppo AD un ruolo DB basato sulla sicurezza. L'autenticazione Kerberos per il gruppo di sicurezza verrà attivata utilizzando il suffisso del nome di dominio come user1@example.com
. Questo ruolo DB non può utilizzare la password o IAM l'autenticazione per accedere al database.
Nota
Gli utenti AD che hanno un ruolo DB corrispondente nel database a cui è stato concesso il rds_ad
ruolo non possono accedere come parte del gruppo di sicurezza AD. Avranno accesso tramite il ruolo DB come utente individuale.
Ad esempio, accounts-group è un gruppo di sicurezza in AD in cui desideri fornire questo gruppo di sicurezza in Aurora Postgree come accounts-role. SQL
Gruppo di sicurezza AD | Ruolo Poster DB SQL |
---|---|
gruppo di conti | conti-ruolo |
Quando si esegue il mapping del ruolo DB con il gruppo di sicurezza AD, è necessario assicurarsi che il ruolo DB abbia l'LOGINattributo impostato e disponga dei CONNECT privilegi sul database di accesso richiesto.
postgres =>
alter role
accounts-role
login;ALTER ROLE
postgres =>
grant connect on databaseaccounts-db
toaccounts-role
;
L'amministratore può ora procedere alla creazione della mappatura tra il gruppo di sicurezza AD e il ruolo SQL Postgre DB.
admin=>
select pgadmap_set_mapping(
'accounts-group'
,'accounts-role'
,<SID>
,<Weight>
);
Per informazioni sul recupero del gruppo SID di sicurezza AD, vedi. Recupero del gruppo Active Directory in SID PowerShell
Potrebbero verificarsi casi in cui un utente AD appartiene a più gruppi, in tal caso, l'utente AD erediterà i privilegi del ruolo DB, a cui è stato assegnato il ruolo con il peso più elevato. Se i due ruoli hanno lo stesso peso, l'utente AD erediterà i privilegi del ruolo DB corrispondente alla mappatura aggiunta di recente. La raccomandazione è di specificare pesi che riflettano le autorizzazioni/privilegi relativi dei singoli ruoli DB. Più alti sono i permessi o i privilegi di un ruolo DB, maggiore è il peso che deve essere associato 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 DB di Aurora SQL Postgre.
Gruppo di sicurezza AD | Ruolo Poster DB SQL | Weight |
---|---|---|
gruppo di conti | conti-ruolo | 7 |
gruppo di vendita | ruolo di vendita | 10 |
gruppo di sviluppo | ruolo di sviluppo | 7 |
Nell'esempio seguente, user1
erediterà i privilegi di sales-role poiché ha il peso maggiore mentre user2
erediterà i privilegi di dev-role
come è stata creata la mappatura per questo ruolo, che hanno lo stesso peso di. accounts-role
accounts-role
Username | Appartenenza al gruppo di sicurezza |
---|---|
user1 | accounts-group sales-group |
user2 | gruppo di sviluppo accounts-group |
I comandi psql per stabilire, elencare e cancellare le mappature sono mostrati di seguito. Attualmente 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/controllo dell'identità degli utenti AD
Utilizza il comando seguente per determinare il ruolo del database ereditato dall'utente corrente o dalla 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 comando seguente:
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 registri di controllo. Il log_connections
parametro può essere abilitato per registrare l'istituzione della sessione DB. Per ulteriori informazioni, vedere log_connections. L'output a tale scopo include l'identità dell'utente AD, come illustrato di seguito. Il backend PID 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
L'ID Microsoft Entra noto come Azure Active Directory non è supportato.
Utilizzo delle funzioni dell'estensione pg_ad_mapping
pg_ad_mapping
l'estensione ha fornito supporto alle seguenti funzioni:
pgadmap_set_mapping
Questa funzione stabilisce la mappatura tra il gruppo di sicurezza AD e il ruolo del 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 una stringa nulla o vuota. |
db_role | Ruolo del database da mappare al gruppo AD specificato. Il valore non può essere una stringa nulla o 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 una stringa nulla o vuota. Per ulteriori informazioni, consulta Recupero del gruppo Active Directory in SID PowerShell. |
peso | Peso associato al ruolo del 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 del database. Può essere eseguita solo sull'istanza DB principale del cluster DB da un utente con 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 DB 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 una stringa nulla o vuota. Per ulteriori informazioni, vedere .accounts-role@example.com Recupero del gruppo Active Directory in SID PowerShell |
db_role | Ruolo del database da mappare al gruppo AD specificato. Il valore non può essere una stringa nulla o vuota. |
peso | Peso associato al ruolo del 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 una stringa nulla o vuota. |
Note per l'utilizzo
Chiama questa funzione per elencare tutte le mappature disponibili tra il gruppo di sicurezza AD e il ruolo DB.
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 utilizzando function. 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 del database da mappare al gruppo AD specificato. |
peso | Peso associato al ruolo del database. |
Se non viene fornito alcun argomento, tutte le mappature dei ruoli da gruppo AD a DB vengono ripristinate. È necessario fornire tutti gli argomenti o non specificarne nessuno.
Tipo restituito
None
Note per l'utilizzo
Chiama questa funzione per eliminare uno specifico gruppo AD nella mappatura dei ruoli del DB o per ripristinare tutte le mappature. Questa funzione può essere eseguita solo sull'istanza DB principale del cluster DB da un utente con privilegi. 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)