Grundlegendes zu PostgreSQL-Rollen und -Berechtigungen - 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.

Grundlegendes zu PostgreSQL-Rollen und -Berechtigungen

Wenn Sie einen DB-Cluster von Aurora PostgreSQL eine DB- mit erstellen AWS Management Console, wird gleichzeitig ein Administratorkonto erstellt. Der Name lautet standardmäßig postgres, wie im folgenden Screenshot gezeigt:

Die Standardanmelde-Identität für Anmeldeinformationen auf der Seite Create database (Datenbank erstellen) lautet postgres.

Sie können einen anderen Namen auswählen, anstatt den Standard (postgres) beizubehalten. In diesem Fall muss der von Ihnen gewählte Name mit einem Buchstaben beginnen und zwischen 1 und 16 alphanumerische Zeichen umfassen. Der Einfachheit halber verwenden wir für das Hauptbenutzerkonto den Standardwert (postgres) in diesem Handbuch.

Wenn Sie die create-db-cluster AWS CLI anstelle der verwenden AWS Management Console, erstellen Sie den Benutzernamen, indem Sie ihn mit dem master-username Parameter übergeben. Weitere Informationen finden Sie unter Schritt 2: Erstellen eines DB-Clusters von Aurora PostgreSQL.

Unabhängig davon, ob Sie die AWS CLI, AWS Management Consoledie oder die Amazon-RDS-API verwenden und ob Sie den postgres Standardnamen verwenden oder einen anderen Namen auswählen, ist dieses erste Datenbankbenutzerkonto Mitglied der rds_superuser Gruppe und verfügt über -rds_superuserBerechtigungen.

Die Rolle „rds_superuser“ verstehen

In PostgreSQL kann eine Rolle einen Benutzer, eine Gruppe oder einen Satz bestimmter Berechtigungen definieren, die einer Gruppe oder einem Benutzer für verschiedene Objekte in der Datenbank gewährt werden. PostgreSQL-Befehle für CREATE USER und CREATE GROUP wurden durch den allgemeineren Befehl CREATE ROLE mit bestimmten Eigenschaften zur Unterscheidung von Datenbankbenutzern ersetzt. Einen Datenbankbenutzer kann man sich als Rolle mit der LOGIN-Berechtigung vorstellen.

Anmerkung

Die Befehle CREATE USER und CREATE GROUP können weiterhin verwendet werden. Weitere Informationen dazu finden Sie im Abschnitt Datenbankrollen der PostgreSQL-Dokumentation.

Der postgres-Benutzer ist der Datenbankbenutzer mit den meisten Berechtigungen auf Ihrem Aurora-PostgreSQL-DB-Cluster. Er verfügt über die Eigenschaften, die durch die folgende CREATE ROLE-Anweisung definiert sind.

CREATE ROLE postgres WITH LOGIN NOSUPERUSER INHERIT CREATEDB CREATEROLE NOREPLICATION VALID UNTIL 'infinity'

Die Eigenschaften NOSUPERUSER, NOREPLICATION, INHERIT und VALID UNTIL 'infinity' sind die Standardoptionen für CREATE ROLE, sofern nicht anders angegeben.

Standardmäßig verfügt postgres über Berechtigungen, die der rds_superuser-Rolle gewährt wurden, und über Berechtigungen zum Erstellen von Rollen und Datenbanken. Die rds_superuser-Rolle erlaubt dem postgres-Benutzer, folgende Aktionen auszuführen:

  • Erweiterungen für die Verwendung mit Aurora PostgreSQL. Weitere Informationen finden Sie unter Arbeiten mit Erweiterungen und Fremddaten-Wrappern.

  • Rollen für Benutzer erstellen und Benutzern Berechtigungen gewähren. Weitere Informationen dazu finden Sie im Abschnitt CREATE ROLE und GRANT der PostgreSQL-Dokumentation.

  • Datenbanken erstellen. Weitere Informationen finden Sie im Abschnitt CREATE DATABASE der PostgreSQL-Dokumentation.

  • Gewähren Sie rds_superuser-Berechtigungen anderen Benutzerrollen, die nicht über diese Berechtigungen verfügen, und widerrufen Sie diese Berechtigungen bei Bedarf. Es wird empfohlen, diese Rolle nur denjenigen Benutzern zu gewähren, die Superuser-Aufgaben ausführen. Mit anderen Worten, Sie können diese Rolle Datenbankadministratoren (DBAs) oder Systemadministratoren erteilen.

  • Die rds_replication-Rolle Datenbankbenutzern gewähren (oder entziehen), die nicht über die rds_superuser-Rolle verfügen.

  • Die rds_password-Rolle Datenbankbenutzern gewähren (oder entziehen), die nicht über die rds_superuser-Rolle verfügen.

  • Statusinformationen über alle Datenbankverbindungen über die Ansicht pg_stat_activity abrufen. Bei Bedarf kann rds_superuser alle Verbindungen mit pg_terminate_backend oder pg_cancel_backend stoppen.

