Zugriff auf Compute Engine-Ressourcen gewähren

Mit Cloud IAM-Richtlinien für Compute Engine-Ressourcen können Sie Zugriff auf bestimmte Ressourcen wie VM-Instanzen, Laufwerke und Images gewähren. Dazu verwalten Sie Cloud IAM-Rollen für diese Ressourcen. Damit haben Sie die Möglichkeit, nach dem Grundsatz der geringsten Berechtigung zu verfahren und beispielsweise Mitarbeitern nur Berechtigungen für genau die Ressourcen zu erteilen, die sie für ihre Arbeit benötigen.

Ressourcen übernehmen auch die Richtlinien der ihnen übergeordneten Ressourcen. Die geltende Richtlinie für eine Ressource ist die Kombination aus der für diese Ressource festgelegten Richtlinie und der Richtlinie, die von weiter oben in der Ressourcenhierarchie übernommen wird.

Wenn Sie ein Mitglied an eine Ressource binden oder die Richtlinie für eine Ressource festlegen, erhalten Mitglieder keine entsprechende Einladungs-E-Mail. Stattdessen wird der Zugriff für jedes Mitglied direkt aktualisiert.

Weitere Informationen zu den Mitgliedertypen (z. B. Nutzer oder Gruppen), für die eine Cloud IAM-Richtlinie festgelegt werden kann, finden Sie in der Cloud IAM-Dokumentation.

Vorbereitung

Unterstützte Ressourcen

Aktuell können Sie Zugriff auf die folgenden Compute Engine-Ressourcen gewähren:

Außerdem können Sie Zugriff auf die unten aufgeführte Ressource gewähren. Die Gewährung des Zugriffs auf diese Ressource ist derzeit aber in der Betaphase. Sie müssen deshalb dafür gcloud beta oder Beta-API-Befehle verwenden.

Mitgliederbindungen an eine Ressource hinzufügen oder davon entfernen

Eine Cloud IAM-Bindung an eine Ressource erteilt einem Mitglied bezüglich dieser Ressource eine bestimmte Rolle. Mit der Google Cloud Platform Console und dem gcloud-Befehlszeilentool können Sie Cloud IAM-Bindungen an Instanzen, Laufwerke, Images und Snapshots hinzufügen oder entfernen.

Informationen zum Aktualisieren der Cloud IAM-Richtlinie für alle Mitglieder einer Ressource finden Sie unter Richtlinien einer Ressource abrufen und festlegen.

Konsole

  1. Gehen Sie zur entsprechenden Ressourcenseite, für die Sie Berechtigungen hinzufügen möchten.
  2. Klicken Sie die Kästchen neben den Ressourcen an, die Sie aktualisieren möchten.
  3. Klicken Sie auf Infofeld anzeigen, um die Spalte mit den Berechtigungen zu maximieren.
  4. So fügen Sie Mitglieder hinzu:
    1. Geben Sie im Feld Mitglieder hinzufügen ein oder mehrere Mitglieder ein.
    2. Wählen Sie im Drop-down-Menü Rolle auswählen eine oder mehrere Rollen aus.
    3. Klicken Sie auf Hinzufügen, um Ihre Änderungen zu speichern.
  5. So entfernen Sie Mitglieder:
    1. Wenn die Ressource Richtlinienbindungen für eine oder mehrere Rollen hat, werden diese Rollen als erweiterbare Karten angezeigt. Klicken Sie auf die Karte der Rolle, für die Sie ein oder mehrere Mitglieder entfernen möchten.
    2. Klicken Sie auf das Löschsymbol (Papierkorbähnliches Löschsymbol), um die jeweilige Rolle zu entfernen.

gcloud

Für die Zuweisung einer Rolle zu einem an eine Ressource gebundenen Mitglied verwenden Sie den Unterbefehl add-iam-policy-binding der Ressource mit den Flags --member und --role:

gcloud compute [RESOURCE_TYPE] add-iam-policy-binding [RESOURCE_NAME] \
    --member='[MEMBER]' \
    --role='[ROLE]'

Zum Entfernen einer Richtlinienbindung verwenden Sie den Unterbefehl remove-iam-policy-binding der Ressource mit den Flags --member und --role:

gcloud compute [RESOURCE_TYPE] remove-iam-policy-binding [RESOURCE_NAME] \
    --member='[MEMBER]' \
    --role='[ROLE]'

Dabei gilt:

  • [RESOURCE_TYPE] ist der Ressourcentyp: disks, images, instances, instance-templates, sole-tenancy node-groups, sole-tenancy node-templates oder snapshots.
  • [RESOURCE_NAME] ist der Name der Ressource, z. B. my_instance.
  • [MEMBER] ist das Mitglied, für das die Bindung hinzugefügt werden soll.
    • Muss das Format user|group|serviceAccount:email oder domain:domain haben, z. B. user:test-user@gmail.com, group:admins@example.com, serviceAccount:test123@example.domain.com oder domain:example.domain.com.
    • Kann auch einer der folgenden speziellen Werte sein:
      • allUsers: Jeder, der Zugriff auf das Internet hat, ob mit oder ohne Google-Konto.
      • allAuthenticatedUsers: Jeder, der sich mit einem Google-Konto oder einem Dienstkonto authentifiziert hat.
  • [ROLE] ist die Rolle, die für dieses Mitglied hinzugefügt werden soll.

Wenn Sie Zugriff auf eine Ressource gewähren, die sich derzeit in der Betaphase befindet, verwenden Sie stattdessen den Befehl gcloud beta compute.

Richtlinie einer Ressource abrufen und festlegen

Die Cloud IAM-Richtlinie einer Ressource ist eine Sammlung von Anweisungen, die definiert, wem Zugriff auf diese Ressource gewährt wird.

Sie können die Richtlinie einer Ressource nach dem Muster Read-Modify-Write (Lesen-Ändern-Schreiben) aktualisieren. Dabei wird die aktuelle Cloud IAM-Richtlinie einer Ressource zuerst abgerufen, dann aktualisiert und schließlich festgelegt. Weitere Informationen zu diesem Muster finden Sie in der Cloud IAM-Dokumentation.

gcloud

Sie können entweder JSON- oder YAML-Dateien verwenden, wenn Sie gcloud-Befehle zum Ausführen oder Festlegen einer Ressourcenrichtlinie ausführen. Für die Beispiele in diesem Abschnitt wird JSON verwendet.

  1. Rufen Sie die Richtlinie, die Sie ändern möchten, mit dem Unterbefehl get-iam-policy der Ressource ab:

    gcloud compute [RESOURCE_TYPE] get-iam-policy [RESOURCE_NAME] --format json > policy.json
    

    Dabei gilt:

    • [RESOURCE_TYPE] ist der Ressourcentyp: disks, images, instances, instance-templates oder snapshots.
    • [RESOURCE_NAME] ist der Name der Ressource.

    Führen Sie beispielsweise Folgendes aus, um die Cloud IAM-Richtlinie für ein Laufwerk mit dem Namen example-disk abzurufen:

    gcloud compute disks get-iam-policy example-disk --format json > policy.json
    
  2. Eine leere JSON-Richtliniendatei sieht in etwa wie im Folgenden dargestellt aus. Mit dem Attribut etag lässt sich überprüfen, ob sich die Richtlinie seit der letzten Anfrage geändert hat:

    {
      "etag": "ACAB"
    }
    
  3. Aktualisieren Sie die JSON-Datei mithilfe eines Texteditors. Erstellen Sie ein bindings-Objekt, das ein Array enthält. Jedes Objekt im Array hat ein Array von members und eine mit diesen Mitgliedern verknüpfte Rolle. So erteilen Sie beispielsweise den Gruppen all-devs@example.com und some-devs@other-place.com die Rolle roles/compute.imageUser und bob@example.com die Rolle roles/compute.storageAdmin:

    {
      "bindings": [
        {
          "members": [
            "group:all-devs@example.com",
            "group:other-devs@other-place.com"
          ],
          "role": "roles/compute.imageUser"
        },
        {
          "members": [
            "user:bob@example.com"
          ],
          "role": "roles/compute.storageAdmin"
        }
      ],
      "etag": "ACAB"
    }
    
  4. Aktualisieren Sie die Richtlinie und führen Sie dazu den Unterbefehl set-iam-policy der Ressource aus. Geben Sie dabei den Pfad zur JSON-Datei an, die die neue Richtlinie enthält. Der Befehl kann nur erfolgreich ausgeführt werden, wenn der etag-Wert in der JSON-Datei mit dem aktuellen etag-Wert der Ressource übereinstimmt.

    gcloud compute [RESOURCE_TYPE] set-iam-policy [RESOURCE_NAME] policy.json
    

    Mit dem folgenden Befehl legen Sie beispielsweise die Cloud IAM-Richtlinie für ein Laufwerk mit dem Namen example-disk fest:

    gcloud compute disks set-iam-policy example-disk policy.json
    
  5. Der Befehl gibt die aktualisierte Richtlinie aus, die für etag einen aktualisierten Wert enthält:

    bindings:
    - members:
      - user:bob@example.com
        role: roles/compute.storageAdmin
    - members:
      - group:all-devs@example.com
      - group:other-devs@other-place.com
        role: roles/compute.imageUser
    etag: BwUjMhXbSPU=
    

