Clientzugriff über private IP-Adressen auf MySQL in Compute Engine einrichten

In dieser Anleitung erfahren Sie, wie Sie eine MySQL-Datenbank in einem privaten Netzwerk auf der Google Cloud Platform (GCP) ausführen, um mithilfe von Compute Engine sicheren Remotezugriff auf die Datenbank zu ermöglichen.

Orientieren Sie sich an dieser Anleitung, wenn Sie Ihre eigene MySQL-Datenbank in Compute Engine installieren möchten, jedoch nur bestimmten autorisierten MySQL-Clients Zugriff gewährt werden soll. 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:

Architektur von zwei bereitgestellten Instanzen

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 dieser Anleitung werden folgende abrechenbare Komponenten der Google Cloud Platform verwendet:

  • Compute Engine
  • Cloud Storage

Mit dem Preisrechner können Sie die Kosten für Ihre voraussichtliche Nutzung schätzen lassen. Neuen Nutzern der GCP steht unter Umständen eine kostenlose Testversion zur Verfügung.

Vorbereitung

  1. Melden Sie sich in Ihrem Google-Konto an.

    Wenn Sie noch kein Konto haben, registrieren Sie sich hier für ein neues Konto.

  2. Wählen Sie ein GCP-Projekt aus oder erstellen Sie eines.

    Zur Seite "Ressourcen verwalten"

  3. Prüfen Sie, ob die Abrechnung für Ihr Google Cloud Platform-Projekt aktiviert ist.

    Informationen zum Aktivieren der Abrechnung

  4. Aktivieren Sie die Compute Engine erforderliche API.

    Aktivieren Sie die API.

Nach Abschluss dieser Anleitung können Sie weitere Kosten vermeiden, indem Sie die erstellten Ressourcen löschen. 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

  • Erstellen Sie eine neue Compute Engine-Instanz. Konfigurieren Sie die Instanz wie folgt:
    • Geben Sie der Instanz den Namenmy-client.
    • Setzen Sie das Flag --zone auf die Zone, in der Sie Ihre Instanz erstellen möchten.
    • Setzen Sie das Flag --image-project aufubuntu-os-cloud.
    • Setzen Sie das Flag --image-family aufubuntu-1804-lts.
    • Setzen Sie das Flag --scopes aufhttps://www.googleapis.com/auth/cloud-platform.
    gcloud compute instances create my-client --zone [ZONE] --image-project ubuntu-os-cloud --image-family ubuntu-1804-lts --Bereiche https://www.googleapis.com/auth/cloud-platform
  • Compute Engine-Serverinstanz erstellen

  • Erstellen Sie eine neue Compute Engine-Instanz. Konfigurieren Sie die Instanz wie folgt:
    • Geben Sie der Instanz den Namenmy-server.
    • Setzen Sie das Flag --zone auf die Zone, in der Sie Ihre Instanz erstellen möchten.
    • Setzen Sie das Flag --image-project aufubuntu-os-cloud.
    • Setzen Sie das Flag --image-family aufubuntu-1804-lts.
    • Setzen Sie das Flag --scopes aufhttps://www.googleapis.com/auth/cloud-platform.
    gcloud compute instances create my-server --zone [ZONE] --image-project ubuntu-os-cloud --image-family ubuntu-1804-lts --Bereiche 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.

    1. Rufen Sie in der GCP Console die Seite "VM-Instanzen" auf.

      Weiter zur Seite "VM-Instanzen"

    2. Klicken Sie in der Liste der VM-Instanzen in der Zeile der Instanz, zu der Sie eine Verbindung herstellen möchten, auf SSH.

    3. Aktualisieren Sie den Paketmanager apt-get:
      sudo apt-get update
      
    4. 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.

    1. Rufen Sie in der GCP Console die Seite "VM-Instanzen" auf.

      Weiter zur Seite "VM-Instanzen"

    2. Klicken Sie in der Liste der VM-Instanzen in der Zeile der Instanz, zu der Sie eine Verbindung herstellen möchten, auf SSH.

    3. Aktualisieren Sie den Paketmanager apt-get:
      sudo apt-get update
      
    4. 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.

    1. Verbessern Sie in Cloud Shell die Sicherheit Ihrer MySQL-Installation:

      sudo mysql_secure_installation
      
    2. Drücken Sie enter, um die Einrichtung des Plug-ins VALIDATE PASSWORD zu überspringen.

    3. Geben Sie zweimal ein neues Root-Passwort ein.

    4. Geben Sie Y ein und drücken Sie enter, um anonyme Nutzer zu entfernen.

    5. Geben Sie Y ein und drücken Sie enter, um die Remote-Root-Anmeldung zu verhindern.

    6. Geben Sie Y ein und drücken Sie enter, um die Testdatenbank zu entfernen.

    7. Geben Sie Y ein und drücken Sie die enter, 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.

    1. Stellen Sie in Cloud Shell über SSH eine Verbindung zur Instanz my-server her.

    2. 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
      
    3. Starten Sie den MySQL-Dienst neu, um die Änderungen auf den laufenden Server anzuwenden:

      sudo service mysql restart
      
    4. 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 Remoteverbindung als Root-Nutzer wurde mit dem vorhergehenden Befehl mysql_secure_installation deaktiviert. Sie müssen einen neuen Nutzer mit den erforderlichen Berechtigungen erstellen, um Remoteverbindungen zuzulassen.

    1. Erstellen Sie in Cloud Shell eine Umgebungsvariable für die interne IP-Adresse von my-client:

      CLIENT_IP=$(gcloud compute instances describe my-client \
          --zone=[ZONE] \
          --format='value(networkInterfaces[0].networkIP)')
      
    2. 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]';"
      
    3. 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

    Für die my-server-Instanz ist keine externe IP-Adresse erforderlich, weil 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 dabei [ZONE] durch Ihre GCP-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 der Instanz my-client aus eine Verbindung zum MySQL-Server auf my-server herstellen.

    1. Stellen Sie in Cloud Shell über SSH eine Verbindung zur Instanz my-client her.
    2. 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 der GCP 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.

    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 zu mysql-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.

    Bereinigen

    Damit Ihrem GCP-Konto die in dieser Anleitung verwendeten Ressourcen nicht in Rechnung gestellt werden, können Sie entweder das Projekt löschen oder die Instanzen löschen.

    Projekt löschen

    Sie vermeiden weitere Kosten am einfachsten, wenn Sie das für die Anleitung erstellte Projekt löschen.

    So löschen Sie das Projekt:

    1. Rufen Sie in der GCP Console die Seite "Projekte" auf.

      Zur Seite "Projekte"

    2. Wählen Sie in der Projektliste das Projekt aus, das Sie löschen möchten, und klicken Sie auf Löschen.
    3. Geben Sie im Dialogfeld die Projekt-ID ein und klicken Sie auf Beenden, um das Projekt zu löschen.

    Instanzen löschen

    So löschen Sie eine Compute Engine-Instanz:

    1. Rufen Sie in der GCP Console die Seite "VM-Instanzen" auf.

      Zur Seite "VM-Instanzen"

    2. Klicken Sie auf das Kästchen nebender Instanzmy-server.
    3. Auf die Schaltfläche Löschen im oberen Seitenbereich klicken, um die Instanz zu löschen.

    Weitere Informationen

    Hat Ihnen diese Seite weitergeholfen? Teilen Sie uns Ihr Feedback mit:

    Feedback geben zu...