In der CREATE ROLE postgres...-Anweisung können Sie sehen, dass die postgres-Benutzerrolle PostgreSQL ausdrücklich superuser-Berechtigungen verweigert. Aurora PostgreSQL ist ein verwalteter Service, sodass Sie nicht auf das Host-Betriebssystem zugreifen können und keine Verbindung mit dem superuser-PostgreSQL-Konto herstellen können. Viele der Aufgaben, die superuser-Zugriff auf einem eigenständigem PostgreSQL erfordern, werden von Aurora automatisch verwaltet.

Weitere Informationen zum Gewähren von Berechtigungen finden Sie unter GRANT in der PostgreSQL-Dokumentation.

Die rds_superuser-Rolle ist eine von mehreren vordefinierten Rollen in einem Aurora-PostgreSQL-DB-Cluster.

Anmerkung

In PostgreSQL 13 und früheren Versionen werden vordefinierte Rollen als Standardrollen bezeichnet.

In der folgenden Liste finden Sie einige der anderen vordefinierten Rollen, die automatisch für einen neuen Aurora-PostgreSQL-DB-Cluster erstellt werden. Vordefinierte Rollen und ihre Berechtigungen können nicht geändert werden. Sie können Berechtigungen für diese vordefinierten Rollen nicht löschen, umbenennen oder ändern. Jeder entsprechende Versuch führt zu einem Fehler.

  • rds_passwort – Eine Rolle, die Passwörter ändern und Passwortbeschränkungen für Datenbankbenutzer einrichten kann. Die rds_superuser Rolle wird standardmäßig mit dieser Rolle gewährt und kann die Rolle Datenbankbenutzern gewähren. Weitere Informationen finden Sie unter Steuern des Benutzerzugriffs auf die PostgreSQL−Datenbank.

    • Bei Versionen von RDS für PostgreSQL vor 14 kann die rds_password Rolle Passwörter ändern und Passwortbeschränkungen für Datenbankbenutzer und Benutzer mit rds_superuser Rolle einrichten. Ab RDS für PostgreSQL Version 14 und höher kann die rds_password Rolle Passwörter ändern und Passwortbeschränkungen nur für Datenbankbenutzer einrichten. Nur Benutzer mit -rds_superuserRolle können diese Aktionen für andere Benutzer mit -rds_superuserRolle ausführen.

  • rdsadmin – Eine Rolle, die erstellt wurde, um viele der Verwaltungsaufgaben zu erledigen, die der Administrator mit superuser-Berechtigungen für eine eigenständige PostgreSQL-Datenbank ausführt. Diese Rolle wird intern von Aurora PostgreSQL für viele Verwaltungsaufgaben verwendet.

Wenn Sie alle vordefinierten Rollen anzeigen möchten, können Sie eine Verbindung mit der primären Instance Ihres Aurora-PostgreSQL-DB-Clusters herstellen und den Metabefehl psql \du verwenden. Die Ausgabe sieht wie folgt aus:

List of roles Role name | Attributes | Member of --------------+-----------------------------------+------------------------------------ postgres | Create role, Create DB +| {rds_superuser} | Password valid until infinity | rds_superuser | Cannot login | {pg_monitor,pg_signal_backend, | +| rds_replication,rds_password} ...