API

So ändern Sie eine vorhandene Richtlinie:

  1. Rufen Sie durch Aufruf der Methode getIamPolicy() der Ressource die vorhandene Richtlinie ab.

    Beispielsweise auf einem Laufwerk:

    GET https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/disks/[DISK_NAME]/getIamPolicy
    
  2. Die Anfrage gibt die Richtlinie einschließlich eines Arrays von bindings, sofern Bindungen vorhanden sind, und eines etag-Werts zurück. Mit dem Attribut etag lässt sich überprüfen, ob die Richtlinie sich seit der letzten Anfrage geändert hat:

    {
      "etag": "BwVvzaUs8EY=",
      "bindings":[
        {
          "role":"roles/compute.storageAdmin",
          "members":[
            "user:bob@example.com",
            "serviceAccount:service-account@my-project.iam.gserviceaccount.com"
          ]
        },
        {
          "role":"roles/compute.imageUser",
          "members":[
            "user:email1@gmail.com",
            "user:email2@gmail.com",
            "user:email3@gmail.com"
          ]
        }
      ]
    }
    
  3. Ändern Sie die Richtlinie nach Bedarf und legen Sie dann mit setIamPolicy() die aktualisierte Richtlinie fest.

    Wenn Sie beispielsweise für email2@gmail.com die Zuweisung der Rolle compute.imageUser wieder rückgängig machen möchten, sieht die Anfrage in etwa so aus:

    POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/disks/[DISK_NAME]/setIamPolicy

    {
      "etag": "BwVvzaUs8EY=",
      "bindings":[
        {
          "role":"roles/compute.storageAdmin",
          "members":[
            "user:bob@example.com",
            "serviceAccount:service-account@my-project.iam.gserviceaccount.com"
          ]
        },
        {
          "role":"roles/compute.imageUser",
          "members":[
            "user:email1@gmail.com",
            "user:email3@gmail.com"
          ]
        }
      ]
    }
    
  4. Die Antwort zeigt die aktualisierte Richtlinie, die für etag einen aktualisierten Wert enthält:

    {
      "etag": "BwVwGgz7Arg=",
      "bindings":[
        {
          "role":"roles/compute.storageAdmin",
          "members":[
            "user:bob@example.com",
            "serviceAccount:service-account@my-project.iam.gserviceaccount.com"
          ]
        },
        {
          "role":"roles/compute.imageUser",
          "members":[
            "user:email1@gmail.com",
            "user:email3@gmail.com"
          ]
        }
      ]
    }
    

Berechtigungen des aufrufenden Nutzers prüfen

Die API-Methode testIamPermissions gibt mit einer Ressourcen-URL und einem Satz von Berechtigungen als Eingabeparameter den Satz an Berechtigungen für den Nutzer zurück. Sie können diese Methode für alle unterstützten Ressourcen verwenden.

Wenn Sie die Berechtigungen direkt mit der GCP verwalten, muss testIamPermission in der Regel nicht aufgerufen werden. testIamPermissions ist für die Verknüpfung mit Ihrer proprietären Software vorgesehen, etwa einer benutzerdefinierten grafischen Oberfläche. Angenommen, Sie erstellen beispielsweise ein GUI, das auf der Compute Engine API basiert und eine Schaltfläche zum Starten einer Instanz hat. In diesem Fall können Sie compute.instances.testIamPermissions() aufrufen, um festzustellen, ob die Schaltfläche aktiviert oder deaktiviert werden soll.

