Warum erhalte ich die Fehlermeldung „Access Denied“ (Zugriff verweigert), wenn ich versuche, eine Verbindung zu Amazon RDS für MySQL mithilfe der IAM-Authentifizierung herzustellen?

Lesedauer: 4 Minute
0

Ich versuche mithilfe der AWS Identity Access Management (IAM) -Authentifizierung eine Verbindung zu meiner Amazon Relational Database Service (Amazon RDS) für MySQL-Instance herzustellen. Ich erhalte jedoch immer wieder die Fehlermeldung „Access Denied“ (Zugriff verweigert): FEHLER 1045 (28000): Zugriff verweigert für Benutzer 'root'@'10.0.4.253' (mit Passwort: YES) Wie kann ich dies beheben?

Kurzbeschreibung

Wenn Sie über die IAM-Authentifizierung keine Verbindung zu einer Amazon RDS for MySQL oder Aurora-DB-Instance herstellen können, überprüfen Sie die folgenden Gründe:

  • Die IAM-Authentifizierung ist deaktiviert
  • Unzureichende IAM-Rollenberechtigungen
  • Datenbankbenutzer ist falsch konfiguriert
  • Falsche Verbindungszeichenfolge

Lösung

Die IAM-Authentifizierung ist deaktiviert

Standardmäßig ist die IAM-Authentifizierung deaktiviert. Überprüfen Sie die Konfigurationseinstellungen für Ihren Cluster von Amazon RDS für MySQL und stellen Sie sicher, dass die IAM-Authentifizierung deaktiviert ist. Von der Amazon-RDS-Konsole aus können Sie die Instance ändern, indem Sie Datenbankauthentifizierung wählen. Wählen Sie dann Passwort und IAM-Datenbankauthentifizierung und Fortfahren, um Ihre Konfigurationseinstellungen zu aktualisieren.

Hinweis: Wenn Sie beim Aktualisieren Ihrer Cluster-Konfigurationseinstellungen Apply Immediately (Sofort anwenden) wählen, werden alle ausstehenden Änderungen sofort (statt während eines Wartungsfensters) angewendet. Diese Aktion kann zu einem längeren Ausfall Ihrer Amazon-RDS-for-MySQL-Instance führen. Weitere Informationen finden Sie unter Verwendung der Einstellung „ApplyImmediately“.

Unzureichende IAM-Rollenberechtigungen

Um mithilfe der IAM-Datenbankauthentifizierung erfolgreich eine Verbindung zu Ihrer Amazon-RDS-for-MySQL-Instance herzustellen, müssen Sie Zugriff auf die Aktion rds-db:connect haben. Die Aktion rds-db:connect ermöglicht Verbindungen zur DB-Instance.

Beispiel:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "rds-db:connect"
      ],
      "Resource": [
        " arn:aws:rds-db:region:account-id:dbuser:(DbiResourceId or DbClusterResourceId)/db-user-name"
      ]
    }
  ]
}

Hinweis: Ersetzen Sie db-username durch den Datenbankkonto-Benutzer, der mit der IAM-Authentifizierung verknüpft ist.

Stellen Sie außerdem sicher, dass Sie die richtige Ressourcen-ID verwenden (anstatt nur den ARN anzugeben). Um die Ressourcen-ID einer DB-Instance zu ermitteln, wählen Sie die Registerkarte Ressource in der AWS-Managementkonsole. Wählen Sie dann die Registerkarte Konfiguration, um die Ressourcen-ID anzuzeigen.

Weitere Informationen zu den in der Beispiel-IAM-Richtlinie aufgeführten Elementen finden Sie unter Erstellen und Verwenden einer IAM-Richtlinie für den IAM-Datenbankzugriff.

Datenbankbenutzer ist falsch konfiguriert

Bei Amazon RDS für MySQL wird die IAM-Authentifizierung von AWSAuthenticationPlugin abgewickelt. Um über die IAM-Authentifizierung eine Verbindung zu Ihrer Instance von Amazon RDS für MySQL herzustellen, müssen Sie daher AWSAuthenticationPlugin verwenden. Führen Sie den folgenden Befehl aus, um zu bestätigen, dass dieses Plugin Ihrer IAM-Rolle zugeordnet ist:

select user,plugin,host from mysql.user where user like '%db-user-name%';

Sie erhalten eine Ausgabe,die der folgenden ähnelt:

+------+-------------------------+------+
| user | plugin | host |
+------+-------------------------+------+
| root | AWSAuthenticationPlugin | % |
+------+-------------------------+------+
1 row in set (0.00 sec)

Wenn die IAM-Rolle auf die Verwendung eines bestimmten Hosts beschränkt ist, stellen Sie sicher, dass Sie den richtigen Hostnamen verwenden. Stellen Sie außerdem sicher, dass Sie über die erforderlichen Berechtigungen für den Zugriff auf die angegebene Datenbank verfügen.

Verwenden Sie die folgende Befehlssyntax, um die einem Benutzer erteilten Berechtigungen anzuzeigen:

show grants for <user>;

Verwenden Sie die folgende Befehlssyntax, um einem anderen Benutzer Berechtigungen zu erteilen:

grant select on <mydb>.<mytable> to <user>;

Falsche Verbindungszeichenfolge

Wenn Sie eine Verbindung zur Datenbank von Amazon RDS für MySQL herstellen, müssen Sie die Option --enable-cleartext-plugin in Ihrer Verbindungszeichenfolge verwenden. Die Syntax —enable-cleartext-plugin wird für die Übergabe des Passworts verwendet und fungiert als Authentifizierungstoken.

Beispiel:

$ mysql -h <endpoint> -P 3306 --enable-cleartext-plugin --user=RDSConnect --password=$

Die Syntax —enable-cleartext-plugin zeigt auch an, dass AWSAuthenticationPlugin für die Datenbankverbindung verwendet werden muss. Das Plug-In wird für die Konfiguration des Datenbankbenutzers benötigt und ist erforderlich, damit die IAM-Authentifizierung funktioniert. Wenn AWSAuthenticationPlugin falsch konfiguriert ist, funktioniert die IAM-Authentifizierung nicht. Infolgedessen erhalten Sie einen Fehler „Zugriff verweigert“, wenn Sie versuchen, eine Verbindung zu Ihrer Datenbank herzustellen.

Da Authentifizierungstoken aus mehreren Zeichen bestehen (was in der Befehlszeile unhandlich sein kann), speichern Sie das Token stattdessen in einer Umgebungsvariablen. Verwenden Sie dann diese Variable, wenn Sie eine Verbindung zu Ihrer MySQL-DB-Instance herstellen. Beispiel:

RDSHOST="rdsmysql.123456789012.us-west-2.rds.amazonaws.com"
TOKEN="$(aws rds generate-db-auth-token --hostname $RDSHOST --port 3306 --region us-west-2 --username db-user-name)"
mysql --host=$RDSHOST --port=3306 --enable-cleartext-plugin --user=db-user-name --password=$TOKEN

Weitere Hinweise zum Herstellen einer Verbindung zu einer MySQL-DB-Instance mithilfe einer Umgebungsvariablen finden Sie unter Verbindumg mit einer DB-Instance.


Ähnliche Informationen

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

IAM-Datenbankauthentifizierung

IAM-Datenbankauthentifizierung für MySQL und PostgreSQL