In der Ausgabe sehen Sie, dass rds_superuser keine Datenbankbenutzerrolle ist (sie kann sich nicht anmelden), aber über die Berechtigungen vieler anderer Rollen verfügt. Sie können auch sehen, dass dieser Datenbankbenutzer postgres Mitglied der rds_superuser-Rolle ist. Wie bereits erwähnt, ist postgres der Standardwert auf der Seite Create database (Datenbank erstellen) der Amazon-RDS-Konsole. Wenn Sie einen anderen Namen gewählt haben, wird dieser Name stattdessen in der Rollenliste angezeigt.

Anmerkung

Aurora-PostgreSQL-Versionen 15.2 und 14.7 führten ein restriktives Verhalten der rds_superuser-Rolle ein. Einem Aurora PostgreSQL-Benutzer muss die CONNECT-Berechtigung für die entsprechende Datenbank zugewiesen werden, um eine Verbindung herzustellen, auch wenn dem Benutzer die rds_superuser-Rolle zugewiesen ist. Vor den Versionen 14.7 und 15.2 von Aurora PostgreSQL konnte ein Benutzer eine Verbindung zu jeder Datenbank und Systemtabelle herstellen, wenn dem Benutzer die rds_superuser-Rolle zugewiesen war. Dieses restriktive Verhalten steht im Einklang mit den Verpflichtungen von AWS und Amazon Aurora zur kontinuierlichen Verbesserung der Sicherheit.

Bitte aktualisieren Sie die entsprechende Logik in Ihren Anwendungen, falls die oben genannte Erweiterung Auswirkungen hat.

Steuern des Benutzerzugriffs auf die PostgreSQL−Datenbank

Neue Datenbanken in PostgreSQL werden immer mit Standardberechtigungen im public-Schema der Datenbank erstellt, mit dem alle Datenbankbenutzer und -rollen Objekte erstellen können. Diese Berechtigungen ermöglichen es Datenbankbenutzern, eine Verbindung mit der Datenbank herzustellen und während der Verbindung temporäre Tabellen zu erstellen.

Es wird empfohlen, diese public-Standardberechtigungen zu widerrufen, um den Benutzerzugriff auf die Datenbank-Instances, die Sie auf Ihrem Primärknoten des Aurora-PostgreSQL-DB-Clusters erstellen, besser kontrollieren können. Danach erteilen Sie Datenbankbenutzern auf einer detaillierteren Basis spezifische Berechtigungen, wie im Folgenden gezeigt.

So richten Sie Rollen und Berechtigungen für eine neue Datenbank-Instance ein

Angenommen, Sie richten eine Datenbank für einen neu erstellten Aurora-PostgreSQL-DB-Cluster ein, die von mehreren Forschenden verwendet wird, die alle Lese-/Schreibzugriff auf die Datenbank benötigen.

  1. Verwenden Sie psql (oder pgAdmin) zum Herstellen einer Verbindung mit dem primären Aurora-PostgreSQL-DB-Cluster:

    psql --host=your-cluster-instance-1.666666666666.aws-region.rds.amazonaws.com --port=5432 --username=postgres --password

    Geben Sie bei der Aufforderung Ihr Passwort ein. Der psql-Client verbindet und zeigt die standardmäßige administrative Verbindungsdatenbank postgres=> als Eingabeaufforderung an.

  2. Gehen Sie wie folgt vor, um zu verhindern, dass Datenbankbenutzer Objekte im public-Schema erstellen:

    postgres=> REVOKE CREATE ON SCHEMA public FROM PUBLIC; REVOKE
  3. Als Nächstes erstellen Sie eine neue Datenbank-Instance:

    postgres=> CREATE DATABASE lab_db; CREATE DATABASE
  4. Widerrufen Sie alle Berechtigungen aus dem PUBLIC-Schema in dieser neuen Datenbank.

    postgres=> REVOKE ALL ON DATABASE lab_db FROM public; REVOKE
  5. Erstellen Sie eine Rolle für Datenbankbenutzer.

    postgres=> CREATE ROLE lab_tech; CREATE ROLE
  6. Geben Sie Datenbankbenutzern mit dieser Rolle die Möglichkeit, eine Verbindung mit der Datenbank herzustellen.

    postgres=> GRANT CONNECT ON DATABASE lab_db TO lab_tech; GRANT
  7. Gewähren Sie allen Benutzern mit der lab_tech-Rolle alle Berechtigungen für diese Datenbank.

    postgres=> GRANT ALL PRIVILEGES ON DATABASE lab_db TO lab_tech; GRANT
  8. Erstellen Sie Datenbankbenutzer wie folgt:

    postgres=> CREATE ROLE lab_user1 LOGIN PASSWORD 'change_me'; CREATE ROLE postgres=> CREATE ROLE lab_user2 LOGIN PASSWORD 'change_me'; CREATE ROLE
  9. Gewähren Sie diesen beiden Benutzern die Berechtigungen, die mit der lab_tech-Rolle verknüpft sind:

    postgres=> GRANT lab_tech TO lab_user1; GRANT ROLE postgres=> GRANT lab_tech TO lab_user2; GRANT ROLE

