Amazon RDS Proxy

Amazon RDS Proxy
Amazon RDS Proxy ist ein Datenbank -Proxy -Dienst für AWS RDS zur Verbesserung der Skalierbarkeit, Verfügbarkeit, Sicherheit und Ausfallsicherheit von Anwendungen. Dies ist ein hervorragender Vorteil für Anwendungen mit vielen offenen Verbindungen zur Datenbank und zum häufigen Öffnen und Schließen dieser Verbindungen. Mit AWS RDS Proxy müssen wir weniger Verbindungen zur Datenbank aufrechterhalten.

Ein großartiges Merkmal von RDS Proxy ist, dass es vollständig verwaltet wird. Im Gegensatz zu herkömmlichen Proxy -Servern müssen Sie die Kopfschmerzen beim Bereitstellen, Verwalten und Patch nicht mit den neuen Updates behalten. Es handelt sich um eine serverlose Anwendung und skaliert automatisch, um sich an Ihre Anforderungen anzupassen.

Der Amazon RDS -Proxy kann für Anwendungen verwendet werden, die auf serverloser Architektur basieren und in Containern auf ECS oder EC2 ausgeführt werden.

Wie funktioniert RDS -Proxy??

Mit dieser Funktion können Anwendungen ihre Datenbankverbindungen bündeln und freigeben. Anstatt Ihre Anwendung direkt an die RDS -Datenbank zu verbinden, verbinden wir sie mit dem RDS -Proxy. Amazon RDS Proxy fungiert als Verbindungsmediator zwischen Ihrem Anwendungscode und der RDS -DB -Instanz. Es behält sich einen Pool etablierter Verbindungen zur Datenbank vor, die wiederverwendet und mit anderen Kunden geteilt werden können. Auf diese Weise werden nur wenige Verbindungen zur Datenbank hergestellt, wodurch die neue Verbindungslast in der Datenbank verringert wird.

Im Falle eines Datenbankversagens ruft der RDS-Proxy die Anforderungen direkt an die neue DB-Instanz um. Ein weiterer wichtiger Vorteil ist, dass wir die IAM -Authentifizierung für die Datenbanksicherheit konfigurieren können, ohne die Datenbankanmeldeinformationen direkt in den Anwendungscode einzulegen. Es hat auch die Bestimmung, AWS Secrets Manager für zentral verwaltete Datenbankanmeldeinformationen zu verwenden.

Versuchsaufbau

Um zu demonstrieren, wie AWS RDS Proxy funktioniert, werden wir eine Arbeitsumgebung mit den folgenden Netzwerkressourcen einrichten:

  1. Ein AWS VPC enthält eine RDS -DB -Instanz und eine EC2 -Instanz. (Wir verwenden den von AWS bereitgestellten Standard -VPC).
  2. Mindestens zwei Subnetze und ein Internet -Gateway
  3. Mindestens zwei Subnetze in verschiedenen Verfügbarkeitszonen.

Um diesen Leitfaden kompakt zu machen, werden wir nicht beschreiben, wie ein EC2 und eine RDS -Instanz eingerichtet werden sollen, da sie relativ einfach sind. Wir haben auch einen IAM -Benutzer mit der Administrator -Access -Richtlinie eingerichtet. Die wesentlichen Schritte dieses Leitfadens sind hier beschrieben:

  1. Erstellen von Sicherheitsgruppen und Überprüfung der Datenbankkonnektivität.
  2. Verwenden von AWS Secret Manager, um Datenbankanmeldeinformationen zu verarbeiten.
  3. Erstellen einer IAM -Rolle und Definieren einer Richtlinie, mit der RDS -Proxy zugreifen kann, um auf Geheimnisse zuzugreifen, die mit AWS Secret Manager erstellt wurden.
  4. Erstellen und Konfigurieren von RDS -Proxy.
  5. Verbindung mit der RDS -DB -Instanz über RDS Proxy herstellen.

Erste Schritte mit RDS Proxy

Ich denke. Das folgende Bild zeigt den Überblick über diese Anleitung:

Erstellen von Sicherheitsgruppen und Überprüfung der Datenbankkonnektivität.

Schritt 1. Navigieren Sie zum AWS VPC -Abschnitt und wählen Sie unter der Spalte "Sicherheit" Sicherheitsgruppen aus dem Navigationsbereich auf der linken Seite aus:

Schritt 2. Klicken Sie nun auf die Schaltfläche "Sicherheitsgruppe erstellen" und fügen Sie eine Sicherheitsgruppe (hier 'EC2_SECGRP') für die EC2. Geben Sie die grundlegenden Details gemäß Ihrer Wahl ein:

Fügen Sie eine eingehende Regel hinzu, um eingehende (eingehende) SSH -Verbindung zu EC2 zuzulassen. Fügen Sie eine ausgehende Regel hinzu, um einen ausgehenden (ausgehenden) Verkehr aus der EC2 -Instanz zuzulassen.

Fügen Sie eine andere Sicherheitsgruppe (hier 'RDS_SECGRP') für die RDS -Instanz hinzu und geben Sie die grundlegenden Details ein:

Fügen Sie eine eingehende Regel hinzu, damit nur die TCP -Verbindung in der RDS -DB -Instanz (auf Port 3306) aus der EC2 -Instanz (EC2_SECGRP in der Quelle angeben) zuzulassen. Fügen Sie eine andere eingehende Regel hinzu, damit nur die TCP -Verbindung in der RDS -DB -Instanz (auf Port 3306) aus dem Proxy (Proxy_secgrp in der Quelle angeben) zuzulassen. Fügen Sie die ausgehende Regel hinzu, um einen ausgehenden (ausgehenden) Verkehr von der RDS -Instanz zu ermöglichen.

Fügen Sie in ähnlicher Weise eine weitere Sicherheitsgruppe für Proxy (proxy_secgrp) hinzu und geben Sie die grundlegenden Details ein:

Die drei von uns erstellten Sicherheitsgruppen sind jetzt verfügbar:

Durch die Auswahl einer Sicherheitsgruppe können Sie die Details sehen:

1) EC2_SECGRP: Angehängt mit der EC2 -Instanz.

2) RDS_SECGRP: Angehängt mit der RDS -Instanz.

3) proxy_secgrp: mit dem Proxy angehängt.

Schritt 3. Gehen Sie nun zum RDS-Dashboard und wählen Sie Ihre Ziel-RDS-DB-Instanz (hier 'DB-LinuxHint'). Suchen Sie unter der Registerkarte "Konnektivität & Sicherheit" den Endpunkt für die DB.

Schritt 4. Gehen Sie zum EC2 -Dashboard und wählen Sie die EC2 -Instanz aus, aus der Sie eine Verbindung zur RDS -DB -Instanz herstellen möchten. Wählen Sie die Option "Verbinden" aus:

Schritt 5. Wählen Sie auf dem Assistenten "Connect to Instance" die Option "EC2-Instanzverbindung" aus, eine browserbasierte SSH-Verbindung:

Ein neues Browserfenster wird geöffnet, wenn Sie die hier gezeigte Schaltfläche "Verbinden" auswählen:

Schritt 6. Verwenden Sie aus diesem CLI -Fenster das folgende Befehlsformat, um die EC2 -Konnektivität mit der RDS -DB -Instanz zu testen:

$ mysql -h -P 3306 -U -P

Verwenden Sie Ihren RDS -DB -Instanzendpunkt anstelle von "RDS DB -Endpunkt" und den Namen des DB -Benutzers anstelle von "Benutzername" ("admin" in unserem Fall). Geben Sie das DB -Passwort ein, wenn Sie gefragt werden. Wenn die Authentifizierung erfolgreich ist, sehen Sie die MySQL -Eingabeaufforderung auf der CLI:

Verwenden von AWS Secret Manager, um Datenbankanmeldeinformationen zu verarbeiten.

