VM mit einem vom Nutzer verwalteten Dienstkonto erstellen

In diesem Dokument wird beschrieben, wie Sie eine VM-Instanz erstellen, die für die Verwendung eines nutzerverwalteten Dienstkontos konfiguriert ist. Ein Dienstkonto ist eine spezielle Art von Konto, das in der Regel von einer Anwendung oder einer Computing-Arbeitslast für autorisierte API-Aufrufe verwendet wird.

Dienstkonten sind für Szenarien erforderlich, in denen eine Arbeitslast, z. B. eine benutzerdefinierte Anwendung, auf Google Cloud Ressourcen zugreifen oder Aktionen ohne Beteiligung der Endnutzer ausführen muss. Weitere Informationen zur Verwendung von Dienstkonten finden Sie unter Best Practices für die Verwendung von Dienstkonten.

Wenn Sie über Anwendungen verfügen, die Aufrufe an Google Cloud APIs senden müssen, empfiehlt Google, dass Sie ein nutzerverwaltetes Dienstkonto an die VM anhängen, auf der die Anwendung oder die Arbeitslast ausgeführt wird. Anschließend weisen Sie dem Dienstkonto IAM-Rollen zu, die dem Dienstkonto – und damit Anwendungen, die auf der VM ausgeführt werden, – Zugriff aufGoogle Cloud -Ressourcen gewähren.

Vorbereitung

  • Richten Sie die Authentifizierung ein, falls Sie dies noch nicht getan haben. Bei der Authentifizierung wird Ihre Identität für den Zugriff auf Google Cloud Dienste und APIs überprüft. Zur Ausführung von Code oder Beispielen aus einer lokalen Entwicklungsumgebung können Sie sich so bei Compute Engine authentifizieren:

    Wählen Sie den Tab aus, der Ihrer geplanten Verwendung der Beispiele auf dieser Seite entspricht:

    Console

    Wenn Sie über die Google Cloud Console auf Google Cloud Dienste und APIs zugreifen, müssen Sie die Authentifizierung nicht einrichten.

    gcloud

    1. Installieren Sie die Google Cloud CLI. Initialisieren Sie die Google Cloud CLI nach der Installation mit dem folgenden Befehl:

      gcloud init

      Wenn Sie einen externen Identitätsanbieter (IdP) verwenden, müssen Sie sich zuerst mit Ihrer föderierten Identität in der gcloud CLI anmelden.

  • Legen Sie eine Standardregion und -zone fest.
  • Terraform

    Wenn Sie die Terraform-Beispiele auf dieser Seite in einer lokalen Entwicklungsumgebung verwenden möchten, installieren und initialisieren Sie die gcloud CLI und richten Sie dann die Standardanmeldedaten für Anwendungen mit Ihren Nutzeranmeldedaten ein.

    1. Installieren Sie die Google Cloud CLI.

    2. Wenn Sie einen externen Identitätsanbieter (IdP) verwenden, müssen Sie sich zuerst mit Ihrer föderierten Identität in der gcloud CLI anmelden.

    3. Wenn Sie eine lokale Shell verwenden, erstellen Sie lokale Anmeldedaten zur Authentifizierung für Ihr Nutzerkonto:

      gcloud auth application-default login

      Wenn Sie Cloud Shell verwenden, müssen Sie das nicht tun.

      Wenn ein Authentifizierungsfehler zurückgegeben wird und Sie einen externen Identitätsanbieter (IdP) verwenden, prüfen Sie, ob Sie sich mit Ihrer föderierten Identität in der gcloud CLI angemeldet haben.

    Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

    REST

    Wenn Sie die REST API-Beispiele auf dieser Seite in einer lokalen Entwicklungsumgebung verwenden möchten, verwenden Sie die Anmeldedaten, die Sie der gcloud CLI bereitstellen.

      Installieren Sie die Google Cloud CLI.

      Wenn Sie einen externen Identitätsanbieter (IdP) verwenden, müssen Sie sich zuerst mit Ihrer föderierten Identität in der gcloud CLI anmelden.

    Weitere Informationen finden Sie in der Dokumentation zur Google Cloud -Authentifizierung unter Für die Verwendung von REST authentifizieren.

Erforderliche Rollen

Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen für das Projekt zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Erstellen von VMs mit Dienstkonten benötigen:

Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.

Diese vordefinierten Rollen enthalten die Berechtigungen, die zum Erstellen von VMs, die Dienstkonten verwenden, erforderlich sind. Erweitern Sie den Abschnitt Erforderliche Berechtigungen, um die erforderlichen Berechtigungen anzuzeigen:

Erforderliche Berechtigungen

Die folgenden Berechtigungen sind erforderlich, um VMs zu erstellen, die Dienstkonten verwenden:

  • Zum Erstellen von Dienstkonten: Alle Berechtigungen in der Rolle iam.serviceAccountCreator
  • So gewähren Sie dem Dienstkonto Berechtigungen: Alle Berechtigungen in der Rolle resourcemanager.projectIamAdmin
  • Zum Erstellen von VMs:
    • compute.instances.create für das Projekt
    • Zum Erstellen der VM mit einem benutzerdefinierten Image: compute.images.useReadOnly für das Image
    • Zum Erstellen der VM mit einem Snapshot: compute.snapshots.useReadOnly für den Snapshot
    • Zum Erstellen der VM mit einer Instanzvorlage: compute.instanceTemplates.useReadOnly für die Instanzvorlage
    • Zum Zuweisen eines Legacy-Netzwerks zur VM: compute.networks.use für das Projekt
    • Zum Festlegen einer statische IP-Adresse für die VM: compute.addresses.use für das Projekt
    • Zum Zuweisen einer externen IP-Adresse zur VM bei Verwendung eines Legacy-Netzwerks: compute.networks.useExternalIp für das Projekt
    • Zum Angeben eines Subnetzes für die VM: compute.subnetworks.use für das Projekt oder für das ausgewählte Subnetz
    • Zum Zuweisen einer externen IP-Adresse zur VM, wenn Sie ein VPC-Netzwerk verwenden: compute.subnetworks.useExternalIp für das Projekt oder für das ausgewählte Subnetz
    • Zum Festlegen von Metadaten der VM-Instanz für die VM: compute.instances.setMetadata für das Projekt
    • Zum Festlegen von Tags für die VM: compute.instances.setTags für die VM
    • Zum Festlegen von Labels für die VM: compute.instances.setLabels für die VM
    • Zum Festlegen eines Dienstkontos, das die VM verwenden soll: compute.instances.setServiceAccount für die VM
    • Zum Erstellen eines neuen Laufwerks für die VM: compute.disks.create für das Projekt
    • Zum Anhängen eines vorhandenen Laufwerks im Lese- oder Lese-/Schreibmodus: compute.disks.use für das Laufwerk
    • Um ein vorhandenes Laufwerk im Lesemodus anzuhängen: compute.disks.useReadOnly für das Laufwerk

Sie können diese Berechtigungen auch mit benutzerdefinierten Rollen oder anderen vordefinierten Rollen erhalten.

Übersicht