An dieser Stelle können lab_user1 und lab_user2 eine Verbindung mit der lab_db-Datenbank herstellen. Dieses Beispiel folgt nicht den bewährten Methoden für den Unternehmensgebrauch, darunter das Erstellen mehrerer Datenbank-Instances, verschiedener Schemas und das Erteilen eingeschränkter Berechtigungen. Umfassende Informationen und zusätzliche Szenarien finden Sie unter Verwalten von PostgreSQL-Benutzern und -Rollen.

Weitere Informationen zu Berechtigungen in PostgreSQL-Datenbanken finden Sie unter dem Befehl GRANT in der PostgreSQL-Dokumentation.

Delegieren und Steuern der Benutzerpasswortverwaltung

Als DBA sollten Sie ggf. die Verwaltung von Benutzerpasswörtern delegieren. Oder Sie möchten verhindern, dass Datenbankbenutzer ihre Passwörter ändern oder Passwortbeschränkungen wie die Lebensdauer des Passworts neu konfigurieren. Um sicherzustellen, dass nur die von Ihnen ausgewählten Datenbankbenutzer Passworteinstellungen ändern können, können Sie die Funktion zur eingeschränkten Passwortverwaltung aktivieren. Wenn Sie diese Funktion aktivieren, können nur die Datenbankbenutzer, denen die rds_password-Rolle gewährt wurde, Passwörter verwalten.

Anmerkung

Um die eingeschränkte Passwortverwaltung nutzen zu können, muss Ihr DB-Cluster von Aurora PostgreSQL Amazon Aurora PostgreSQL 10.6 oder höher ausführen.

Standardmäßig lautet diese Funktion off, wie im Folgenden gezeigt:

postgres=> SHOW rds.restrict_password_commands; rds.restrict_password_commands -------------------------------- off (1 row)

Zum Aktivieren dieser Funktion verwenden Sie eine benutzerdefinierte Parametergruppe und ändern die Einstellung für rds.restrict_password_commands in 1. Stellen Sie sicher, dass Sie Ihre primäre DB-Instance von Aurora PostgreSQL neu starten, damit die Einstellung wirksam wird.

Wenn diese Funktion aktiv ist, werden für die folgenden SQL-Befehle rds_password-Berechtigungen benötigt:

CREATE ROLE myrole WITH PASSWORD 'mypassword'; CREATE ROLE myrole WITH PASSWORD 'mypassword' VALID UNTIL '2023-01-01'; ALTER ROLE myrole WITH PASSWORD 'mypassword' VALID UNTIL '2023-01-01'; ALTER ROLE myrole WITH PASSWORD 'mypassword'; ALTER ROLE myrole VALID UNTIL '2023-01-01'; ALTER ROLE myrole RENAME TO myrole2;

Das Umbenennen einer Rolle (ALTER ROLE myrole RENAME TO newname) ist auch eingeschränkt, wenn das Passwort den MD5-Hashing-Algorithmus verwendet.

Wenn diese Funktion aktiv ist, generiert jeder Versuch, einen dieser SQL-Befehle ohne die rds_password-Rollenberechtigungen auszuführen, den folgenden Fehler:

ERROR: must be a member of rds_password to alter passwords

Wir empfehlen, dass Sie die rds_password-Berechtigung nur wenigen Rollen zuweisen, die Sie ausschließlich für die Passwortverwaltung verwenden. Wenn Sie rds_password-Berechtigungen für Datenbankbenutzer erteilen, die keine rds_superuser-Berechtigungen haben, müssen Sie ihnen auch das CREATEROLE-Attribut erteilen.

