Warum kann ich mit dem RDS-Proxy keine Verbindung zu meiner Amazon RDS DB- oder Amazon Aurora-DB-Instance herstellen?

Lesedauer: 6 Minute
0

Ich kann über den Amazon-RDS-Proxy keine Verbindung zu meinem Amazon Relational Database Service (Amazon RDS) oder meiner Amazon Aurora DB-Instance herstellen.

Kurzbeschreibung

Es kann aus mehreren Gründen zu Verbindungsfehlern mit dem RDS-Proxy kommen. Die folgenden Probleme sind häufige Ursachen für Verbindungsfehler mit dem RDS-Proxy, selbst wenn sich der RDS-Proxy im Status Verfügbar befindet:

  • Sicherheitsgruppenregeln, entweder in der DB-Instance oder im RDS-Proxy, verhindern die Verbindung.
  • Der RDS-Proxy funktioniert nur innerhalb einer Virtual Private Cloud (VPC), sodass Verbindungen außerhalb des privaten Netzwerks fehlschlagen.
  • Die DB-Instance akzeptiert die Verbindung nicht, weil sie geändert wurde oder sie sich in einem nicht verfügbaren Zustand befindet.
  • Für den systemeigenen Benutzernamen- und Passwortmodus: Sie haben falsche Anmeldeinformationen verwendet.
  • Für die DB-Authentifizierung von AWS Identity and Access Management (IAM): Der IAM-Benutzer oder die IAM-Rolle, die dem Client zugeordnet ist, ist nicht autorisiert, eine Verbindung mit dem RDS-Proxy herzustellen.

Behebung

Hinweis: Wenn Sie den RDS-Proxy mit einer RDS-DB-Instance oder einem Aurora-DB-Cluster verwenden, der die IAM-Authentifizierung verwendet, müssen alle Benutzer ihre Verbindungen authentifizieren. Stellen Sie sicher, dass alle Benutzer, die sich über einen Proxy verbinden, ihre Verbindung mit Benutzernamen und Passwörtern authentifizieren. Weitere Informationen zur IAM-Unterstützung im RDS-Proxy finden Sie unter Einrichten von IAM-Richtlinien.

Stellen Sie sicher, dass der Client den RDS-Proxy innerhalb des privaten Netzwerks einer VPC erreichen kann

Der RDS-Proxy kann nur innerhalb einer VPC verwendet werden und kann nicht öffentlich zugänglich sein (obwohl dies der Fall für die DB-Instance sein kann). Wenn Sie eine Verbindung außerhalb eines privaten Netzwerks herstellen, tritt bei Ihrer Verbindung ein Timeout auf. Beachten Sie die folgenden Attribute für die Verbindung innerhalb einer VPC:

  • Wenn der Client derselben VPC angehört, überprüfen Sie, ob die Sicherheitsgruppe Ihres RDS-Proxys Verbindungen vom Client über den Standardport zulässt. Die Standardports sind 3306 für MySQL und 5432 für PostgreSQL. Fügen Sie der Sicherheitsgruppe, die der VPC zugeordnet ist, Regeln hinzu, um den erforderlichen Datenverkehr zuzulassen.
  • Wenn der Client von einer anderen VPC stammt, verwenden Sie VPC-Peering. Um den Datenverkehr von der anderen VPC zu verwalten, überprüfen Sie die Sicherheitsgruppen- und Routing-Tabellen.
  • Wenn Ihr Client aus einem Unternehmensnetzwerk stammt, verwenden Sie AWS Direct Connect oder AWS Site-to-Site VPN, um eine direkte Verbindung zur VPC herzustellen.
  • Wenn Ihr Client eine Verbindung über das öffentliche Internet herstellen muss, verwenden Sie SSH-Tunneling als Zwischenhost. Auf diese Weise können Sie innerhalb derselben VPC eine Verbindung zum RDS-Proxy herstellen.

Stellen Sie sicher, dass der RDS-Proxy eine Verbindung zur DB-Instance herstellen kann

Um den Verbindungspool zu verwalten, muss der RDS-Proxy eine Verbindung mit Ihrer DB-Instance herstellen. Diese Verbindung verwendet den Benutzernamen und das Passwort, die im AWS Secrets Manager gespeichert sind. Verwenden Sie die folgenden bewährten Methoden, um sicherzustellen, dass der RDS-Proxy eine Verbindung zu Ihrer DB-Instance herstellen kann:

  • Überprüfen Sie, ob die Anmeldeinformationen im Secrets Manager gültig sind und eine Verbindung zur DB-Instance hergestellt werden kann.
  • Stellen Sie sicher, dass die Sicherheitsgruppe Ihrer DB-Instance Datenverkehr vom RDS-Proxy zulässt. Ermitteln Sie dazu zunächst die Sicherheitsgruppe der DB-Instance und des RDS-Proxys.

Wenn der RDS-Proxy und die DB-Instance dieselbe Sicherheitsgruppe verwenden, stellen Sie sicher, dass die Vererbungsregel der Sicherheitsgruppe in den eingehenden Regeln enthalten ist:

Inbound rules for the RDS instance in order to allow connections from RDS proxy:
Protocol : TCP
Port Range : Port on which the DB engine is running on the RDS instance
Source : Common security group (for self referencing the security group)

Wenn sie unterschiedliche Sicherheitsgruppen verwenden, geben Sie die Sicherheitsgruppe des RDS-Proxys in der Regel für den eingehenden Datenverkehr der Sicherheitsgruppe der DB-Instance an:

Inbound rules for the RDS instance in order to allow connections from RDS proxy:
Protocol : TCP
Port range : Port on which the DB engine is running on the DB instance
Source : Security group of RDS Proxy

Der RDS-Proxy initiiert die Verbindung zur Verwaltung des Pools. Daher müssen Sie zulassen, dass der ausgehende Datenverkehr die DB-Instance erreicht. Dazu muss die RDS-Proxy-Sicherheitsgruppe den erforderlichen Datenverkehr in ihrer Regel für den ausgehenden Verkehr zulassen:

Protocol : TCP
Port range : Port on which the DB engine is running on the RDS instance
Destination : Security group of DB instance

Note: If you already have the following outbound rules attached to the security group of the RDS Proxy, then there is no need to explicitly add the security group.
Outbound rules: ALL --- 0.0.0.0/0
  • Stellen Sie sicher, dass die dem RDS-Proxy zugeordnete IAM-Rolle die für die Verbindungen erforderlichen Anmeldeinformationen abrufen und verwenden kann:

Die IAM-Rolle muss die Vertrauensrichtlinie für rds.amazonaws.com einhalten.

Die IAM-Richtlinie muss Zugriff haben, um die Aktion secretsmanager:GetSecretValue für das Geheimnis aufrufen zu können.

Die IAM-Richtlinie muss Zugriff haben, um die Aktion kms:Decrypt auf dem Schlüssel des AWS Key Management Service (AWS KMS) aufzurufen, der das Geheimnis verschlüsselt hat. Sie können die Details des KMS-Schlüssels, der von Secrets Manager verwendet wird, über die AWS KMS-Konsole abrufen. Beachten Sie, dass die KMS-Schlüssel-ID für den Abschnitt Ressource verwendet werden muss. Siehe folgende Beispielrichtlinie:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "secretsmanager:GetSecretValue",
      "Resource": [
        "arn:aws:secretsmanager:region:account_id:secret:secret_name"
      ]
    },
    {
      "Effect": "Allow",
      "Action": "kms:Decrypt",
      "Resource": "arn:aws:kms:region:account_id:key/key_id",
      "Condition": {
        "StringEquals": {
          "kms:ViaService": "secretsmanager.region.amazonaws.com"
        }
      }
    }
  ]
}

Hinweis: Achten Sie darauf, account_id, secret_name, region, account_id und key_id durch Ihre relevanten Werte zu ersetzen.

  • Weitere Informationen darüber, was den Proxy daran hindern könnte, eine Verbindung zur DB-Instance herzustellen, erhalten Sie, wenn Sie den Befehl describe-db-proxy-targets ausführen. Überprüfen Sie dann die Struktur TargetHealth im Output. Weitere Informationen zur Verbindungsintegrität des RDS-Proxy-Ziels finden Sie in den Feldern Status, Grund und Beschreibung:
aws rds describe-db-proxy-targets --db-proxy-name $DB_PROXY_NAME

Weitere Informationen finden Sie unter Überprüfen der Konnektivität für einen Proxy.

Überprüfen Sie, ob die DB-Instance derzeit Verbindungen akzeptiert

Überprüfen Sie den aktuellen Status Ihrer DB-Instance und stellen Sie sicher, dass sie sich im Status VERFÜGBAR befindet. Weitere Informationen zur Überprüfung des Status Ihrer DB-Instance finden Sie in der Amazon RDS- und Aurora-Dokumentation zum DB-Instance-Status.

Stellen Sie sicher, dass der IAM-Benutzer/die IAM-Rolle einem Client mit den erforderlichen Berechtigungen zugeordnet ist

Hinweis: Dieser Schritt ist nur erforderlich, wenn Sie die IAM-DB-Authentifizierung auf Ihrem RDS-Proxy aktiviert haben.

Der Client muss ein Token generieren, um die Verbindungsanfrage zu autorisieren. Dazu müssen der IAM-Benutzer und die IAM-Rolle, die diesem Client zugeordnet sind, über die IAM-Richtlinie rds-db:connect verfügen. Stellen Sie außerdem sicher, dass Sie die RDS-Proxy-ID im ARN für das Resources-Attribut in der Richtlinie verwenden:

"Resource": "arn:aws:rds-db:us-east-2:1234567890:dbuser:prx-ABCDEFGHIJKL01234/db_user"

Weitere Informationen finden Sie unter Erstellen und Verwenden einer IAM-Richtlinie für den IAM-Datenbankzugriff.

Überprüfen Sie die RDS-Proxy-Protokolle

Schalten Sie die Erweiterte Logging-Feature für den RDS-Proxy ein. Die Protokollierung liefert detaillierte Informationen zu den SQL-Anweisungen. Diese Protokolle sind eine nützliche Ressource, um Ihnen zu helfen, bestimmte Authentifizierungsprobleme zu verstehen. Da dies den Leistungsaufwand erhöht, empfiehlt es sich, sie nur zum Debuggen zu aktivieren. Um den Aufwand zu minimieren, deaktiviert der RDS-Proxy diese Einstellung automatisch 24 Stunden nach dem Einschalten.

Weitere Informationen

Verwenden des Amazon-RDS-Proxys

Richten Sie gemeinsam genutzte Datenbankverbindungen mit dem Amazon-RDS-Proxy ein