Wie erlaube ich Benutzern, sich mit ihren IAM-Anmeldeinformationen bei einer DB-Instance bei Amazon RDS für MySQL zu authentifizieren?

Lesedauer: 6 Minute
0

Ich möchte eine Verbindung zu einer Datenbank-Instance (DB) bei Amazon Relational Database Service (Amazon RDS) herstellen, auf der MySQL ausgeführt wird. Ich möchte Anmeldeinformationen von AWS Identity and Access Management (IAM) anstelle nativer Authentifizierungsmethoden verwenden.

Kurzbeschreibung

Benutzer können mit Anmeldeinformationen von IAM-Benutzern oder -Rollen und einem Authentifizierungstoken eine Verbindung zu einer DB-Instance oder einem Cluster bei Amazon RDS herstellen. Die IAM-Datenbank-Authentifizierung ist aus folgenden Gründen sicherer als native Authentifizierungsmethoden:

  • Authentifizierungstoken für die IAM-Datenbank werden mithilfe Ihrer AWS-Zugriffsschlüssel generiert. Sie müssen die Anmeldeinformationen des Datenbankbenutzers nicht speichern.
  • Authentifizierungstoken haben eine Lebensdauer von 15 Minuten, sodass Sie kein Zurücksetzen von Passwörtern erzwingen müssen.
  • Die IAM-Datenbank-Authentifizierung erfordert eine SSL-Verbindung (Secure Socket Layer). Alle Daten, die zu und von Ihrer DB-Instance übertragen werden, sind verschlüsselt.
  • Wenn Ihre Anwendung in Amazon Elastic Compute Cloud (Amazon EC2) ausgeführt wird, können Sie die Anmeldeinformationen Ihres EC2-Instance-Profils verwenden, um auf die Datenbank zuzugreifen. Sie brauchen keine Datenbankpasswörter auf Ihrer Instance zu speichern.

Gehen Sie folgendermaßen vor, um die IAM-Datenbank-Authentifizierung mithilfe von IAM-Rollen einzurichten:

  1. Aktivieren Sie die IAM-DB-Authentifizierung auf der RDS-DB-Instance.
  2. Erstellen Sie ein Datenbankbenutzer-Konto, das ein AWS-Authentifizierungstoken verwendet.
  3. Fügen Sie eine IAM-Richtlinie hinzu, die den Datenbankbenutzer der IAM-Rolle zuordnet.
  4. Erstellen Sie eine IAM-Rolle, die Zugriff auf Amazon RDS erlaubt.
  5. Fügen Sie die IAM-Rolle an die Amazon-EC2-Instance an.
  6. Generieren Sie ein AWS-Authentifizierungstoken, um die IAM-Rolle zu identifizieren.
  7. Laden Sie die SSL-Stammzertifikatsdatei oder die Zertifikat-Bundle-Datei herunter.
  8. Stellen Sie mit den Anmeldeinformationen der IAM-Rolle und dem Authentifizierungstoken eine Verbindung zur RDS-DB-Instance her.
  9. Stellen Sie mit den Anmeldeinformationen der IAM-Rolle und den SSL-Zertifikaten eine Verbindung zur RDS-DB-Instance her.

Lösung

Bevor Sie beginnen, starten Sie eine DB-Instance, die IAM-Datenbank-Authentifizierung unterstützt, und eine Amazon-EC2-Instance, um eine Verbindung zur Datenbank herzustellen.

Aktivieren der IAM-DB-Authentifizierung auf der RDS-DB-Instance

Sie können die IAM-Datenbank-Authentifizierung mit der Amazon-RDS-Konsole, AWS Command Line Interface (AWS CLI) oder der Amazon-RDS-API aktivieren. Wenn Sie die Amazon-RDS-Konsole nutzen, um die DB-Instance zu bearbeiten, wählen Sie Sofort anwenden, um die IAM-Datenbank-Authentifizierung zu aktivieren. Die Aktivierung der IAM-Authentifizierung erfordert einen kurzen Ausfall. Weitere Informationen darüber, welche Änderungen Ausfälle erfordern, finden Sie unter Amazon RDS DB-Instances.