Stellen Sie sicher, dass Sie die Passwortanforderungen wie Ablaufdatum und erforderliche Komplexität auf Kundenseite überprüfen. Wenn Sie Ihr eigenes clientseitiges Dienstprogramm für passwortbezogene Änderungen verwenden, muss das Dienstprogramm Mitglied von rds_password sein und über CREATE ROLE-Berechtigungen verfügen.

Verwenden von SCRAM für die PostgreSQL-Passwortverschlüsselung

Der Salted Challenge Response Authentication Mechanism (SCRAM) ist eine Alternative zum standardmäßigen Message Digest (MD5)-Algorithmus von PostgreSQL zum Verschlüsseln von Passwörtern. Der SCRAM-Authentifizierungsmechanismus gilt als sicherer als MD5. Weitere Informationen zu diesen beiden verschiedenen Ansätzen zur Sicherung von Passwörtern finden Sie unter Passwortauthentifizierung in der PostgreSQL-Dokumentation.

Wir empfehlen, SCRAM anstelle von MD5 als Passwortverschlüsselungsschema für den Aurora-PostgreSQL-DB-Cluster zu verwenden. Ab der Veröffentlichung von Aurora PostgreSQL 14 wird SCRAM in allen verfügbaren Aurora-PostgreSQL-Versionen unterstützt, einschließlich der Versionen 10, 11, 12, 13 und 14. Es ist ein kryptografischer Challenge-Response-Mechanismus, der den scram–sha-256-Algorithmus zur Passwortauthentifizierung und -verschlüsselung nutzt.

Möglicherweise müssen Sie Bibliotheken aktualisieren, damit Ihre Clientanwendungen SCRAM unterstützen können. JDBC-Versionen vor 42.2.0 unterstützen SCRAM beispielsweise nicht. Weitere Informationen finden Sie unter PostgreSQL-JDBC-Treiber in der Dokumentation zu PostgreSQL-JDBC-Treibern. Für eine Liste anderer PostgreSQL-Treiber und SCRAM-Unterstützung siehe die Treiberliste in der PostgreSQL-Dokumentation.

Anmerkung

Aurora PostgreSQL Version 14 und höhere Versionen unterstützen scram-sha-256 standardmäßig zur Passwortverschlüsselung für neue DB-Cluster. Das heißt, für die standardmäßige DB-Cluster-Parametergruppe (default.aurora-postgresql14) ist der password_encryption-Wert auf scram-sha-256 festgelegt.

Einrichten des Aurora-PostgreSQL-DB-Clusters, sodass SCRAM erforderlich ist

Bei Aurora PostgreSQL 14.3 und höheren Versionen können Sie verlangen, dass der Aurora-PostgreSQL-DB-Cluster nur Passwörter akzeptiert, die den scram-sha-256-Algorithmus verwenden.

Wichtig

Wenn Sie bei vorhandenen RDS-Proxys mit PostgreSQL-Datenbanken die Datenbankauthentifizierung so ändern, dass nur SCRAM verwendet wird, ist der Proxy für bis zu 60 Sekunden nicht verfügbar. Um das Problem zu vermeiden, führen Sie einen der folgenden Schritte aus:

  • Stellen Sie sicher, dass die Datenbank sowohl die SCRAM- als auch die MD5-Authentifizierung zulässt.

  • Wenn Sie nur die SCRAM-Authentifizierung verwenden möchten, erstellen Sie einen neuen Proxy, migrieren Sie Ihren Anwendungsdatenverkehr auf den neuen Proxy und löschen Sie dann den zuvor mit der Datenbank verknüpften Proxy.