So testen Sie, ob ein Nutzer bestimmte Berechtigungen für eine Ressource hat:

  1. Senden Sie eine Anfrage an die Ressource und geben Sie im Anfragetext eine Liste der Berechtigungen an, auf die geprüft werden soll.

    Beispielsweise können Sie auf einer Instanz auf compute.instances.start, compute.instances.stop und compute.instances.delete prüfen:

    POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instances/[INSTANCE_NAME]/setIamPolicy

    {
      "permissions": [
        "compute.instances.start",
        "compute.instances.stop",
        "compute.instances.delete"
       ]
    }
    
  2. Die Anfrage liefert die Berechtigungen, die für den Nutzer aktiviert sind.

    {
      "permissions": [
        "compute.instances.start",
        "compute.instances.stop"
      ]
    }
    

Szenarien

Bestimmte Images innerhalb einer Organisation teilen

Stellen Sie sich ein Unternehmen vor, das über eine Reihe von IT-zertifizierten Maschinen-Images verfügt und bestimmten Teams Zugriff auf bestimmte Images gewähren möchte. Ohne Cloud IAM-Richtlinien für Compute Engine-Ressourcen müsste das Unternehmen entweder allen Nutzern Zugriff auf alle Images gewähren oder die Images in mehreren Projekten speichern. Mit den Cloud IAM-Richtlinien für Compute Engine-Ressourcen kann das Unternehmen alle Images zur einfacheren Verwaltung einem einzigen Projekt zuordnen und den Teams nur Zugriff auf die Teilmenge von Images gewähren, die sie für ihre jeweilige Arbeit benötigen.

Im folgenden Beispiel sind in images-project mehrere Images vorhanden. Die Gruppe all-devs@example.com hat Zugriff auf das Image ubuntu-base-v1-0, nicht jedoch auf das Image ubuntu-v1-1-test oder mysql-v1. Darüber hinaus hat die Gruppe db-admins@example.com nur Zugriff auf das Image mysql-v1. Diese Konfiguration kann angepasst werden. Legen Sie dafür eine Cloud IAM-Richtlinie für das Image ubuntu-base-v1-0 fest, die all-devs@example.com die Rolle Image-Nutzer zuweist, und legen Sie für mysql-v1 eine Cloud IAM-Richtlinie fest, die db-admin@example.com die Rolle Image-Nutzer zuweist.

So gewähren Sie all-devs@example.com die Berechtigung zur Verwendung des Images shared-image mithilfe des gcloud-Befehlszeilentools:

  1. Rufen Sie die Cloud IAM-Richtlinie ab:

    gcloud compute images get-iam-policy shared-image --format json > policy.json
    
  2. Ändern Sie policy.json in einem Texteditor, um all-devs@example.com die Rolle roles/compute.imageUser zuzuweisen:

    {
      "bindings": [
        {
          "members": [
            "group:all-devs@example.com"
          ],
          "role": "roles/compute.imageUser"
        }
      ],
      "etag": "ACAB"
    }
    
  3. Wenden Sie die geänderte Datei policy.json auf das Image an:

    gcloud compute images set-iam-policy shared-image policy.json
    

Bestimmte Images für die Öffentlichkeit freigeben

Angenommen, Sie sind ein Google-Partner, der Images für Compute Engine-Nutzer veröffentlicht. Sie können dann eine Cloud IAM-Richtlinie für ein Image festlegen, um es für alle authentifizierten Nutzer in Compute Engine freizugeben.

So machen Sie shared-image mit der Compute Engine API jedem Compute Engine-Nutzer zugänglich:

  1. Rufen Sie die Cloud IAM-Richtlinie ab.

    GET https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/images/shared-image/getIamPolicy
    
  2. Die Anfrage liefert die Richtlinie.

    {
     "etag": "ACAB"
    }
    
  3. Wenden Sie die geänderte Richtlinie an.

    POST https://www.googleapis.com/compute/alpha/projects/[PROJECT_ID]/zones/[ZONE]/images/shared-image/setIamPolicy
    {
      "bindings": [
        {
          "members": [
            "allAuthenticatedUsers"
          ],
          "role": "roles/compute.imageUser"
        }
      ],
      "etag": "ACAB"
    }
    
  4. Die Anfrage liefert die aktualisierte Richtlinie.

    {
     "etag": "BwVa45js9SQ=",
     "bindings": [
       {
         "role": "roles/compute.imageUser",
         "members": [
           "allAuthenticatedUsers"
         ]
       }
     ]
    }
    

