Utilizzo dei gruppi di sicurezza AD per il controllo degli accessi PostgreSQL di Aurora - 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 PostgreSQL di Aurora

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 singoli utenti. Ogni utente AD doveva essere assegnato 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:

Configurazione dell'estensione pg_ad_mapping

Aurora PostgreSQL fornisce ora un'pg_ad_mappingestensione per gestire la mappatura tra gruppi di sicurezza AD e ruoli DB nel cluster Aurora PostgreSQL. Per ulteriori informazioni sulle funzioni fornite da, vedere. pg_ad_mapping Utilizzo delle funzioni dell'estensione pg_ad_mapping

Per configurare l'pg_ad_mappingestensione sul cluster Aurora PostgreSQL DB, è necessario innanzitutto aggiungerla pg_ad_mapping alle librerie condivise nel gruppo di parametri del cluster DB personalizzato per il cluster Aurora PostgreSQL DB. Per informazioni sulla creazione di un gruppo di parametri del cluster DB personalizzato, consulta. Utilizzo di gruppi di parametri Successivamente, si installa l'pg_ad_mappingestensione. Le procedure in questa sezione mostrano come fare. È possibile utilizzare il 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 PostgreSQL DB sia associato a un gruppo di parametri del cluster DB personalizzato.

Per configurare l'estensione pg_ad_mapping
  1. Accedi AWS Management Console e apri la console Amazon RDS all'indirizzo https://console.aws.amazon.com/rds/.

  2. Nel riquadro di navigazione, scegli l'istanza Writer del cluster Aurora PostgreSQL DB.

  3. Apri la scheda Configurazione per l'istanza di masterizzazione del cluster Aurora PostgreSQL DB. 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 writer del cluster Aurora PostgreSQL DB in modo che la modifica al parametro abbia effetto. shared_preload_libraries

  9. Quando l'istanza è disponibile, verifica che pg_ad_mapping sia stato inizializzato. psqlUtilizzalo per connetterti all'istanza writer del cluster Aurora PostgreSQL DB, 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. È necessario creare l'estensione 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
Per configurare pg_ad_mapping

Per configurare pg_ad_mapping utilizzando il AWS CLI, chiamate 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. psqlUtilizzalo per connetterti all'istanza writer del cluster Aurora PostgreSQL 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;
  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'entità di sicurezza o un gruppo di sicurezza. Ogni volta che un gruppo o un account di sicurezza 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 cmdlet Get-ADGroup 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 del DB con il gruppo di sicurezza AD

È necessario fornire in modo esplicito i gruppi di sicurezza AD nel database come ruolo del database PostgreSQL. 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 l'autenticazione tramite password o IAM 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 PostgreSQL come accounts-role.

Gruppo di sicurezza AD Ruolo DB PosgreSQL
gruppo di conti conti-ruolo

Quando si esegue la mappatura del ruolo DB con il gruppo di sicurezza AD, è necessario assicurarsi che il ruolo DB 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 PostgreSQL DB.

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

Per informazioni sul recupero del SID del gruppo di sicurezza AD, vedi. 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 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 di Aurora PostgreSQL DB.

Gruppo di sicurezza AD Ruolo DB PosgreSQL 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 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

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

Utilizzo delle funzioni dell'estensione pg_ad_mapping

pg_ad_mappingl'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 SID del gruppo Active Directory in 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 SID del gruppo Active Directory in 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)