Bevor Sie Änderungen an Ihrem System vornehmen, vergewissern Sie sich, dass Sie den folgenden Prozess komplett verstehen:

  • Sammeln Sie Informationen über alle Rollen und Passwortverschlüsselung für alle Datenbankbenutzer.

  • Überprüfen Sie die Parametereinstellungen für Ihren Aurora-PostgreSQL-DB-Cluster für die Parameter, die die Passwortverschlüsselung steuern.

  • Wenn Ihr Aurora-PostgreSQL-DB-Cluster eine Standardparametergruppe verwendet, müssen Sie eine benutzerdefinierte DB-Cluster-Parametergruppe erstellen und sie auf Ihren Aurora-PostgreSQL-DB-Cluster anwenden, damit Sie bei Bedarf Parameter ändern können. Wenn Ihr Aurora-PostgreSQL-DB-Cluster eine benutzerdefinierte Parametergruppe verwendet, können Sie die erforderlichen Parameter bei Bedarf später im Prozess ändern.

  • Ändern Sie den Parameter password_encryption in scram-sha-256.

  • Informieren Sie alle Datenbankbenutzer, dass sie ihre Passwörter aktualisieren müssen. Wiederholen Sie diesen Schritt für Ihr postgres-Konto. Die neuen Passwörter werden mit dem scram-sha-256-Algorithmus verschlüsselt und gespeichert.

  • Stellen Sie sicher, dass alle Passwörter mit diesem Verschlüsselungstyp verschlüsselt sind.

  • Wenn alle Passwörter scram-sha-256 verwenden, können Sie den rds.accepted_password_auth_method-Parameter von md5+scram in scram-sha-256 ändern.

Warnung

Nachdem Sie rds.accepted_password_auth_method nur in scram-sha-256 geändert haben, können Benutzer (Rollen) mit md5-verschlüsselten Passwörtern keine Verbindung herstellen.

Vorbereiten der SCRAM-Anforderung für Ihren Aurora-PostgreSQL-DB-Cluster

Bevor Sie Änderungen an Ihrem Aurora-PostgreSQL-DB-Cluster, vornehmen, überprüfen Sie alle vorhandenen Datenbankbenutzerkonten. Überprüfen Sie auch die Art der Verschlüsselung, die für Passwörter verwendet wird. Sie können für diese Aufgaben die rds_tools-Erweiterung verwenden. Diese Erweiterung wird in Aurora PostgreSQL 13.1 und höheren Versionen unterstützt.

So erhalten Sie eine Liste der Datenbankbenutzer (Rollen) und Passwortverschlüsselungsmethoden
  1. Verwenden Sie psql zum Herstellen einer Verbindung mit der primären Instance Ihres Aurora-PostgreSQL-DB-Clusters , wie im Folgenden gezeigt.

    psql --host=cluster-name-instance-1.111122223333.aws-region.rds.amazonaws.com --port=5432 --username=postgres --password
  2. Installieren Sie die rds_tools-Erweiterung.

    postgres=> CREATE EXTENSION rds_tools; CREATE EXTENSION
  3. Rufen Sie eine Auflistung der Rollen und Verschlüsselungsmethoden ab.

    postgres=> SELECT * FROM rds_tools.role_password_encryption_type();

    Die Ausgabe entspricht weitgehend der folgenden.

    rolname | encryption_type ----------------------+----------------- pg_monitor | pg_read_all_settings | pg_read_all_stats | pg_stat_scan_tables | pg_signal_backend | lab_tester | md5 user_465 | md5 postgres | md5 (8 rows)

Erstellen einer benutzerdefinierten DB-Cluster-Parametergruppe

Anmerkung

Wenn Ihr Aurora-PostgreSQL-DB-Cluster bereits eine benutzerdefinierte Parametergruppe verwendet, müssen Sie keine neue erstellen.

Eine Übersicht über Parametergruppen für Aurora finden Sie unter Erstellen einer DB-Cluster-Parametergruppe.

Der für Passwörter verwendete Passwortverschlüsselungstyp wird in einem Parameter, password_encryption, festgelegt. Die Verschlüsselung, die der Aurora-PostgreSQL-DB-Cluster zulässt, wird in einem anderen Parameter, rds.accepted_password_auth_method, festgelegt. Wenn Sie den Standardwert eines dieser Parameter ändern, müssen Sie eine benutzerdefinierte DB-Cluster-Parametergruppe erstellen und auf Ihren Cluster anwenden.

Sie können auch die AWS Management Console oder die RDS-API verwenden, um eine benutzerdefinierte DB-Cluster-Parametergruppe erstellen. Weitere Informationen finden Sie unter Erstellen einer DB-Cluster-Parametergruppe.

