Zugriff auf private Dienste konfigurieren

Auf dieser Seite wird beschrieben, wie Sie in Ihrem VPC-Netzwerk den Zugriff auf private Dienste konfigurieren.

Der Zugriff auf private Dienste wird als eine VPC-Peering-Verbindung zwischen Ihrem VPC-Netzwerk und dem zugrunde liegenden Google Cloud VPC-Netzwerk, in dem sich Ihre Cloud SQL-Instanz befindet, implementiert. Die private Verbindung aktiviert VM-Instanzen in Ihrem VPC-Netzwerk und die Dienste, auf die Sie ausschließlich über interne IP-Adressen zugreifen. VM-Instanzen erfordern keinen Internetzugang oder externe IP-Adressen, um verfügbare Dienste über den Zugriff auf private Dienste zu erreichen.

Hinweis

Cloud SQL erfordert für jedes VPC-Netzwerk, das für private IP-Verbindungen verwendet wird, den Zugriff auf private Dienste. Um eine Verbindung für den Zugriff auf private Dienste zu verwalten, sollte der Nutzer die folgenden IAM-Berechtigungen haben:

  • compute.networks.list
  • compute.addresses.create
  • compute.addresses.list
  • servicenetworking.services.addPeering

Wenn Sie diese Berechtigungen nicht haben, können Fehler aufgrund unzureichender Berechtigungen auftreten.

Wenn Sie ein freigegebenes VPC-Netzwerk verwenden, müssen Sie außerdem Folgendes tun:

  • Fügen Sie Ihren Nutzer dem Hostprojekt hinzu.
  • Weisen Sie diesem Nutzer im Hostprojekt dieselben vier Berechtigungen zu.
  • Erteilen Sie dem Nutzer die IAM-Berechtigung compute.globalAddresses.list.

Privaten Dienstzugriff für Cloud SQL konfigurieren

Die Konfiguration des privaten Zugriffs auf Dienste besteht aus zwei Teilen:

  • Vorhandenen IP-Adressbereich auswählen oder neuen IP-Adressbereich zuweisen.

    Sie haben auch die Möglichkeit, Google die Zuweisung des Bereichs zu gestatten. In diesem Fall weist Google automatisch einen IP-Bereich mit der Präfixlänge /20 zu und verwendet den Namen default-ip-range.

    Wenn Sie Instanzen in mehreren Regionen oder für verschiedene Datenbanktypen erstellen möchten, müssen Sie für jede Region oder jeden Datenbanktyp mindestens einen /24-IP-Adressbereich haben. Dies gilt auch für andere Anwendungen wie Filestore oder Memorystore. Für eine neue Region oder einen neuen Datenbanktyp muss Cloud SQL einen freien /24-Bereich haben.

  • Private Verbindung von Ihrem VPC-Netzwerk zum Netzwerk des Diensterstellers herstellen.

IP-Adressbereich zuweisen

Console

  1. Rufen Sie in der Google Cloud Console die Seite VPC-Netzwerke auf.

    Zur Seite VPC-Netzwerke

  2. Wählen Sie das VPC-Netzwerk aus, das Sie verwenden möchten.
  3. Wählen Sie den Tab Private Dienstverbindung aus.
  4. Wählen Sie den Tab Diensten zugewiesene IP-Bereiche aus.
  5. Klicken Sie auf IP-Bereich zuweisen.
  6. Geben Sie als Name des zugewiesenen Bereichs google-managed-services-VPC_NETWORK_NAME an, wobei VPC_NETWORK_NAME der Name des VPC-Netzwerks ist, mit dem Sie eine Verbindung herstellen, beispielsweise google-managed-services-default. Die Beschreibung ist optional.
  7. Wählen Sie die Option Benutzerdefiniert aus und geben Sie dann den IP-Adressbereich, der zugewiesen werden soll, in der CIDR-Notation ein.
  8. Klicken Sie auf Zuweisen, um den zugewiesenen Bereich zu erstellen.

gcloud

