Verwenden von AD-Sicherheitsgruppen für die Aurora PostgreSQL-Zugriffskontrolle - Amazon Aurora

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Verwenden von AD-Sicherheitsgruppen für die Aurora PostgreSQL-Zugriffskontrolle

Ab den Versionen Aurora PostgreSQL 14.10 und 15.5 kann die Aurora PostgreSQL-Zugriffskontrolle mithilfe des AWS Directory Service für Microsoft Active Directory (AD) -Sicherheitsgruppen verwaltet werden. Frühere Versionen von Aurora PostgreSQL unterstützen die Kerberos-basierte Authentifizierung mit AD nur für einzelne Benutzer. Jeder AD-Benutzer musste explizit für den DB-Cluster bereitgestellt werden, um Zugriff zu erhalten.

Anstatt jeden AD-Benutzer je nach Geschäftsanforderungen explizit für den DB-Cluster bereitzustellen, können Sie AD-Sicherheitsgruppen wie unten beschrieben nutzen:

  • AD-Benutzer sind Mitglieder verschiedener AD-Sicherheitsgruppen in einem Active Directory. Diese werden nicht vom DB-Clusteradministrator vorgegeben, sondern basieren auf Geschäftsanforderungen und werden von einem AD-Administrator verwaltet.

  • DB-Cluster-Administratoren erstellen DB-Rollen in DB-Instances auf der Grundlage von Geschäftsanforderungen. Diese DB-Rollen können unterschiedliche Berechtigungen oder Privilegien haben.

  • DB-Cluster-Administratoren konfigurieren eine Zuordnung von AD-Sicherheitsgruppen zu DB-Rollen auf DB-Cluster-Basis.

  • DB-Benutzer können mit ihren AD-Anmeldeinformationen auf DB-Cluster zugreifen. Der Zugriff basiert auf der Mitgliedschaft in einer AD-Sicherheitsgruppe. AD-Benutzer erhalten oder verlieren automatisch Zugriff auf der Grundlage ihrer AD-Gruppenmitgliedschaft.

Voraussetzungen

Stellen Sie sicher, dass Sie über Folgendes verfügen, bevor Sie die Erweiterung für AD-Sicherheitsgruppen einrichten:

Einrichtung der Erweiterung pg_ad_mapping

Aurora PostgreSQL bietet jetzt eine pg_ad_mapping Erweiterung zur Verwaltung der Zuordnung zwischen AD-Sicherheitsgruppen und DB-Rollen im Aurora PostgreSQL-Cluster. Weitere Hinweise zu den Funktionen von finden Sie unter. pg_ad_mapping Verwenden von Funktionen aus der Erweiterung pg_ad_mapping

Um die pg_ad_mapping Erweiterung auf Ihrem Aurora PostgreSQL-DB-Cluster einzurichten, fügen Sie sie zunächst pg_ad_mapping zu den gemeinsam genutzten Bibliotheken in der benutzerdefinierten DB-Cluster-Parametergruppe für Ihren Aurora PostgreSQL-DB-Cluster hinzu. Hinweise zum Erstellen einer benutzerdefinierten DB-Cluster-Parametergruppe finden Sie unter. Arbeiten mit Parametergruppen Als Nächstes installieren Sie die pg_ad_mapping Erweiterung. Die Schritte in diesem Abschnitt veranschaulichen die Vorgehensweise. Sie können das AWS Management Console oder das verwenden AWS CLI.

Sie müssen über Berechtigungen als rds_superuser-Rolle verfügen, um alle diese Aufgaben ausführen zu können.

Bei den folgenden Schritten wird davon ausgegangen, dass Ihr Aurora PostgreSQL-DB-Cluster einer benutzerdefinierten DB-Cluster-Parametergruppe zugeordnet ist.