Sie können jetzt die benutzerdefinierte Parametergruppe Ihrer DB-Instance zuordnen.

So erstellen Sie eine benutzerdefinierte DB-Cluster-Parametergruppe
  1. Verwenden Sie den CLI-Befehl create-db-cluster-parameter-group zum Erstellen der benutzerdefinierten Parametergruppe für den Cluster. Folgendes Beispiel verwendet aurora-postgresql13 als Quelle für diese benutzerdefinierte Parametergruppe.

    Für Linux, macOSoder Unix:

    aws rds create-db-cluster-parameter-group --db-cluster-parameter-group-name 'docs-lab-scram-passwords' \ --db-parameter-group-family aurora-postgresql13 --description 'Custom DB cluster parameter group for SCRAM'

    Windows:

    aws rds create-db-cluster-parameter-group --db-cluster-parameter-group-name "docs-lab-scram-passwords" ^ --db-parameter-group-family aurora-postgresql13 --description "Custom DB cluster parameter group for SCRAM"

    Sie können jetzt die benutzerdefinierte Parametergruppe Ihrem Cluster zuordnen.

  2. Verwenden Sie den CLI-Befehl modify-db-cluster zum Anwenden dieser benutzerdefinierten Parametergruppe auf Ihren Aurora-PostgreSQL-DB-Cluster.

    Für Linux, macOSoder Unix:

    aws rds modify-db-cluster --db-cluster-identifier 'your-instance-name' \ --db-cluster-parameter-group-name "docs-lab-scram-passwords

    Windows:

    aws rds modify-db-cluster --db-cluster-identifier "your-instance-name" ^ --db-cluster-parameter-group-name "docs-lab-scram-passwords

    Zum erneuten Synchronisieren Ihres Aurora-PostgreSQL-DB-Clusters mit Ihrer benutzerdefinierten DB-Cluster-Parametergruppe starten Sie die primäre und alle anderen Instances des Clusters neu.

Konfigurieren der Passwortverschlüsselung für die Verwendung von SCRAM

Der Passwortverschlüsselungsmechanismus, der von einem Aurora-PostgreSQL-DB-Cluster verwendet wird, ist in der DB-Cluster-Parametergruppe auf den Parameter password_encryption festgelegt. Zulässige Werte sind keine Angabe, md5 oder scram-sha-256. Der Standardwert hängt von der Version von Aurora PostgreSQL wie folgt ab:

  • Aurora PostgreSQL 14 – Der Standardwert ist scram-sha-256.

  • Aurora PostgreSQL 13 – Der Standardwert ist md5.

Mit einer benutzerdefinierten DB-Cluster-Parametergruppe , die Ihrem Aurora-PostgreSQL-DB-Cluster angefügt ist, können Sie die Werte für den Passwortverschlüsselungsparameter ändern.

Im Folgenden zeigt die RDS-Konsole die Standardwerte für die password_encryption-Parameter für Aurora PostgreSQL.
So ändern Sie die Passwortverschlüsselungseinstellung in scram-sha-256
  • Ändern Sie den Wert der Passwortverschlüsselung in scram-sha-256, wie nachfolgend gezeigt. Die Änderung kann sofort angewendet werden, da der Parameter dynamisch ist. Daher ist kein Neustart erforderlich, damit die Änderung wirksam wird.

    Für Linux, macOSoder Unix:

    aws rds modify-db-cluster-parameter-group --db-cluster-parameter-group-name \ 'docs-lab-scram-passwords' --parameters 'ParameterName=password_encryption,ParameterValue=scram-sha-256,ApplyMethod=immediate'

    Windows:

    aws rds modify-db-parameter-group --db-parameter-group-name ^ "docs-lab-scram-passwords" --parameters "ParameterName=password_encryption,ParameterValue=scram-sha-256,ApplyMethod=immediate"

Migrieren von Passwörtern für Benutzerrollen zu SCRAM

Sie können Passwörter für Benutzerrollen wie folgt zu SCRAM migrieren.