Hinweis: Wenn Sie Sofort anwenden wählen, werden alle ausstehenden Änderungen ebenfalls sofort und nicht erst während des Wartungsfensters übernommen. Dies kann zu einem längeren Ausfall Ihrer Instance führen. Weitere Informationen finden Sie unter Verwenden der Einstellung „Sofort anwenden“.

Erstellen eines Datenbankbenutzer-Kontos, das ein AWS-Authentifizierungstoken verwendet

  1. Stellen Sie eine Verbindung zur DB-Instance oder zum Cluster-Endpunkt her, indem Sie folgenden Befehl ausführen: Geben Sie das Master-Passwort ein, um sich anzumelden.
$ mysql -h {database or cluster endpoint} -P {port number database is listening on} -u {master db username} -p
  1. Erstellen Sie ein Datenbankbenutzer-Konto, das ein AWS-Authentifizierungstoken anstelle eines Passworts verwendet:
CREATE USER {dbusername} IDENTIFIED WITH AWSAuthenticationPlugin as 'RDS';
  1. Standardmäßig wird der Datenbankbenutzer ohne Berechtigungen erstellt. Dies äußert sich in der Anzeige GRANT USAGE, wenn Sie SHOW GRANTS FOR {dbusername} ausführen. Führen Sie folgenden Befehl aus, um von Benutzerkonten eine Verbindung über SSL zu verlangen:
ALTER USER {dbusername} REQUIRE SSL;
  1. Führen Sie den Befehl exit aus, um MySQL zu schließen. Melden Sie sich dann von der DB-Instance ab.

Hinzufügen einer IAM-Richtlinie, die den Datenbankbenutzer der IAM-Rolle zuordnet

  1. Öffnen Sie die IAM-Konsole.

  2. Wählen Sie im Navigationsbereich Richtlinien aus.

  3. Wählen Sie Richtlinie erstellen.

  4. Geben Sie eine Richtlinie ein, die dem gewünschten Benutzer die Aktion rds-db:connect erlaubt. Weitere Informationen zum Erstellen dieser Richtlinie finden Sie unter Erstellen und Verwenden einer IAM-Richtlinie für den IAM-Datenbankzugriff.

**Hinweis:**Fügen Sie für den Wert Ressource die Details Ihrer Datenbankressourcen wie Ihre DB-Instance-Kennung und den Benutzernamen Ihrer Datenbank ein.

  1. Wählen Sie Weiter: Tags.

  2. Wählen Sie Weiter: Prüfen.

  3. Geben Sie für Name einen Richtliniennamen ein.

  4. Wählen Sie Richtlinie erstellen.

Erstellen einer IAM-Rolle, die Zugriff auf Amazon RDS erlaubt

  1. Öffnen Sie die IAM-Konsole.

  2. Wählen Sie im Navigationsbereich Rollen aus.

  3. Wählen Sie Rolle erstellen.

  4. Wählen Sie AWS-Service.

  5. Wählen Sie EC2.

  6. Klicken Sie unter Ihren Anwendungsfall auswählen auf EC2 und dann auf Weiter: Berechtigungen.

  7. Suchen Sie mittels der Suchleiste nach der IAM-Richtlinie, die Sie zuvor im Abschnitt „Hinzufügen einer IAM-Richtlinie, die den Datenbankbenutzer der IAM-Rolle zuordnet“ erstellt haben.

  8. Wählen Sie Weiter: Tags.

  9. Wählen Sie Weiter: Prüfen.

  10. Geben Sie unter Rollenname einen Namen für diese IAM-Rolle ein.

  11. Wählen Sie Rolle erstellen.