Um die Erweiterung einzurichten pg_ad_mapping
  1. Melden Sie sich bei der Amazon RDS-Konsole an AWS Management Console und öffnen Sie sie unter https://console.aws.amazon.com/rds/.

  2. Wählen Sie im Navigationsbereich die Writer-Instance Ihres Aurora PostgreSQL-DB-Clusters aus.

  3. Öffnen Sie die Registerkarte Konfiguration für Ihre Aurora PostgreSQL DB-Cluster-Writer-Instance. Suchen Sie in den Instance-Details den Link Parameter group (Parametergruppe).

  4. Wählen Sie den Link aus, um die benutzerdefinierten Parameter zu öffnen, die Ihrem DB-Cluster von Aurora PostgreSQL zugeordnet sind.

  5. Geben Sie in das Suchfeld Parameters (Parameter) shared_pre ein, um den shared_preload_libraries-Parameter zu finden.

  6. Wählen Sie Edit parameters (Parameter bearbeiten) aus, um auf die Eigenschaftswerte zuzugreifen.

  7. Fügen Sie pg_ad_mapping der Liste im Feld Values (Werte) hinzu. Verwenden Sie ein Komma, um Elemente in der Werteliste zu trennen.

    
                                Bild des shared_preload_libaries-Parameters mit hinzugefügter pgAudit-Erweiterung.
  8. Starten Sie die Writer-Instance Ihres Aurora PostgreSQL-DB-Clusters neu, damit Ihre Änderung des shared_preload_libraries Parameters wirksam wird.

  9. Wenn die Instance verfügbar ist, überprüfen Sie, ob pg_ad_mapping initialisiert wurde. Verwenden Siepsql, um eine Verbindung zur Writer-Instance Ihres Aurora PostgreSQL-DB-Clusters herzustellen, und führen Sie dann den folgenden Befehl aus.

    SHOW shared_preload_libraries; shared_preload_libraries -------------------------- rdsutils,pg_ad_mapping (1 row)
  10. Sobald pg_ad_mapping initialisiert ist, können Sie die Erweiterung erstellen. Sie müssen die Erweiterung nach der Initialisierung der Bibliothek erstellen, um die von dieser Erweiterung bereitgestellten Funktionen nutzen zu können.

    CREATE EXTENSION pg_ad_mapping;
  11. Schließen Sie die psql-Sitzung.

    labdb=> \q
Um pg_ad_mapping einzurichten

Um pg_ad_mapping mit dem einzurichten, rufen Sie die modify-db-parameter-groupOperation auf AWS CLI, um diesen Parameter zu Ihrer benutzerdefinierten Parametergruppe hinzuzufügen, wie im folgenden Verfahren gezeigt.

  1. Verwenden Sie den folgenden AWS CLI Befehl, um den Parameter zu erweiternpg_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. Verwenden Sie den folgenden AWS CLI Befehl, um die Writer-Instance Ihres Aurora PostgreSQL-DB-Clusters neu zu starten, sodass das pg_ad_mapping initialisiert wird.

    aws rds reboot-db-instance \ --db-instance-identifier writer-instance \ --region aws-region
  3. Wenn die Instance verfügbar ist, können Sie überprüfen, ob pg_ad_mapping initialisiert wurde. Verwenden Siepsql, um eine Verbindung zur Writer-Instance Ihres Aurora PostgreSQL-DB-Clusters herzustellen, und führen Sie dann den folgenden Befehl aus.

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

    Wenn pg_ad_mapping initialisiert ist, können Sie jetzt die Erweiterung erstellen.

    CREATE EXTENSION pg_ad_mapping;
  4. Schließen Sie die psql-Sitzung, damit Sie die AWS CLI verwenden können.

    labdb=> \q

Die Active Directory-Gruppen-SID wird abgerufen in PowerShell

Eine Sicherheits-ID (SID) wird verwendet, um einen Sicherheitsprinzipal oder eine Sicherheitsgruppe eindeutig zu identifizieren. Immer wenn eine Sicherheitsgruppe oder ein Konto in Active Directory erstellt wird, wird ihr eine SID zugewiesen. Um die SID der AD-Sicherheitsgruppe aus dem Active Directory abzurufen, können Sie das Cmdlet Get-ADGroup vom Windows-Client-Computer verwenden, der mit dieser Active Directory-Domäne verbunden ist. Der Identity-Parameter gibt den Active Directory-Gruppennamen an, um die entsprechende SID abzurufen.

Im folgenden Beispiel wird die SID der AD-Gruppe adgroup1 zurückgegeben.

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

Zuordnung der DB-Rolle zur AD-Sicherheitsgruppe

Sie müssen die AD-Sicherheitsgruppen in der Datenbank explizit als PostgreSQL-DB-Rolle bereitstellen. Ein AD-Benutzer, der Teil mindestens einer bereitgestellten AD-Sicherheitsgruppe ist, erhält Zugriff auf die Datenbank. Sie sollten einer AD-Gruppe keine sicherheitsbasierte DB-Rolle gewährenrds_ad role. Die Kerberos-Authentifizierung für die Sicherheitsgruppe wird ausgelöst, indem das Domainnamensuffix wie user1@example.com verwendet wird. Diese DB-Rolle kann keine Passwort- oder IAM-Authentifizierung verwenden, um Zugriff auf die Datenbank zu erhalten.