Führen Sie einen der folgenden Schritte aus:

  • Legen Sie einen Adressbereich und eine Präfixlänge (Subnetzmaske) mit den Flags addresses und prefix-length fest. Wenn Sie beispielsweise den CIDR-Block 192.168.0.0/16 zuordnen möchten, geben Sie 192.168.0.0 für die Adresse und 16 für die Präfixlänge an.
  •         gcloud compute addresses create google-managed-services-VPC_NETWORK_NAME \
            --global \
            --purpose=VPC_PEERING \
            --addresses=192.168.0.0 \
            --prefix-length=16 \
            --network=projects/PROJECT_ID/global/networks/VPC_NETWORK_NAME
            
  • Wenn Sie nur eine Präfixlänge (Subnetzmaske) festlegen möchten, verwenden Sie das Flag prefix-length. Wenn Sie den Adressbereich weglassen, wählt Google Cloud automatisch einen nicht verwendeten Adressbereich in Ihrem VPC-Netzwerk aus. In diesem Beispiel wird ein nicht verwendeter IP-Adressbereich mit einer Präfixlänge von 16 Bit ausgewählt.
  •         gcloud compute addresses create google-managed-services-VPC_NETWORK_NAME \
            --global \
            --purpose=VPC_PEERING \
            --prefix-length=16 \
            --network=projects/PROJECT_ID/global/networks/VPC_NETWORK_NAME
            

Ersetzen Sie VPC_NETWORK_NAME durch den Namen Ihres VPC-Netzwerks, beispielsweise mit my-vpc-network.

In diesem Beispiel wird ein IP-Bereich zugewiesen, mit dem Ressourcen im VPC-Netzwerk my-vpc-network über private IP-Adressen eine Verbindung zu Cloud SQL-Instanzen herstellen können.

    gcloud compute addresses create google-managed-services-my-vpc-network \
    --global \
    --purpose=VPC_PEERING \
    --prefix-length=16 \
    --network=projects/myprojectid/global/networks/myvpcnetwork \
    --project=my-project
    

Terraform

Verwenden Sie zum Zuweisen eines IP-Adressbereichs eine Terraform-Ressource.

resource "google_compute_global_address" "private_ip_address" {
  name          = "private-ip-address"
  purpose       = "VPC_PEERING"
  address_type  = "INTERNAL"
  prefix_length = 16
  network       = google_compute_network.peering_network.id
}

Änderungen anwenden

Führen Sie die Schritte in den folgenden Abschnitten aus, um Ihre Terraform-Konfiguration auf ein Google Cloud-Projekt anzuwenden.

Cloud Shell vorbereiten

  1. Rufen Sie Cloud Shell auf.
  2. Legen Sie das Google Cloud-Standardprojekt fest, auf das Sie Ihre Terraform-Konfigurationen anwenden möchten.

    Sie müssen diesen Befehl nur einmal pro Projekt und in jedem beliebigen Verzeichnis ausführen.

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    Umgebungsvariablen werden überschrieben, wenn Sie in der Terraform-Konfigurationsdatei explizite Werte festlegen.

Verzeichnis vorbereiten

Jede Terraform-Konfigurationsdatei muss ein eigenes Verzeichnis haben (auch als Stammmodul bezeichnet).

  1. Erstellen Sie in Cloud Shell ein Verzeichnis und eine neue Datei in diesem Verzeichnis. Der Dateiname muss die Erweiterung .tf haben, z. B. main.tf. In dieser Anleitung wird die Datei als main.tf bezeichnet.
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. Wenn Sie einer Anleitung folgen, können Sie den Beispielcode in jedem Abschnitt oder Schritt kopieren.

    Kopieren Sie den Beispielcode in das neu erstellte main.tf.

    Kopieren Sie optional den Code aus GitHub. Dies wird empfohlen, wenn das Terraform-Snippet Teil einer End-to-End-Lösung ist.

  3. Prüfen und ändern Sie die Beispielparameter, die auf Ihre Umgebung angewendet werden sollen.
  4. Speichern Sie die Änderungen.
  5. Initialisieren Sie Terraform. Dies ist nur einmal für jedes Verzeichnis erforderlich.
    terraform init

    Fügen Sie optional die Option -upgrade ein, um die neueste Google-Anbieterversion zu verwenden:

    terraform init -upgrade