Damit der RDS -Proxy eine Verbindung zum DB -Benutzer herstellen kann, benötigt der DB -Benutzer im AWS Secrets Manager ein Geheimnis. Diese Geheimnisse werden vom RDS -Proxy verwendet, um einen Datenbankverbindungspool zu verarbeiten.

Schritt 1. Besuchen Sie den Abschnitt "Secrets Manager" aus der AWS -Konsole und wählen Sie "ein neues Geheimnis speichern":

Schritt 2. Wählen Sie im Fenster "Wählen Sie geheimes Typ" die Option Anmeldeinformationen für die RDS -Datenbank aus.'Geben Sie im folgenden Unterabschnitt den Benutzernamen und das Kennwort für Ihren Datenbankbenutzer ein:

Schritt 3. Wählen Sie unter dem Dropdown-Menü "Auswählen des Verschlüsselungsschlüssels" als Nächst. Weiter klicken.

Schritt 4. Geben Sie nun Ihrem Geheimnis einen geeigneten Namen und eine kurze Beschreibung dafür (optional).

Schritt 5. Wir überspringen die Tags und die automatischen geheimen Rotationsoptionen. Klicken Sie vorerst auf Weiter:

Schritt 6. Sie können einige Konfigurationseinstellungen im Zusammenhang mit dem Geheimnis und einem Beispielcode sehen. Überspringen Sie sie einfach und speichern Sie Ihr Geheimnis weiter, indem Sie auf die Schaltfläche "Store" drücken:

Wenn die oben genannten Schritte ausgeführt werden, wird Ihr geheimer Name auf der Seite "Secrets Manager" angezeigt. Kopieren Sie aus den geheimen Details das ARN Ihres Geheimnisses, das wir später brauchen werden.

Erstellen einer IAM -Rolle und Definieren einer Richtlinie, mit der RDS -Proxy zugreifen kann, um auf Geheimnisse zuzugreifen, die mit AWS Secret Manager erstellt wurden.

Schritt 1. Gehen Sie zum IAM -Dashboard und wählen Sie aus dem linken Feld "Rollen" und wählen Sie dann "Rolle erstellen":

Schritt 3. Von den mehreren Optionen unter dem 'Rds' Überschrift, wählen:

Schritt 4. Wählen Sie nun "Weiter" und geben Sie die Schaltfläche "Richtlinien erstellen" ein. Ein neuer Browser wird hier öffnen; Wählen Sie die Registerkarte JSON aus und ersetzen Sie die bereits Richtlinienanweisungen durch die folgenden:


"Version": "2012-10-17",
"Stellungnahme": [

"Sid": "Visualeditor0",
"Effekt": "erlauben",
"Aktion": [
"SecretsManager: GetRandompassword",
"SecretsManager: CreateSecret",
"SecretsManager: ListseCrets"
],
"Ressource": "*"
,

"Sid": "Visualeditor1",
"Effekt": "erlauben",
"Aktion": "SecretsManager:*",
"Ressource": [
"Put_your_secret_arn_here"
]

]

Ersetzen Sie einfach das Etikett "put_your_secret_arn_here" durch den geheimen ARN -Wert in Ihrem Fall. Fügen Sie Tags (optional) hinzu und wählen Sie Ihre Überprüfungsrichtlinie fort und geben Sie Ihrer Richtlinie einen Namen ("RDS-Proxy-Policy") und klicken Sie auf die Schaltfläche "Richtlinien erstellen".

Schritt 5. Kehren Sie nach dem Konfigurieren Ihrer Richtlinien zum Fenster "Rollen" im Browser zurück und wählen Sie die Schaltfläche "Aktualisieren" und suchen Sie und wählen Sie die gerade erstellten Richtlinie aus:

Schritt 6. Geben Sie nun Ihrer Rolle und einer kurzen Beschreibung einen Namen an und optional können Sie die Tags hier hinzufügen. Wählen Sie fort, indem Sie "Weiter: Überprüfung" auswählen und schließlich "Rolle erstellen" -Rolle erstellen.'Ihre Rolle wird jetzt erstellt:

Erstellen und Konfigurieren von RDS -Proxy.