Anmerkung

AD-Benutzer, denen eine entsprechende DB-Rolle in der Datenbank rds_ad zugewiesen wurde, können sich nicht als Teil der AD-Sicherheitsgruppe anmelden. Sie erhalten Zugriff über die DB-Rolle als Einzelbenutzer.

Accounts-Group ist beispielsweise eine Sicherheitsgruppe in AD, für die Sie diese Sicherheitsgruppe in Aurora PostgreSQL als Accounts-Rolle bereitstellen möchten.

AD-Sicherheitsgruppe PostgreSQL-DB-Rolle
Kontengruppe Kontenrolle

Wenn Sie die DB-Rolle der AD-Sicherheitsgruppe zuordnen, müssen Sie sicherstellen, dass für die DB-Rolle das LOGIN-Attribut gesetzt ist und dass sie über die CONNECT-Privilegien für die erforderliche Anmeldedatenbank verfügt.

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

Der Administrator kann nun mit der Erstellung der Zuordnung zwischen der AD-Sicherheitsgruppe und der PostgreSQL-DB-Rolle fortfahren.

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

Informationen zum Abrufen der SID der AD-Sicherheitsgruppe finden Sie unter. Die Active Directory-Gruppen-SID wird abgerufen in PowerShell

Es kann vorkommen, dass ein AD-Benutzer mehreren Gruppen angehört. In diesem Fall erbt der AD-Benutzer die Rechte der DB-Rolle, der die höchste Gewichtung zugewiesen wurde. Wenn die beiden Rollen dasselbe Gewicht haben, erbt der AD-Benutzer die Rechte der DB-Rolle, die der kürzlich hinzugefügten Zuordnung entspricht. Es wird empfohlen, Gewichtungen anzugeben, die den relativen Berechtigungen/Privilegien der einzelnen DB-Rollen entsprechen. Je höher die Berechtigungen oder Privilegien einer DB-Rolle, desto höher die Gewichtung, die dem Zuordnungseintrag zugewiesen werden sollte. Dadurch wird die Mehrdeutigkeit vermieden, wenn zwei Zuordnungen dasselbe Gewicht haben.

Die folgende Tabelle zeigt ein Beispiel für die Zuordnung von AD-Sicherheitsgruppen zu Aurora PostgreSQL-DB-Rollen.

AD-Sicherheitsgruppe PostgreSQL-DB-Rolle Gewicht
Kontengruppe Kontenrolle 7
Vertriebsgruppe Rolle im Vertrieb 10
Entwicklungsgruppe Entwicklungsrolle 7

Im folgenden Beispiel erbt sie die Rechte von sales-role, user1 da sie die höhere Gewichtung hat, und erbt gleichzeitig user2 die Rechte von, dev-role wie das Mapping für diese Rolle danach erstellt wurdeaccounts-role, die dieselbe Gewichtung haben wie. accounts-role

Username Mitgliedschaft in einer Sicherheitsgruppe
Benutzer 1 Kundengruppe Vertriebsgruppe
Benutzer 2 Kontengruppe Dev-Gruppe

Die psql-Befehle zum Erstellen, Auflisten und Löschen der Zuordnungen sind unten aufgeführt. Derzeit ist es nicht möglich, einen einzelnen Zuordnungseintrag zu ändern. Der bestehende Eintrag muss gelöscht und die Zuordnung neu erstellt werden.

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)

Protokollierung/Prüfung der AD-Benutzeridentität

Verwenden Sie den folgenden Befehl, um die Datenbankrolle zu ermitteln, die vom aktuellen Benutzer oder vom Sitzungsbenutzer geerbt wurde:

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

Verwenden Sie den folgenden Befehl, um die Identität des AD-Sicherheitsprinzipals zu ermitteln:

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

Derzeit ist die AD-Benutzeridentität in den Auditprotokollen nicht sichtbar. Der log_connections Parameter kann aktiviert werden, um den Aufbau einer DB-Sitzung zu protokollieren. Weitere Informationen finden Sie unter log_connections. Die Ausgabe hierfür beinhaltet die AD-Benutzeridentität, wie unten dargestellt. Die dieser Ausgabe zugeordnete Backend-PID kann dann dabei helfen, Aktionen dem tatsächlichen AD-Benutzer zuzuordnen.

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