Anfügen der IAM-Rolle an die Amazon-EC2-Instance

  1. Öffnen Sie die Amazon-EC2-Konsole.

  2. Wählen Sie die EC2-Instance aus, die Sie für die Verbindung mit Amazon RDS verwenden.

  3. Fügen Sie Ihre neu erstellte IAM-Rolle an die EC2-Instance an.

  4. Stellen Sie eine SSH-Verbindung zu Ihrer EC2-Instance her.

Generieren eines AWS-Authentifizierungstokens, um die IAM-Rolle zu identifizieren

Nachdem Sie eine Verbindung zu Ihrer Amazon-EC2-Instance hergestellt haben, führen Sie folgenden AWS-CLI-Befehl aus, um ein Authentifizierungstoken zu generieren.

**Hinweis:**Wenn beim Ausführen von Befehlen in AWS Command Line Interface (AWS CLI) Fehler auftreten, stellen Sie sicher, dass Sie eine aktuelle Version von AWS CLI ausführen.

$ aws rds generate-db-auth-token --hostname {db or cluster endpoint} --port 3306 --username {db username}

Kopieren und speichern Sie dieses Authentifizierungstoken zur späteren Verwendung. Das Token läuft innerhalb von 15 Minuten nach der Erstellung ab.

Alternativ können Sie mit einem AWS SDK ein Token generieren.

Herunterladen der SSL-Stammzertifikatsdatei oder der Zertifikat-Bundle-Datei

Führen Sie diesen Befehl aus, um das Stammzertifikat herunterzuladen, das für alle Regionen gültig ist:

$ wget https://s3.amazonaws.com/rds-downloads/rds-ca-2019-root.pem

Herstellen einer Verbindung zur RDS-DB-Instance mit den Anmeldeinformationen der IAM-Rolle und dem Authentifizierungstoken

Nachdem Sie die Zertifikatsdatei heruntergeladen haben, führen Sie einen der folgenden Befehle aus, um mit SSL eine Verbindung zur DB-Instance herzustellen.

**Hinweis:**Wenn Ihre Anwendung keine Zertifikatsketten akzeptiert, führen Sie folgenden Befehl aus, um das Zertifikat-Bundle herunterzuladen:

$ wget https://s3.amazonaws.com/rds-downloads/rds-combined-ca-bundle.pem

RDSHOST="rdsmysql.abcdefghijk.us-west-2.rds.amazonaws.com"
TOKEN="$(aws rds generate-db-auth-token --hostname $RDSHOST --port 3306 --region us-west-2 --username {db username})"

Führen Sie je nach verwendetem Zertifikat (RootCA oder Bundle) einen der folgenden Befehle aus:

RootCA-Befehl:

mysql --host=$RDSHOST --port=3306 --ssl-ca=/sample_dir/rds-ca-2019-root.pem --enable-cleartext-plugin --user={db username} --password=$TOKEN

Bundle-Befehl:

mysql --host=$RDSHOST --port=3306 --ssl-ca=/sample_dir/rds-combined-ca-bundle.pem --enable-cleartext-plugin --user={db username} --password=$TOKEN

**Hinweis:**Wenn Sie einen MariaDB-Client verwenden, ist die Option --enable-cleartext-plugin nicht erforderlich.

Herstellen einer Verbindung zur RDS-DB-Instance mit Anmeldeinformationen einer IAM-Rolle und SSL-Zertifikaten

Nachdem Sie die Zertifikatsdatei heruntergeladen haben, stellen Sie mit SSL eine Verbindung zur DB-Instance her. Weitere Informationen finden Sie unter Verbinden mit einer DB-Instance, auf der die MySQL-Datenbank-Engine ausgeführt wird.

Verwandte Informationen

IAM-Datenbankauthentifizierung für MariaDB, MySQL und PostgreSQL

Was sind die geringsten Rechte, die ein Benutzer benötigt, um eine Amazon RDS-DB-Instance zu erstellen, zu löschen, zu ändern, zu sichern und wiederherzustellen?

AWS OFFICIAL
AWS OFFICIALAktualisiert vor einem Jahr