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

Configurazione dell'estensione pg_ad_mapping

Aurora Postgre fornisce ora SQL un'pg_ad_mappingestensione 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_mappingestensione 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_mappingestensione. 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
  1. Accedi a AWS Management Console e apri la RDS console Amazon all'indirizzo https://console.aws.amazon.com/rds/.

  2. Nel pannello di navigazione, scegli l'istanza Writer del cluster Aurora Postgre SQL DB.

  3. 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.

  4. Scegli il link per aprire i parametri personalizzati associati al tuo cluster Aurora SQL Postgre DB.

  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 shared_preload_libaries parametro con aggiunta. pgAudit
  8. Riavvia l'istanza writer del cluster Aurora SQL Postgre DB in modo che la modifica al shared_preload_libraries parametro abbia effetto.

  9. Quando l'istanza è disponibile, verifica che pg_ad_mapping sia stato inizializzato. Utilizzalo psql 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)
  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 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.

  1. Utilizzate quanto segue AWS CLI comando da aggiungere pg_ad_mapping al shared_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" \ --region aws-region
  2. 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 \ --region aws-region
  3. Quando l'istanza è disponibile, verifica che pg_ad_mapping sia stato inizializzato. Utilizzalo psql 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;
  4. 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 database accounts-db to accounts-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_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 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)