In diesem Blog werden wir mögliche Wege erörtern, um eine Verbindung zu einer Amazon RDS-Datenbankinstanz, die sich in einem privaten Subnetz in der AWS-Cloud befindet, von einer externen VPC aus herzustellen, ohne den regulären AWS-Endpunkt zu verwenden.
Was ist der AWS PrivateLink?
AWS PrivateLink bietet eine sichere Methode für private Konnektivität zwischen Amazon VPCs, AWS-Services und lokalen Anwendungen im AWS-Netzwerk. Um die Kommunikation mit dem Service von Ihren privaten Subnetzen aus zu ermöglichen, benötigen Sie kein Internet-Gateway, kein NAT-Gerät, keine öffentliche IP-Adresse, keine AWS-Direktverbindung und keine AWS Site-to-Site-VPN-Verbindung. Dadurch können Kunden einfach und sicher auf AWS-Services zugreifen, indem sie das private Netzwerk von Amazon nutzen und die Konnektivität zu AWS-Services über Amazon VPC-Endpunkte herstellen. PrivateLink bietet das gleiche Maß an Sicherheit und Leistung wie virtuelle Netzwerk-Appliances oder benutzerdefinierte Algorithmen zur Überprüfung des Datenverkehrs.

Wenn wir einen Schnittstellen-VPC-Endpunkt für einen Service in unserer VPC erstellen, um PrivateLink zu nutzen, generieren wir ein Elastic Network Interface (ENI) mit einer privaten IP-Adresse im Subnetz, das als Eingangspunkt für den für den Service bestimmten Verkehr dient. Amazon PrivateLink-Service-Endpunkte werden in unseren VPCs als ENIs mit privaten IPs angezeigt.
Warum brauchen wir den AWS PrivateLink für RDS?

Der Amazon Relational Database Service (RDS) ist ein verwalteter SQL-Datenbankdienst, der von Amazon Web Services (AWS) bereitgestellt wird. Amazon RDS unterstützt eine Reihe von Datenbank-Engines zum Speichern und Organisieren von Daten. Wenn wir einen neuen RDS in unserer AWS-Verwaltungskonsole erstellen, erhalten wir einen Endpunkt, der für die Verbindung mit der Datenbankinstanz verwendet werden kann:
Wenn die Datenbankinstanz in einem privaten Teilnetz bereitgestellt wird, können wir auf den Endpunkt von der VPC aus zugreifen, in der der RDS erstellt wurde. Was passiert jedoch, wenn wir eine Verbindung zu einer Datenbank von einem anderen AWS-Netzwerk aus herstellen möchten? In diesem Fall gibt es mehrere Möglichkeiten.
- VPC-Peering
- VPN-Verbindung
- AWS PrivateLink
VPC-Peering und VPN-Verbindungen sind gängige Lösungen; in den meisten Fällen lassen sie jedoch den gesamten Datenverkehr zu, und es kann zu Komplikationen bei der Konfiguration, überlappenden CIDR-Blöcken, Sicherheit usw. kommen.
Wenn wir nur Datenbankverbindungen zulassen wollen, ist AWS PrivateLink sehr praktisch und einfach zu konfigurieren.
Komponenten
In diesem Lernprogramm wird erklärt, wie man eine private AWS RDS-Datenbankinstanz in Konto A von einer externen AWS VPC in Konto B aus verbindet.
Beginnen wir mit den Komponenten, die wir zum Aufbau einer Lösung benötigen.
- VPC im Konto A

- VPC in Konto B

- RDS in Konto A - für dieses Tutorial werden wir Aurora MySQL Serverless verwenden und sicherstellen, dass es sich in privaten Subnetzen in VPC-A befindet

- Network Load Balancer (NLB) in Konto A mit der RDS-Instanz als Zielgruppe
- VPC-Endpunktdienst, der auf den NLB in Konto A verweist
- VPC-Endpunkt in Konto B (VPC-B), der auf den VPC-Endpunktdienst in Konto A verweist.
Konfiguration

VPC
Hier haben wir eine Standardkonfiguration mit privaten Subnetzen und NAT-Gateways verwendet. Internet-Gateways (IGW) und öffentliche Subnetze sind nicht erforderlich, haben aber keinen Einfluss auf die Funktionalität, so dass Sie sie je nach Anwendungsfall einrichten können.
RDS
RDS muss sich in privaten Subnetzen befinden, und der öffentliche Zugang sollte deaktiviert sein. Wir haben keine Verbindung über die von AWS erstellten Standard-Endpunkte hergestellt. Ein wichtiger Teil ist, die CIDR von VPC-B in der RDS-Sicherheitsgruppe in Konto A zuzulassen:

NLB
Wir müssen eine Zielgruppe mit der privaten IP-Adresse der Datenbankinstanz erstellen und dann den Netzwerk-Loadbalancer damit konfigurieren.
- Zielgruppeneinstellungen
Typ: IP-Adresse
Name: RDS-A
VPC: VPC-A
Protokoll: TCP
Anschluss: 3306
Wenn ein tatsächliches Ziel hinzugefügt wird, muss die private IP-Adresse der RDS-Instanz verwendet werden. Dies kann mit dem Befehl nslookup auf dem defaulVPC in A accountt durchgeführt werden:
Unsere Zielgruppe sieht wie folgt aus:

- NLB-Konfiguration
Typ: Netzwerk-Lastausgleicher
Name: RDS-A-NLB
VPC: VPC-A
Schema: Intern
Zuordnungen: Wählen Sie alle Zonen aus und weisen Sie die privaten Unterpunkte zu.
Listener-Protokoll: TCP
Listener-Port: 3306
Standardaktion des Hörers: Weiterleiten an RDS-A (stellen Sie sicher, dass Sie
Ihre Zielgruppe)
Die NLB sieht wie folgt aus:

Es ist zu beachten, dass Port 3306 spezifisch für MySQL ist. Wenn Sie einen anderen Datenbanktyp verwenden, stellen Sie bitte sicher, dass der angegebene Port eingestellt ist.
VPC-Endpunkt-Dienst
Hier müssen wir nur einen VPC-Endpunktdienst in Konto A erstellen und ihn auf unseren Netzwerk-Loadbalancer (RDS-A-NLB) verweisen. Es wird empfohlen, die Option "Akzeptanz erforderlich" anzukreuzen.

Wenn ein Dienst erstellt wird, sollte er ausgewählt und zum Abschnitt Auftraggeber zulassen navigiert werden. Dort müssen Sie den ARN des Benutzers auf dem anderen Konto (Konto B) zulassen:

Bitte stellen Sie sicher, dass die richtige Konto-ID und die richtigen Benutzer eingestellt sind.
Im obigen Screenshot ist auch der Name des Endpunktdienstes zu sehen. Dieser wird später für die Erstellung des VPC-Endpunkts benötigt.
VPC-Endpunkt
Dies ist der Endpunkt, den wir in Konto B erstellen müssen (von dem aus wir auf die Datenbank zugreifen werden). Bitte stellen Sie sicher, dass Sie sich in der gleichen AWS-Region befinden. Wir müssen auch die richtige VPC (VPC-B) und die Subnetze angeben.

Wenn der Endpunkt erstellt ist, kehren Sie zum VPC-Endpunktdienst in Konto A zurück und akzeptieren die Verbindung:

Unser VPC-Endpunkt sollte danach verfügbar sein.

Wir können dann einfach den DNS-Namen des VPC-Endpunkts kopieren und ihn für Datenbankverbindungen verwenden.

Und das war's auch schon! Jetzt können wir unsere Datenbank in Konto A ganz einfach von Konto B aus über unseren neuen Endpunkt verbinden.
Schlussfolgerung
AWS PrivateLink ist eine hervorragende Möglichkeit, bestimmte Ressourcen privat und sicher zu verbinden, wenn man nicht den gesamten Netzwerkverkehr zulassen möchte. Es kann helfen, sichere, skalierbare und hochverfügbare Architekturen für Services auf AWS aufzubauen. Berücksichtigen Sie die Konnektivitätsanforderungen Ihrer Anwendung, bevor Sie eine Amazon VPC-Konnektivitätsarchitektur für interne und externe Kunden wählen.


2 Antworten
Ihr Artikel lieferte wichtige Informationen und fundierte Kenntnisse zu einem Thema, das mich interessiert.
Ich habe ein Problem, können Sie mir helfen?
Ich habe die Schritte im Artikel befolgt, aber ich bekomme keine Verbindung zu RDS aws in VPC private A von EC2 in VPC private B.
Ich erstelle VPC Endpunkt im gleichen Konto, ist das ein Problem?
Ich freue mich auf Ihre Antwort
Hallo Long Vo,
Ich freue mich über Ihr Interesse und werde mein Bestes tun, um Ihnen zu helfen, aber ich benötige zunächst einige Informationen. Könnten Sie die folgenden Fragen beantworten?
1. Haben Sie einen Network Load Balancer (NLB) mit den internen Datenbank-IPs als Ziele konfiguriert. Wenn ja, werden die Ziele in Ihrer AWS-Konsole als gesund angezeigt?
2. Überschneiden sich die CIDRs der VPCs?
3. Wenn Sie versuchen, PrivateLink im Zielkonto einzurichten, können Sie den Quell-VPC-Endpunktservice sehen? Falls nein, bedenken Sie bitte, dass sich beide VPCs in derselben AWS-Region befinden müssen.
4. Haben Sie bei der Konfiguration des VPC-Endpunktdienstes den Zugriff zwischen den Konten zugelassen?
Dies sind in der Regel die häufigsten Fehler, aber jede zusätzliche Information ist hilfreich. Sie können uns einige Screenshots mit Ihrer aktuellen Konfiguration oder Fehlermeldungen schicken, die Sie erhalten.