In dieser Anleitung erfahren Sie, wie Sie eine MySQL-Datenbank in einem privaten Netzwerk in Google Cloud ausführen, um mithilfe von Compute Engine sicheren Remote-Zugriff auf die Datenbank zu ermöglichen.
Verwenden Sie diese Anleitung, wenn Sie eine eigene MySQL-Datenbank in Compute Engine installieren, aber den Zugriff auf autorisierte MySQL-Clients beschränken möchten, die auch in Compute Engine ausgeführt werden. Vielleicht möchten Sie Ihre eigene MySQL-Instanz verwalten und den verwalteten Dienst nicht verwenden, weil Sie es mit Instanzen aus verschiedenen Regionen zu tun haben, erweiterte Parameter verwenden und bestimmte Leistungsanforderungen haben.
In dieser Anleitung wird beschrieben, wie Sie Ihre MySQL-Serveranwendung konfigurieren, damit sie Remotetraffic von einem MySQL-Client annimmt, der in einer Compute Engine-Instanz im selben privaten Netzwerk installiert ist.
Informationen zur Auswahl der richtigen MySQL-Bereitstellungsoption finden Sie unter MySQL in Compute Engine installieren.
Für diese Anleitung wird vorausgesetzt, dass Sie mit folgenden Themen vertraut sind:
- Grundlegende Linux-Befehle
- Ubuntu-Server 18.04
- MySQL 5.7
- Compute Engine
Architektur
In dieser Anleitung stellen Sie zwei Compute Engine-Instanzen bereit. Eine Instanz ist der Server und die andere ist der Client. Dies wird in der folgenden Abbildung veranschaulicht:
Ziele
- Compute Engine-Instanz erstellen und MySQL-Server installieren
- Compute Engine-Instanz erstellen und MySQL-Client installieren
- MySQL-Server für Remotezugriff konfigurieren
- Öffentlichen Zugriff auf den MySQL-Server verhindern
- Remoteverbindung zu MySQL herstellen
- VPC Service Controls-Firewallregel erstellen
Kosten
In diesem Dokument verwenden Sie die folgenden kostenpflichtigen Komponenten von Google Cloud:
- Compute Engine
- Cloud Storage
Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen.
Hinweis
- Melden Sie sich bei Ihrem Google Cloud-Konto an. Wenn Sie mit Google Cloud noch nicht vertraut sind, erstellen Sie ein Konto, um die Leistungsfähigkeit unserer Produkte in der Praxis sehen und bewerten zu können. Neukunden erhalten außerdem ein Guthaben von 300 $, um Arbeitslasten auszuführen, zu testen und bereitzustellen.
-
Wählen Sie in der Google Cloud Console auf der Seite der Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines.
-
Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.
-
Compute Engine API aktivieren.
-
Wählen Sie in der Google Cloud Console auf der Seite der Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines.
-
Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.
-
Compute Engine API aktivieren.
Nach Abschluss dieser Anleitung können Sie weitere Kosten durch Löschen von erstellten Ressourcen vermeiden. Weitere Informationen finden Sie im Abschnitt Bereinigen.
Compute Engine-Instanzen erstellen
Erstellen Sie zwei Instanzen für MySQL – eine Client- und eine Serverinstanz.
Compute Engine-Clientinstanz erstellen
- Geben Sie der Instanz den Namen
my-client
. - Legen Sie für das Flag
--zone
die Zone fest, in der Sie Ihre Instanz erstellen möchten. - Legen Sie für das Flag
--image-project
den Wertubuntu-os-cloud
fest. - Legen Sie für das Flag
--image-family
den Wertubuntu-1804-lts
fest. -
Legen Sie für das Flag
--scopes
den Werthttps://www.googleapis.com/auth/cloud-platform
fest.
gcloud compute instances create my-client --zone=ZONE --image-project=ubuntu-os-cloud --image-family=ubuntu-1804-lts --scopes=https://www.googleapis.com/auth/cloud-platform
Compute Engine-Serverinstanz erstellen
- Geben Sie der Instanz den Namen
my-server
. - Legen Sie für das Flag
--zone
die Zone fest, in der Sie Ihre Instanz erstellen möchten. - Legen Sie für das Flag
--image-project
den Wertubuntu-os-cloud
fest. - Legen Sie für das Flag
--image-family
den Wertubuntu-1804-lts
fest. -
Legen Sie für das Flag
--scopes
den Werthttps://www.googleapis.com/auth/cloud-platform
fest.
gcloud compute instances create my-server --zone=ZONE --image-project=ubuntu-os-cloud --image-family=ubuntu-1804-lts --scopes=https://www.googleapis.com/auth/cloud-platform
MySQL-Client installieren
In den folgenden Schritten wird beschrieben, wie Sie MySQL in einer Compute Engine-Instanz installieren.
- Zum Herstellen einer Verbindung zur Instanz
my-client
verwenden Sie den Befehlssh
. - Aktualisieren Sie den Paketmanager
apt-get
.sudo apt-get update
- Installieren Sie das MySQL-Clientpaket:
sudo apt-get -y install mysql-client-5.7
MySQL-Server installieren
In den folgenden Schritten wird beschrieben, wie Sie MySQL in einer Compute Engine-Instanz installieren.
- Zum Herstellen einer Verbindung zur Instanz
my-server
verwenden Sie den Befehlssh
. - Aktualisieren Sie den Paketmanager
apt-get
.sudo apt-get update
- Installieren Sie das MySQL-Serverpaket:
sudo apt-get -y install mysql-server-5.7
Sicherheit der MySQL-Installation verbessern
Sie müssen ein Root-Passwort für MySQL einrichten und grundlegende Schritte zur Verbesserung der Sicherheit für Ihre MySQL-Serverkonfiguration ausführen. Weitere Informationen finden Sie in der MySQL-Dokumentation zu mysql_secure_installation
.
Verwenden Sie in der SSH-Sitzung auf Ihrer
my-server
-Instanz den folgenden Befehl, um die Sicherheit Ihrer MySQL-Installation zu erhöhen.sudo mysql_secure_installation
Drücken Sie
enter
, um die Einrichtung des Plug-insVALIDATE PASSWORD
zu überspringen.Geben Sie zweimal ein neues Root-Passwort ein.
Geben Sie
Y
ein und drücken Sieenter
, um anonyme Nutzer zu entfernen.Geben Sie
Y
ein und drücken Sieenter
, um die Remote-Root-Anmeldung zu verhindern.Geben Sie
Y
ein und drücken Sieenter
, um die Testdatenbank zu entfernen.Geben Sie
Y
ein und drücken Sie dieenter
, um die Rechtetabellen zu aktualisieren.
MySQL-Server konfigurieren
Bevor Sie eine Remoteverbindung zum MySQL-Server herstellen können, müssen Sie ihn so konfigurieren, dass er seine interne IP-Adresse überwacht. Dann erstellen Sie ein Nutzerkonto ohne Root-Berechtigung für den MySQL-Client, um eine Verbindung zum Server herzustellen.
Alle MySQL-Clientbefehle müssen bestimmte Befehlszeilen-Flags enthalten (z. B. zur Authentifizierung). Die MySQL-Befehle in diesem Abschnitt umfassen folgende Flags: --user
für den Nutzernamen, -p
für das Passwort und -e
, um die angegebene Anweisung auszuführen und die Shell danach sofort zu verlassen. Weitere Informationen finden Sie in der Referenz zu den MySQL 5.7-Befehlsoptionen.
Stellen Sie in Cloud Shell eine SSH-Verbindung zur Instanz
my-server
her.Aktualisieren Sie die Konfigurationsdatei
/etc/mysql/mysql.conf.d/mysqld.cnf
mit den folgenden Informationen:LOCAL_IP=$(curl http://metadata.google.internal/computeMetadata/v1/instance/network-interfaces/0/ip \ -H "Metadata-Flavor: Google") sudo sed -i "s|bind-address.*|bind-address = $LOCAL_IP|" /etc/mysql/mysql.conf.d/mysqld.cnf
Starten Sie den MySQL-Dienst neu, um die Änderungen auf den laufenden Server anzuwenden:
sudo service mysql restart
Prüfen Sie, ob der Server lokal ausgeführt wird. Ersetzen Sie
[ROOT_PASSWORD]
durch das Root-Passwort des MySQL-Servers, das Sie in einem vorherigen Schritt eingerichtet haben:sudo mysql --user=root -p[ROOT_PASSWORD] -e "show databases"
Die Ausgabe sieht in etwa so aus:
+--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | +--------------------+
MySQL-Nutzer erstellen
Die Remote-Verbindung als Root-Nutzer wurde mit dem vorherigen Befehl mysql_secure_installation
deaktiviert. Sie müssen einen neuen Nutzer mit den erforderlichen Berechtigungen erstellen, um Remoteverbindungen zuzulassen.
Erstellen Sie in Cloud Shell eine Umgebungsvariable für die interne IP-Adresse
my-client
:CLIENT_IP=$(gcloud compute instances describe my-client \ --zone=ZONE \ --format='value(networkInterfaces[0].networkIP)')
Erstellen Sie einen neuen MySQL-Nutzer mit einem Passwort. Ersetzen Sie dabei
[MY_PASSWORD]
durch Ihr Passwort und[ROOT_PASSWORD]
durch das Passwort des MySQL-Root-Nutzers:sudo mysql -uroot -p[ROOT_PASSWORD] \ -e "CREATE USER 'TESTUSER'@'${CLIENT_IP}' IDENTIFIED BY '[MY_PASSWORD]';"
Erteilen Sie dem neuen MySQL-Nutzer die Berechtigung, sich über die interne IP-Adresse von
my-client
beim Server anzumelden:sudo mysql -uroot -p[ROOT_PASSWORD] -e \ "GRANT ALL PRIVILEGES ON *.* TO 'TESTUSER'@'${CLIENT_IP}' \ IDENTIFIED BY '[MY_PASSWORD]';"
Externe IP-Adresse für my-server
entfernen
Die Instanz my-server
benötigt keine externe IP-Adresse, da der Client über eine interne IP-Adresse auf my-server
zugreifen kann.
Zum Entfernen der externen IP-Adresse aktualisieren Sie die Konfigurationseinstellungen in Cloud Shell. Ersetzen Sie
[ZONE]
durch Ihre Google Cloud-Zone:gcloud compute instances delete-access-config my-server \ --access-config-name "external-nat" \ --zone="ZONE"
Remotezugriff des Clients auf die Serverinstanz prüfen
In den folgenden Schritten wird beschrieben, wie Sie von Ihrer my-client
-Instanz aus eine Verbindung zum MySQL-Server auf my-server
herstellen.
- Stellen Sie in Cloud Shell eine SSH-Verbindung zur Instanz
my-client
her. Testen Sie die Verbindung. Listen Sie dafür die Datenbanken auf:
sudo mysql --host=my-server --user=TESTUSER \ --password=[MY_PASSWORD] -e "SHOW DATABASES;"
Die Ausgabe sieht in etwa so aus:
+--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | +--------------------+
Mit diesen Schritten wurde bestätigt, dass Ihr MySQL-Client über die interne IP-Adresse erfolgreich eine Verbindung zum MySQL-Server herstellen kann.
Überlegungen zur Firewall in Produktionsumgebungen
Die standardmäßige Netzwerkkonfiguration in Google Cloud umfasst die Firewallregel default-allow-internal
, die internen Traffic zwischen Compute Engine-Instanzen über einen breiten Bereich von Ports zulässt, einschließlich des MySQL-Ports 3306
. In Umgebungen ohne Standardkonfiguration, für die bereits Sicherheitseinstellungen festgelegt wurden, müssen Sie unter Umständen eine Firewallregel erstellen, damit die Instanz my-client
über das Netzwerk mit der Instanz my-server
kommunizieren kann. Andernfalls können die beiden Instanzen nicht miteinander kommunizieren.
Firewallregeln können auf IP-Adressbereichen oder Tags basieren. IP-Adressbereiche sind nützlich, wenn Sie einem breiten Bereich von internen IP-Adressen Zugriffsberechtigungen erteilen möchten. Soll der Zugriff dagegen auf bestimmte Instanzen im Netzwerk gewährt werden, stellen Tags eine flexiblere Lösung dar. Mit Tags können neue Clients einfacher hinzugefügt werden, ohne Zugriff auf einen breiten Bereich von IP-Adressen gewähren zu müssen. Sie müssen der neuen MySQL-Clientinstanz nur das entsprechende Tag zuweisen. Sie können beispielsweise eine neue Firewallregel erstellen, die Traffic von allen Clientinstanzen zulässt, die mit mysql-client
getaggt sind.
Damit sich Tags mit Firewallregeln verwenden lassen, können Sie den VMs my-client
und my-server
die entsprechenden Tags in Cloud Shell zuweisen:
gcloud compute instances add-tags my-client --tags mysql-client --zone=ZONE
gcloud compute instances add-tags my-server --tags mysql-server --zone=ZONE
Neue Firewallregel hinzufügen
In den folgenden Schritten wird beschrieben, wie Sie eine neue Firewallregel erstellen, damit Instanzen mit dem Tag my-client
über Port 3306
mit Instanzen kommunizieren können, denen das Tag my-server
zugewiesen wurde.
Erstellen Sie in Cloud Shell eine Firewallregel, um die Kommunikation von
mysql-client
zumysql-server
zuzulassen:gcloud compute firewall-rules create "mysql-remote-access" \ --allow tcp:3306 --source-tags "mysql-client" \ --target-tags "mysql-server"
Sie können jetzt von my-client
aus eine Verbindung zu MySQL herstellen.
Überlegungen zum Zugriff externer Clients
Diese Anleitung behandelt den Zugriff von MySQL-Clients auf MySQL-Server, die beide auf Compute Engine ausgeführt werden. Im Rahmen dieser Anleitung kann nicht behandelt werden, wie der Zugriff von einem Client zugelassen wird, der nicht auf Compute Engine ausgeführt wird. Wenn Sie einen derartigen Zugriff zulassen müssen, ändern Sie Folgendes:
- Fügen Sie
my-server
eine externe IP-Adresse hinzu, um externe Verbindungen zuzulassen. - Fügen Sie die Quell-IP-Adresse des externen Clients den Firewallregeln hinzu.
- Ändern Sie das
TESTUSER
-Konto oder erstellen Sie ein Nutzerkonto, das an die Quell-IP-Adresse des externen Clients gebunden ist.
Bereinigen
Damit Ihrem Google Cloud-Konto die in dieser Anleitung verwendeten Ressourcen nicht in Rechnung gestellt werden, können Sie entweder das Projekt oder die Instanzen löschen.
Projekt löschen
Am einfachsten vermeiden Sie weitere Kosten durch Löschen des für die Anleitung erstellten Projekts.
So löschen Sie das Projekt:
- Wechseln Sie in der Google Cloud Console zur Seite Ressourcen verwalten.
- Wählen Sie in der Projektliste das Projekt aus, das Sie löschen möchten, und klicken Sie dann auf Löschen.
- Geben Sie im Dialogfeld die Projekt-ID ein und klicken Sie auf Shut down (Beenden), um das Projekt zu löschen.
Instanzen löschen
So löschen Sie eine Compute Engine-Instanz:
- Rufen Sie in der Google Cloud Console die Seite VM-Instanzen auf.
-
Klicken Sie auf das Kästchen für die Instanz
my-server
. - Klicken Sie zum Löschen der Instanz auf Weitere Aktionen, dann auf Löschen, und folgen Sie dann der Anleitung.
Nächste Schritte
- Hochverfügbarkeit für MySQL
- MySQL in Compute Engine einrichten
- Cloud Logging für MySQL-Logs konfigurieren
Referenzarchitekturen, Diagramme und Best Practices zu Google Cloud kennenlernen. Weitere Informationen zu Cloud Architecture Center