Einem Teamkollegen zwecks Fehlerbehebung Zugriff auf eine Instanz gewähren

Angenommen, Sie haben eine Instanz erstellt und wollen mithilfe von alice@example.com einen Fehler beheben. Weisen Sie dann alice@example.com die Rolle Compute-Instanzadministrator (Version 1) auf der Instanz zu und ändern Sie dafür entsprechend die Cloud IAM-Richtlinie der Instanz.

Wenn die Instanz für eine Ausführung als Dienstkonto konfiguriert ist und Sie Alice die Möglichkeit geben möchten, über SSH darauf zuzugreifen, Metadaten festzulegen oder ein Laufwerk anzuhängen, weisen Sie alice@example.com die Rolle Dienstkontonutzer auf dem Dienstkonto der Instanz zu. Die Zuweisung dieser Rolle auf dem Dienstkonto ist erforderlich, damit Alice dann mit diesen drei Vorgängen Befehle im Namen des Dienstkontos ausführen kann. Weitere Informationen zum Behandeln von Dienstkonten als Ressource finden Sie unter Dienstkontoberechtigungen.

Wenn Sie möchten, dass Alice die Instanz über die GCP Console verwaltet, weisen Sie ihr eine Rolle mit der Berechtigung compute.projects.get zu. Sie können Alice beispielsweise die Rolle Compute-Betrachter zuweisen, die diese Berechtigung enthält. Diese Rolle kann auch alle Compute Engine-Ressourcen im Projekt anzeigen, aber sie kann keine Daten von Laufwerken, Images oder Snapshots lesen. Alternativ können Sie eine benutzerdefinierte Rolle erstellen, die die erforderlichen Berechtigungen hat.

Mit gcloud gehen Sie dafür so vor:

  1. Rufen Sie die Cloud IAM-Richtlinie für die Instanz ab:

    gcloud compute instances get-iam-policy example-instance --format json > policy.json
    
  2. Ändern Sie policy.json in einem Texteditor.

    {
      "bindings": [
        {
          "members": [
            "user:alice@example.com"
          ],
          "role": "roles/compute.instanceAdmin.v1"
        }
      ],
      "etag": "ACAB"
    }
    
  3. Wenden Sie die geänderte Datei policy.json auf die Instanz an:

    gcloud compute instances set-iam-policy example-instance policy.json
    
  4. Weisen Sie alice@example.com die Rolle Dienstkontonutzer auf dem Dienstkonto der Instanz zu. Es wird davon ausgegangen, dass das Dienstkonto der Instanz data-reader-service-account@[PROJECT_ID].iam.gserviceaccount.com lautet.

     gcloud iam service-accounts add-iam-policy-binding \
         data-reader-service-account@[PROJECT_ID].iam.gserviceaccount.com \
         --member="user:alice@example.com" \
         --role="roles/iam.serviceAccountUser"
    

    gcloud gibt Folgendes zurück:

     bindings:
     - members:
       - user:alice@example.com
       role: roles/iam.serviceAccountUser
     etag: BwVa42MC-aY=
    
  5. Weisen Sie alice@example.com die Rolle Compute-Betrachter für das Projekt zu:

    gcloud projects add-iam-policy-binding [PROJECT_ID] \
        --member=user:alice@example.com \
        --role=roles/compute.viewer
    

    gcloud gibt Folgendes zurück:

    bindings:
    - members:
      - user:alice@example.com
      role: roles/iam.serviceAccountUser
    [...]
    etag: BwVa42MC-aY=
    

Jetzt wird für Alice die Instanz in der GCP Console angezeigt. Sie hat die Berechtigung, eine beliebige Methode für die Instanz aufzurufen. Wenn Alice Berechtigungen für zusätzliche Ressourcen benötigt (zum Beispiel für Subnetzwerke oder Firewalls), müssen Sie ihr die entsprechende vordefinierte Rolle zuweisen (zum Beispiel Netzwerknutzer).

Weitere Informationen

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

Feedback geben zu...

Compute Engine-Dokumentation