Es wird empfohlen, Dienstkonten für Ihre VMs so zu konfigurieren:

  1. Erstellen Sie ein neues nutzerverwaltetes Dienstkonto, anstatt das Compute Engine-Standarddienstkonto zu verwenden, und weisen Sie diesem Dienstkonto nur IAM-Rollen für die Ressourcen und Vorgänge zu, die es benötigt.
  2. Hängen Sie das Dienstkonto an Ihre VM an.
  3. Legen Sie den Bereich der Cloud Platform (https://www.googleapis.com/auth/cloud-platform) für Ihre VM fest. Dadurch kann das Dienstkonto der VM die Google Cloud APIs aufrufen, für die es berechtigt ist.
    • Wenn Sie das Dienstkonto über die Google Cloud Konsole angeben, legen Sie den Zugriffsbereich des Dienstkontos auf Uneingeschränkten Zugriff auf alle Cloud APIs zulassen fest.
    • Wenn Sie das Dienstkonto über die Google Cloud CLI oder die Compute Engine API angeben, können Sie den Parameter scopes zum Festlegen des Zugriffsbereichs verwenden.

Dienstkonto einrichten

Erstellen Sie ein Dienstkonto und weisen Sie die erforderlichen IAM-Rollen zu. Weisen Sie so viele IAM-Rollen wie nötig zu. Sie können die IAM-Rollen für Ihr Dienstkonto nach Bedarf ändern.

Google empfiehlt, dass Sie die Berechtigungen von Dienstkonten einschränken und regelmäßig prüfen, ob Ihre Dienstkontoberechtigungen aktuell sind.

Verwenden Sie eine der folgenden Methoden, um das Dienstkonto einzurichten.

Console

    Sie benötigen die IAM-Rolle „Dienstkonten erstellen“ (roles/iam.serviceAccountCreator) und die IAM-Rolle „Projekt-IAM-Administrator“ (roles/resourcemanager.projectIamAdmin). Informationen zum Zuweisen von Rollen
  1. Wechseln Sie in der Google Cloud Console zur Seite Dienstkonto erstellen.

    Zur Seite „Dienstkonto erstellen“
  2. Wählen Sie Ihr Projekt aus.
  3. Geben Sie im Feld Dienstkontoname einen Namen ein. Die Google Cloud Console füllt das Feld Dienstkonto-ID anhand dieses Namens aus.

    Geben Sie im Feld Dienstkontobeschreibung eine Beschreibung ein. Beispiel: Service account for quickstart.

  4. Klicken Sie auf Erstellen und fortfahren.
  5. Weisen Sie dem Dienstkonto die erforderlichen Rollen zu.

    Wenn Sie eine Rolle zuweisen möchten, suchen Sie die Liste Rolle auswählen und wählen Sie die Rolle aus.

    Wenn Sie weitere Rollen hinzufügen möchten, klicken Sie auf Weitere Rolle hinzufügen und fügen Sie weitere Rollen hinzu.

  6. Klicken Sie auf Weiter.
  7. Geben Sie im Feld Rolle „Dienstkontonutzer“ die Kennung für das Hauptkonto ein, mit dem das Dienstkonto an andere Ressourcen angehängt wird, z. B. Compute Engine-Instanzen.

    Dies ist in der Regel die E‑Mail-Adresse eines Google-Kontos.

  8. Klicken Sie auf Fertig, um das Erstellen des Dienstkontos abzuschließen.

gcloud

    Richten Sie die Authentifizierung ein:

    1. Sie benötigen die IAM-Rolle „Dienstkonten erstellen“ (roles/iam.serviceAccountCreator) und die IAM-Rolle „Projekt-IAM-Administrator“ (roles/resourcemanager.projectIamAdmin). Informationen zum Zuweisen von Rollen
    2. Erstellen Sie das Dienstkonto:

      gcloud iam service-accounts create SERVICE_ACCOUNT_NAME

      Ersetzen Sie SERVICE_ACCOUNT_NAME mit einem Namen für das Dienstkonto.

    3. Um Zugriff auf Ihr Projekt und Ihre Ressourcen zu gewähren, weisen Sie dem Dienstkonto eine Rolle zu:

      gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" --role=ROLE

      Dabei gilt:

      • SERVICE_ACCOUNT_NAME: der Name des Dienstkontos
      • PROJECT_ID: die Projekt-ID, unter der Sie das Dienstkonto erstellt haben
      • ROLE: die zu gewährende Rolle
    4. Führen Sie den Befehl wie schon im vorherigen Schritt aus, um dem Dienstkonto eine weitere Rolle zuzuweisen.
    5. Weisen Sie dem Hauptkonto, das das Dienstkonto an andere Ressourcen anhängt, die erforderliche Rolle zu.

      gcloud iam service-accounts add-iam-policy-binding SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com --member="user:USER_EMAIL" --role=roles/iam.serviceAccountUser

      Ersetzen Sie Folgendes:

      • SERVICE_ACCOUNT_NAME: der Name des Dienstkontos
      • PROJECT_ID: die Projekt-ID, unter der Sie das Dienstkonto erstellt haben
      • USER_EMAIL: die E-Mail-Adresse für ein Google-Konto

Terraform

Sie können zum Erstellen eines Dienstkontos die Ressource google_service_account verwenden.

resource "google_service_account" "default" {
  account_id   = "service-account-id"
  display_name = "Service Account"
}

Ersetzen Sie die Platzhalterwerte für die Attribute account_id und display_name.

Informationen zum Anwenden oder Entfernen einer Terraform-Konfiguration finden Sie unter Grundlegende Terraform-Befehle.

VM erstellen und Dienstkonto anhängen

Nachdem Sie das Dienstkonto erstellt haben, erstellen Sie eine VM und hängen Sie das Dienstkonto an, das Sie im vorherigen Abschnitt erstellt haben. Legen Sie außerdem den Zugriffsbereich der VM auf cloud-platform fest.

Wenn Sie bereits eine VM haben und diese VM für die Verwendung eines anderen Dienstkontos konfigurieren möchten, finden Sie weitere Informationen unter Angehängtes Dienstkonto ändern.

Verwenden Sie eine der folgenden Methoden, um eine VM zu erstellen und das Dienstkonto anzuhängen.

Console

  1. Rufen Sie in der Google Cloud Console die Seite Instanz erstellen auf.

    Zur Seite „Instanz erstellen“

  2. So hängen Sie ein Dienstkonto an:

    1. Klicken Sie im Navigationsmenü auf Sicherheit.
    2. Wählen Sie in der Liste Dienstkonto das erstellte Dienstkonto aus.
    3. Wählen Sie für Zugriffsbereiche die Option Uneingeschränkten Zugriff auf alle Cloud APIs zulassen aus.
  3. Optional: Geben Sie weitere Konfigurationsoptionen an. Weitere Informationen finden Sie unter Konfigurationsoptionen beim Erstellen von Instanzen.

  4. Klicken Sie zum Erstellen und Starten der Instanz auf Erstellen.

gcloud

Wenn Sie eine neue VM-Instanz erstellen und sie mithilfe der Google Cloud CLI für die Verwendung eines benutzerdefinierten Dienstkontos konfigurieren möchten, verwenden Sie den Befehl gcloud compute instances create und geben Sie die Dienstkonto-E-Mail-Adresse sowie den Zugriffsbereich cloud-platform für die VM-Instanz an.

gcloud compute instances create VM_NAME \
    --service-account=SERVICE_ACCOUNT_EMAIL \
    --scopes=https://www.googleapis.com/auth/cloud-platform

Ersetzen Sie Folgendes:

  • SERVICE_ACCOUNT_EMAIL: die E-Mail-Adresse des von Ihnen erstellten Dienstkontos. Beispiel: my-sa-123@my-project-123.iam.gserviceaccount.com. Informationen zum Aufrufen der E-Mail-Adresse finden Sie unter Dienstkonten auflisten.
  • VM_NAME ist der Name der VM-Instanz.

Beispiele:

gcloud compute instances create example-vm \
    --service-account 123-my-sa@my-project-123.iam.gserviceaccount.com \
    --scopes=https://www.googleapis.com/auth/cloud-platform

Sie können den Bereich auch mit dem Alias --scopes=cloud-platform angeben. Diese Aliasse werden nur von der gcloud CLI erkannt. Die API und andere Bibliotheken erkennen diese Aliasse nicht, sodass Sie den vollen Bereichs-URI angeben müssen.

Terraform

Wenn Sie eine neue VM für die Verwendung eines Dienstkontos einrichten möchten, können Sie die Ressource google_compute_instance verwenden.

resource "google_compute_instance" "default" {
  name         = "my-test-vm"
  machine_type = "n1-standard-1"
  zone         = "us-central1-a"

  boot_disk {
    initialize_params {
      image = "debian-cloud/debian-11"
    }
  }

  // Local SSD disk
  scratch_disk {
    interface = "SCSI"
  }

  network_interface {
    network = "default"

    access_config {
      // Ephemeral public IP
    }
  }

  service_account {
    # Google recommends custom service accounts with `cloud-platform` scope with
    # specific permissions granted via IAM Roles.
    # This approach lets you avoid embedding secret keys or user credentials
    # in your instance, image, or app code
    email  = google_service_account.default.email
    scopes = ["cloud-platform"]
  }
}

REST

Verwenden Sie die Methode instances.insert, um die VM zu erstellen, und geben Sie die Dienstkonto-E-Mail-Adresse und den Zugriffsbereich für die VM-Instanz an.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances

{
   "machineType":"zones/MACHINE_TYPE_ZONE/machineTypes/MACHINE_TYPE",
   "name":"VM_NAME",
   
   "disks":[
      {
         "initializeParams":{
            "sourceImage":"projects/IMAGE_PROJECT/global/images/IMAGE"
         },
         "boot":true
      }
   ],
   
   
   "networkInterfaces":[
      {
         "network":"global/networks/NETWORK_NAME"
      }
   ],
   
  "serviceAccounts": [
      {
      "email": "SERVICE_ACCOUNT_EMAIL",
      "scopes": ["https://www.googleapis.com/auth/cloud-platform"]
      }
   ],
   "shieldedInstanceConfig":{
      "enableSecureBoot":"ENABLE_SECURE_BOOT"
   }
}

Ersetzen Sie Folgendes:

  • PROJECT_ID: Die ID des Projekts, in dem die VM erstellt werden soll.
  • ZONE: Die Zone, in der die VM erstellt werden soll.
  • MACHINE_TYPE_ZONE: Die Zone mit dem Maschinentyp, der für die neue VM verwendet werden soll.
  • MACHINE_TYPE: Der Maschinentyp für die neue VM, entweder vordefiniert oder benutzerdefiniert.
  • VM_NAME ist der Name der neuen VM.
  • IMAGE_PROJECT: Projekt, das das Image enthält
    Wenn Sie beispielsweise debian-10 als Image-Familie angeben, geben Sie debian-cloud als Image-Projekt an.
  • IMAGE: Geben Sie eine der folgenden Optionen an:
    • IMAGE: Eine bestimmte Version eines öffentlichen Images

      Beispiel: "sourceImage": "projects/debian-cloud/global/images/debian-10-buster-v20200309"

    • IMAGE_FAMILY ist eine Image-Familie.

      Dadurch wird die VM aus dem neuesten nicht verworfenen Betriebssystem-Image erstellt. Wenn Sie beispielsweise "sourceImage": "projects/debian-cloud/global/images/family/debian-10" angeben, erstellt Compute Engine eine VM aus der neuesten Version des Betriebssystem-Images in der Debian 10-Image-Familie.

  • NETWORK_NAME: Das VPC-Netzwerk, das Sie für die VM verwenden möchten. Sie können default angeben, um Ihr Standardnetzwerk zu verwenden.
  • SERVICE_ACCOUNT_EMAIL: die E-Mail-Adresse des von Ihnen erstellten Dienstkontos. Beispiel: my-sa-123@my-project-123.iam.gserviceaccount.com Informationen zum Abrufen der E-Mail-Adresse finden Sie unter E-Mail-Adresse für Dienstkonto abrufen.
  • ENABLE_SECURE_BOOT: (Optional) Wenn Sie ein Image ausgewählt haben, das Shielded VM-Features unterstützt, aktiviert Compute Engine standardmäßig das Virtual Trusted Platform Module (vTPM) und das Integritätsmonitoring. Compute Engine aktiviert nicht standardmäßig Secure Boot.

    Wenn Sie den Wert true für enableSecureBoot angeben, erstellt Compute Engine eine VM, bei der alle drei Shielded VM-Features aktiviert sind. Nachdem Compute Engine Ihre VM gestartet hat, müssen Sie die VM beenden, um Shielded VM-Optionen zu ändern.

Auf andere Google Cloud Dienste zugreifen und diese verwenden

Nachdem Ihre VM für die Verwendung des Dienstkontos konfiguriert wurde, können sich Anwendungen mit dem Dienstkonto authentifizieren. Die gängigste Methode ist die Authentifizierung mithilfe von Standardanmeldedaten für Anwendungen und einer Clientbibliothek. Einige Google Cloud -Tools wie die gcloud CLI können automatisch das Dienstkonto verwenden, um von einer VM aus auf Google Cloud APIs zuzugreifen. Weitere Informationen finden Sie unter Arbeitslasten mit Dienstkonten authentifizieren.

Wenn ein Dienstkonto gelöscht wird, haben Anwendungen darüber keinen Zugriff mehr aufGoogle Cloud -Ressourcen. Wenn Sie die standardmäßigen App Engine- und Compute Engine-Dienstkonten löschen, haben ihre VMs keinen Zugriff mehr auf Ressourcen in dem Projekt. Wenn Sie nicht sicher sind, ob ein Dienstkonto verwendet wird, empfehlen wir Ihnen, das Dienstkonto zu deaktivieren, bevor Sie es löschen. Deaktivierte Dienstkonten lassen sich wieder aktivieren, wenn sie noch benötigt werden.

Beispiel: Zugriff auf Cloud Storage-Ressourcen von Ihrer VM aus

Nachdem Sie Ihre VM für die Verwendung eines Dienstkontos mit der Rolle storage.admin konfiguriert haben, können Sie Tools wie die gcloud CLI und zum Verwalten von Dateien verwenden, die Sie in Cloud Storage gespeichert haben. Führen Sie die folgenden Schritte aus, um auf Ihre Cloud Storage-Ressourcen zuzugreifen:

  1. Prüfen Sie, ob das mit der VM verknüpfte Dienstkonto die Rolle roles/storage.admin hat.

  2. Wenn Ihre VM ein benutzerdefiniertes Betriebssystem-Image verwendet, installieren Sie die gcloud CLI. Standardmäßig ist die gcloud CLI auf den meisten öffentlichen Betriebssystem-Images installiert, die von Google Cloudbereitgestellt werden.

  3. Stellen Sie eine Verbindung zur VM her.

  4. Verwenden Sie auf der VM die Google Cloud CLI, um Ihre Cloud Storage-Ressourcen zu verwalten.

Nächste Schritte