Änderungen anwenden

  1. Prüfen Sie die Konfiguration und prüfen Sie, ob die Ressourcen, die Terraform erstellen oder aktualisieren wird, Ihren Erwartungen entsprechen:
    terraform plan

    Korrigieren Sie die Konfiguration nach Bedarf.

  2. Wenden Sie die Terraform-Konfiguration an. Führen Sie dazu den folgenden Befehl aus und geben Sie yes an der Eingabeaufforderung ein:
    terraform apply

    Warten Sie, bis Terraform die Meldung „Apply complete“ anzeigt.

  3. Öffnen Sie Ihr Google Cloud-Projekt, um die Ergebnisse aufzurufen. Rufen Sie in der Google Cloud Console Ihre Ressourcen in der Benutzeroberfläche auf, um sicherzustellen, dass Terraform sie erstellt oder aktualisiert hat.

Änderungen löschen

Entfernen Sie Ressourcen, die zuvor mit Ihrer Terraform-Konfiguration angewendet wurden, indem Sie den folgenden Befehl ausführen und yes an der Eingabeaufforderung eingeben:

terraform destroy

Private Verbindung erstellen

Console

  1. Rufen Sie in der Google Cloud Console die Seite VPC-Netzwerke auf.

    Zur Seite VPC-Netzwerke

  2. Wählen Sie das VPC-Netzwerk aus, das Sie verwenden möchten.
  3. Wählen Sie den Tab Private Dienstverbindung aus.
  4. Wählen Sie den Tab Private Verbindungen zu Diensten aus.
  5. Klicken Sie auf Verbindung erstellen, um eine private Verbindung zwischen Ihrem Netzwerk und einem Dienstersteller herzustellen.
  6. Wählen Sie für Zugewiesene Bereiche einen oder mehrere vorhandene zugewiesene Bereiche aus, die nicht von anderen Diensterstellern verwendet werden.
  7. Klicken Sie auf Verbinden, um die Verbindung herzustellen.

gcloud

  1. Erstellen Sie eine private Verbindung.

    gcloud services vpc-peerings connect \
    --service=servicenetworking.googleapis.com \
    --ranges=google-managed-services-VPC_NETWORK_NAME \
    --network=VPC_NETWORK_NAME \
    --project=PROJECT_ID
    

    Der Befehl initiiert einen Cloud SQL-Instanzvorgang mit langer Laufzeit und erstellt einen Vorgangs-ID.

  2. Prüfen Sie, ob der Vorgang erfolgreich war.

    gcloud services vpc-peerings operations describe \
    --name=OPERATION_ID
    

Sie können mehr als einen zugewiesenen Bereich angeben, wenn Sie eine private Verbindung erstellen. Wenn beispielsweise ein Bereich aufgebraucht ist, können Sie zusätzliche zugewiesene Bereiche zuordnen. Der Dienst verwendet IP-Adressen aus allen bereitgestellten Bereichen in der von Ihnen angegebenen Reihenfolge.

Terraform

Verwenden Sie zum Erstellen einer privaten Verbindung eine Terraform-Ressource.

resource "google_service_networking_connection" "default" {
  network                 = google_compute_network.peering_network.id
  service                 = "servicenetworking.googleapis.com"
  reserved_peering_ranges = [google_compute_global_address.private_ip_address.name]
}

Einem Dienstkonto im Format service-HOST_PROJECT_NUMBER@service-networking.iam.gserviceaccount.com wird die Rolle servicenetworking.serviceAgent zugewiesen, während die private Verbindung erstellt wird, da das Konto Just-in-Time bereitgestellt wird.

Wenn ein Fehler bei der Berechtigung compute.globalAddresses.list oder compute.projects.get für das Projekt angezeigt wird, führen Sie den Befehl gcloud aus:

gcloud projects add-iam-policy-binding HOST_PROJECT_NAME \
    --member=serviceAccount:service-HOST_PROJECT_NUMBER@service-networking.iam.gserviceaccount.com \
    --role=roles/servicenetworking.serviceAgent

Konfiguration für den Zugriff auf private Dienste ändern