So migrieren Sie Passwörter für Datenbankbenutzer (Rolle) von MD5 zu SCRAM
  1. Melden Sie sich als Administratorbenutzer an (Standardbenutzer postgres), wie nachfolgend gezeigt.

    psql --host=cluster-name-instance-1.111122223333.aws-region.rds.amazonaws.com --port=5432 --username=postgres --password
  2. Überprüfen Sie die Einstellung des password_encryption-Parameters auf der DB-Instance von RDS for PostgreSQL mithilfe des folgenden Befehls.

    postgres=> SHOW password_encryption; password_encryption --------------------- md5 (1 row)
  3. Ändern Sie den Wert dieses Parameters in scram-sha-256. Dies ist ein dynamischer Parameter, sodass Sie die Instance nach dieser Änderung nicht neu starten müssen. Überprüfen Sie den Wert erneut, um sicherzustellen, dass er jetzt auf scram-sha-256 festgelegt ist. Gehen Sie dazu wie folgt vor.

    postgres=> SHOW password_encryption; password_encryption --------------------- scram-sha-256 (1 row)
  4. Bitten Sie alle Datenbankbenutzer, ihre Passwörter zu ändern. Stellen Sie sicher, dass Sie auch Ihr eigenes Passwort für das postgres-Konto ändern (der Datenbankbenutzer mit rds_superuser-Berechtigungen).

    labdb=> ALTER ROLE postgres WITH LOGIN PASSWORD 'change_me'; ALTER ROLE
  5. Wiederholen Sie den Vorgang für alle Datenbanken auf dem Aurora-PostgreSQL-DB-Cluster.

Ändern des Parameters, um SCRAM zu erfordern

Dies ist der letzte Schritt in diesem Prozess. Nachdem Sie die Änderung im folgenden Verfahren vorgenommen haben, können sich Benutzerkonten (Rollen), die nach wie vor die md5-Verschlüsselung für Passwörter verwenden, nicht beim Aurora-PostgreSQL-DB-Cluster anmelden.

Die rds.accepted_password_auth_method gibt die Verschlüsselungsmethode an, die der Aurora-PostgreSQL-DB-Cluster als Benutzerpasswort beim Anmeldevorgang akzeptiert. Der Standardwert ist md5+scram, was bedeutet, dass eine der beiden Methoden akzeptiert wird. Im folgenden Bild finden Sie die Standardeinstellung für diesen Parameter.

Die RDS-Konsole, die die Standardwerte und die zulässigen Werte für den rds.accepted_password_auth_method-Parameter zeigt.

Die zulässigen Werte für diesen Parameter sind md5+scram oder nur scram. Durch Ändern dieses Parameterwerts in scram wird er erforderlich.

So ändern Sie den Parameterwert, sodass eine SCRAM-Authentifizierung für Passwörter erforderlich ist
  1. Stellen Sie sicher, dass alle Datenbank-Benutzerpasswörter für alle Datenbanken auf Ihrem Aurora-PostgreSQL-DB-Cluster scram-sha-256 für die Passwortverschlüsselung verwenden. Fragen Sie hierzu rds_tools für die Rolle (Benutzer) und den Verschlüsselungstyp wie folgt ab.

    postgres=> SELECT * FROM rds_tools.role_password_encryption_type(); rolname | encryption_type ----------------------+----------------- pg_monitor | pg_read_all_settings | pg_read_all_stats | pg_stat_scan_tables | pg_signal_backend | lab_tester | scram-sha-256 user_465 | scram-sha-256 postgres | scram-sha-256 ( rows)
  2. Wiederholen Sie die Abfrage auf allen DB-Instances Ihres Aurora-PostgreSQL-DB-Clusters.

    Wenn alle Passwörter scram-sha-256 verwenden, können Sie fortfahren.

  3. Ändern Sie den Wert der akzeptierten Passwortauthentifizierung in scram-sha-256 wie folgt.

    Für Linux, macOSoder Unix:

    aws rds modify-db-cluster-parameter-group --db-cluster-parameter-group-name 'docs-lab-scram-passwords' \ --parameters 'ParameterName=rds.accepted_password_auth_method,ParameterValue=scram,ApplyMethod=immediate'

    Windows:

    aws rds modify-db-cluster-parameter-group --db-cluster-parameter-group-name "docs-lab-scram-passwords" ^ --parameters "ParameterName=rds.accepted_password_auth_method,ParameterValue=scram,ApplyMethod=immediate"