Es ist jetzt an der Zeit, RDS -Proxy zu erstellen und zu konfigurieren, was letztendlich unsere Sicherheitsgruppe RDS_SECGRP, das Geheimnis und die oben erstellte Rolle nutzt.

Schritt 1. Gehen Sie zum RDS -Dashboard und wählen Sie 'Proxies' und wählen Sie dann 'Proxy erstellen':

Schritt 2. In dem Assistenten "Proxy erstellen.

Schritt 3. Deaktivieren Sie das Feld, das entspricht 'Erforderliche Transportschichtsicherheit.''

Schritt 4. Führen Sie den Wert "Leerlauf -Client -Verbindungsverbindungs ​​-Timeout" auf den Standardwert von 30 Minuten.

Schritt 5. Wählen Sie unter "Zielgruppenkonfiguration" Ihre Ziel-RDS-DB-Instanz aus dem Dropdown-Menü Datenbank aus.

Schritt 6. Halten Sie den Wert "Connection Pool Maximum Verbindungen" auf den Standardwert von "100" auf

Schritt 7. Im Abschnitt Konnektivität gibt es mehrere Felder:

  1. Secrets Manager Secret: Wählen Sie hier das Geheimnis aus, das wir früher in diesem Handbuch erstellt haben (Überschrift 1).
  2. IAM -Rolle: Wählen Sie die zuvor erstellte Rolle (Überschrift 2).
  3. IAM Authentifizierung: Fürs Erste deaktiviert.
  4. Unternetze: Wählen Sie mindestens zwei Subnetze in verschiedenen Verfügbarkeitszonen aus.
  5. Zusätzliche Konnektivitätskonfiguration (VPC -Sicherheitsgruppe): Verwenden Sie hier die Sicherheitsgruppe 'proxy_secgrp'.

Schritt 8. Überprüfen Sie unter der Konfiguration "Erweiterte Konfiguration" die "Enable Enhanced Logging" und wählen Sie schließlich "Proxy erstellen".''

Warten Sie nun, bis der Proxy verfügbar ist, und kopieren Sie den Proxy -Endpunkt, um die Konnektivität von EC2 zu testen.

Verbindung mit der RDS -DB -Instanz über RDS Proxy herstellen.

Jetzt werden wir die Konnektivität unserer RDS -DB -Instanz aus der EC2 überprüfen.

Schritt 1. Gehen Sie zum EC2 -Management -Dashboard, wählen Sie Instanzen und wählen Sie Ihre Ziel -EC2 -Instanz aus, aus der wir eine Verbindung zur RDS DB -Instanz herstellen werden. Wählen Sie 'Connect.''

Schritt 2. Wählen Sie auf dem Assistenten "Connect to Instance" die Option "EC2-Instanzverbindung" aus, eine browserbasierte SSH-Verbindung:

Ein neues Browserfenster wird geöffnet, wenn Sie wie früher in diesem Tutorial die Schaltfläche "Verbinden" auswählen.

Schritt 3. Verwenden Sie aus diesem CLI -Fenster das folgende Befehlsformat, um die EC2 -Konnektivität mit der RDS -DB -Instanz über den RDS -Proxy -Endpunkt zu testen:

$ mysql -h -P 3306 -U -P

Verwenden Sie Ihren RDS -Proxy -Endpunkt anstelle des "Proxy -Endpunkts" und des Namens des DB -Benutzers anstelle von "Benutzername".'Geben Sie das DB -Passwort ein, wenn Sie gefragt werden. Wenn die Authentifizierung erfolgreich ist, sehen Sie die MySQL -Eingabeaufforderung auf der CLI:

Abschluss

In diesem Leitfaden haben wir gelernt, einen RDS -Proxy auf AWS einzurichten. Es ist sehr vorteilhaft für große Anwendungen, einschließlich serverloser, die viele offene Verbindungen haben. Es reduziert die Failover -Zeit für Aurora- und RDS -Datenbanken erheblich. Für viele Anwendungen kann es leicht verwendet werden, ohne den Code zu ändern.