Sie können den zugewiesenen Adressbereich einer privaten Dienstverbindung anpassen, ohne vorhandene Cloud SQL-Instanzen zu ändern. Mit den folgenden Schritten lässt sich die private IP-Adresse einer vorhandenen Cloud SQL-Instanz ändern.

So ändern Sie den zugewiesenen Adressbereich:

Console

  1. Rufen Sie in der Google Cloud Console die Seite VPC-Netzwerke auf.

    Zur Seite VPC-Netzwerke

  2. Wählen Sie das VPC-Netzwerk aus, das Sie verwenden möchten.
  3. Wählen Sie den Tab Private Dienstverbindung aus.
  4. Wählen Sie den Tab Diensten zugewiesene IP-Bereiche aus.
  5. Wählen Sie den Namen des Bereichs aus, den Sie löschen möchten.
  6. Klicken Sie auf Freigeben.
  7. Klicken Sie auf IP-Bereich zuweisen.
  8. Erstellen Sie einen neuen Bereich mit dem gleichen Namen und einen ganz neuen Bereich.

    Der Name ist wichtig, da die private Verbindung bereits über diesen Adressnamen hergestellt wurde.

gcloud services vpc-peerings update \
--network=VPC_NETWORK_NAME \
--ranges=ALLOCATED_RANGES \
--service=servicenetworking.googleapis.com \
--force

Private IP-Adresse einer vorhandenen Cloud SQL-Instanz ändern

Wenn Sie die private IP-Adresse einer vorhandenen Cloud SQL-Instanz ändern möchten, verschieben Sie die Instanz aus dem ursprünglichen Netzwerk in ein temporäres VPC-Netzwerk. Ändern Sie dann die Konfiguration des ursprünglichen Netzwerks der Instanz für den Zugriff auf private Dienste und verschieben Sie die Cloud SQL-Instanz zurück in das ursprüngliche Netzwerk.

Wenn Sie in ein anderes VPC-Netzwerk wechseln möchten, folgen Sie den Schritten im folgenden Verfahren mit Ausnahme des letzten (Zurückverschieben der Instanz). In diesem Fall ist TEMPORARY_VPC_NETWORK_NAME das neue VPC-Netzwerk. Löschen Sie außerdem die alte private Verbindung. Es kann einige Tage dauern, bis die gelöschte private Verbindung in der Google Cloud Console nicht mehr angezeigt wird.

Wenn die Cloud SQL-Instanz in einem freigegebenen VPC-Netzwerk gehostet wird, müssen die in der folgenden Anleitung verwendeten VPC_NETWORK_NAME-Variablen die VPC-Netzwerknamen des Hostprojekts sein. Verwenden Sie die vollständige URL des Netzwerks, um ein Netzwerk mit einem freigegebenen VPC-Netzwerk anzugeben, z. B. projects/HOST_PROJECT/global/networks/NETWORK_NAME.

Console

  1. Rufen Sie in der Google Cloud Console die Seite VPC-Netzwerke auf.

    Zur Seite VPC-Netzwerke

  2. Erstellen Sie ein temporäres VPC-Netzwerk.
  3. Erstellen Sie eine IP-Zuordnung im temporären VPC-Netzwerk.
  4. Erstellen Sie eine private Verbindung im temporären VPC-Netzwerk.
  5. Verschieben Sie die Cloud SQL-Instanz in das temporäre VPC-Netzwerk.

    gcloud beta sql instances patch INSTANCE_ID \
      --project=PROJECT_ID \
      --network=projects/PROJECT_ID/global/networks/TEMPORARY_VPC_NETWORK_NAME \
      --no-assign-ip
    
  6. Ändern Sie die Konfiguration für den Zugriff auf private Dienste im ursprünglichen Netzwerk, um einen neuen zugewiesenen Bereich hinzuzufügen oder vorhandene zu löschen.

  7. Verschieben Sie die Cloud SQL-Instanz zurück in das ursprüngliche VPC-Netzwerk.

    gcloud beta sql instances patch INSTANCE_ID \
      --project=PROJECT_ID \
      --network=projects/PROJECT_ID/global/networks/ORIGINAL_VPC_NETWORK_NAME \
      --no-assign-ip