Einschränkungen

  • Microsoft Entra ID, bekannt als Azure Active Directory, wird nicht unterstützt.

Verwenden von Funktionen aus der Erweiterung pg_ad_mapping

pg_ad_mappingDie Erweiterung bot Unterstützung für die folgenden Funktionen:

pgadmap_set_mapping

Diese Funktion stellt die Zuordnung zwischen der AD-Sicherheitsgruppe und der Datenbankrolle mit einer zugehörigen Gewichtung her.

Syntax

pgadmap_set_mapping( ad_group, db_role, ad_group_sid, weight)

Argumente

Parameter Beschreibung
ad_group Name der AD-Gruppe. Der Wert darf nicht Null oder eine leere Zeichenfolge sein.
db_role Datenbankrolle, die der angegebenen AD-Gruppe zugeordnet werden soll. Der Wert darf nicht Null oder eine leere Zeichenfolge sein.
ad_group_sid Sicherheits-ID, die zur eindeutigen Identifizierung der AD-Gruppe verwendet wird. Der Wert beginnt mit 'S-1-' und darf weder Null noch eine leere Zeichenfolge sein. Weitere Informationen finden Sie unter Die Active Directory-Gruppen-SID wird abgerufen in PowerShell.
Gewicht Gewicht, das der Datenbankrolle zugeordnet ist. Die Rolle mit der höchsten Gewichtung hat Vorrang, wenn der Benutzer Mitglied mehrerer Gruppen ist. Der Standardwert für das Gewicht ist 1.

Rückgabetyp

None

Nutzungshinweise

Diese Funktion fügt eine neue Zuordnung von der AD-Sicherheitsgruppe zur Datenbankrolle hinzu. Sie kann nur auf der primären DB-Instance des DB-Clusters von einem Benutzer mit der Berechtigung rds_superuser ausgeführt werden.

Beispiele

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

Diese Funktion listet die Zuordnungen zwischen der AD-Sicherheitsgruppe und der DB-Rolle auf, die mithilfe der Funktion festgelegt wurden. pgadmap_set_mapping

Syntax

pgadmap_read_mapping()

Argumente

None

Rückgabetyp

Parameter Beschreibung
ad_group_sid Sicherheits-ID, die zur eindeutigen Identifizierung der AD-Gruppe verwendet wird. Der Wert beginnt mit 'S-1-' und darf weder Null noch eine leere Zeichenfolge sein. Weitere Informationen erhalten Sie unter .accounts-role@example.com Die Active Directory-Gruppen-SID wird abgerufen in PowerShell
db_role Datenbankrolle, die der angegebenen AD-Gruppe zugeordnet werden soll. Der Wert darf nicht Null oder eine leere Zeichenfolge sein.
Gewicht Gewicht, das der Datenbankrolle zugeordnet ist. Die Rolle mit der höchsten Gewichtung hat Vorrang, wenn der Benutzer Mitglied mehrerer Gruppen ist. Der Standardwert für das Gewicht ist 1.
ad_group Name der AD-Gruppe. Der Wert darf nicht Null oder eine leere Zeichenfolge sein.

Nutzungshinweise

Rufen Sie diese Funktion auf, um alle verfügbaren Zuordnungen zwischen der AD-Sicherheitsgruppe und der DB-Rolle aufzulisten.

Beispiele

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

Diese Funktion setzt eine oder alle Zuordnungen zurück, die mit der Funktion festgelegt wurden. pgadmap_set_mapping

Syntax

pgadmap_reset_mapping( ad_group_sid, db_role, weight)

Argumente

Parameter Beschreibung
ad_group_sid Sicherheits-ID, die zur eindeutigen Identifizierung der AD-Gruppe verwendet wird.
db_role Datenbankrolle, die der angegebenen AD-Gruppe zugeordnet werden soll.
Gewicht Gewicht, das der Datenbankrolle zugeordnet ist.

Wenn keine Argumente angegeben werden, werden alle Zuordnungen von AD-Gruppen zu DB-Rollen zurückgesetzt. Entweder müssen alle Argumente angegeben werden oder keine.

Rückgabetyp

None

Nutzungshinweise

Rufen Sie diese Funktion auf, um eine bestimmte AD-Gruppe zur DB-Rollenzuordnung zu löschen oder um alle Zuordnungen zurückzusetzen. Diese Funktion kann nur von einem Benutzer mit entsprechenden Rechten auf der primären DB-Instance des DB-Clusters ausgeführt werden. rds_superuser

Beispiele

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)