Images und Snapshots freigeben

Sie können Images und Snapshots mit Nutzern außerhalb Ihres Projekts oder Ihrer Organisation teilen. Nutzer mit Lesezugriff können diese Ressourcen verwenden, um Vorgänge in anderen Projekten und Organisationen durchzuführen. Wenn Sie z. B. einem Nutzer Lesezugriff auf ein Image oder einen Snapshot in Ihrem Projekt gewähren, kann er mit diesen Ressourcen nichtflüchtige Speicher in seinen eigenen Projekten erstellen. Mit IAM-Rollen können Sie den Lesezugriff auf Ihre Images und Snapshots freigeben.

In einigen Situationen sollen autorisierte Nutzer nur dann Zugriff auf diese Speicherressourcen haben, wenn sie sie in Ihrer Organisation oder in bestimmten Projekten verwenden. Möchten Sie die Projekte begrenzen, in denen Nutzer Ihre Images, Snapshots und Laufwerke zum Erstellen von Ressourcen verwenden können, dann legen Sie die Beschränkung der Nutzung von Speicherressourcen als Organisationsrichtlinie fest.

Weitere Informationen zu IAM-Rollen finden Sie in der IAM-Dokumentation.

Informationen zu IAM-Richtlinien auf Ressourcenebene, mit denen Sie Zugriff auf bestimmte Ressourcen wie z. B. Images statt auf ein ganzes Projekt gewähren können, finden Sie unter Zugriff auf Compute Engine-Ressourcen gewähren.

Vorbereitung

Einschränkungen

Die Freigabe von Speicherressourcen unterliegt den folgenden Einschränkungen:

  • Es ist nicht möglich, allAuthenticatedUsers oder allUsers Rollen zu gewähren, die den Zugriff auf Images oder Snapshots ermöglichen.

  • Sie können die Einschränkung constraints/compute.storageResourceUseRestrictions nur auf Organisationsebene festlegen.

  • Sie müssen die Compute Engine-API verwenden, um Images oder Snapshots von Ressourcen außerhalb Ihres Projekts zu erstellen. Sie können z. B. auf Images und Snapshots in Remoteprojekten verweisen, wenn Sie Methoden ausführen, die die Angabe eines Pfads zu einem Image oder Snapshot erfordern. Beispiele für diese Methoden:

Projekt- und organisationsübergreifende Nutzung von Speicherressourcen

Sie können den Zugriff auf Images und Snapshots für andere Nutzer freigeben, indem Sie ihnen die folgenden IAM-Rollen oder -Berechtigungen auf Ressourcen-, Projekt-, Ordner- oder Organisationsebene zuweisen.

  • Images: Die Rolle roles/compute.imageUser oder die Berechtigung compute.images.useReadOnly.
  • Snapshots: Die Rolle roles/compute.storageAdmin oder die Berechtigung compute.snapshots.useReadOnly.

Mit diesen Rollen und Berechtigungen können Sie Images und Snapshots für andere Teammitglieder außerhalb des Projekts freigeben, zu dem die Images und Snapshots gehören. Ihr Unternehmen könnte z. B. ein bestimmtes Projekt mit qualifizierten Images haben, auf das im gesamten Unternehmen zugegriffen werden soll. Sie können Ihren Teammitgliedern auf Projektebene die Rolle roles/compute.imageUser zuweisen, damit diese Teammitglieder die Images in ihren eigenen Projekten verwenden können.

Sie können die Rolle für die gemeinsame Nutzung von Images entweder über die Google Cloud Console, das gcloud-Befehlszeilentool oder die API zuweisen. Informationen zur Verwendung von IAM finden Sie in der IAM-Dokumentation.

Console

  1. Rufen Sie in der Cloud Console die IAM-Seite auf.

    Zur IAM-Seite

  2. Wählen Sie bei Aufforderung Ihr Projekt aus.
  3. Wenn Sie einen neuen Nutzer hinzufügen möchten:
    1. Klicken Sie oben auf der Seite auf Hinzufügen.
    2. Geben Sie eine oder mehrere E-Mail-Adressen des Kontos an, dem Sie Zugriff gewähren möchten.
    3. Weisen Sie dem Mitglied eine oder mehrere Rollen zu.
      • Images: Gehen Sie in der Rollenauswahl zu Compute Engine > Compute Image-Nutzer.
      • Snapshots: Gehen Sie in der Rollenauswahl zu Compute Engine > Compute Storage-Administrator.
  4. Speichern Sie die Änderungen.

gcloud

Fügen Sie mit dem gcloud-Befehlszeilentool eine Bindung zur Cloud IAM-Richtlinie für das Image oder das Imageprojekt hinzu: Mit dem folgenden Befehl wird dem Projekt eine Bindung hinzugefügt.

gcloud projects add-iam-policy-binding [PROJECT_ID] \
    --member [MEMBER_TYPE]:[ACCOUNT] --role [ROLE]

Dabei gilt:

  • [PROJECT_ID] ist die ID des Projekts mit den Images, die Sie freigeben möchten.
  • [MEMBER_TYPE] ist der Kontotyp, dem Sie Zugriffsrechte gewähren wollen. Verwenden Sie z. B. user für einzelne Nutzer, serviceAccount für ein Dienstkonto und group für eine Google-Gruppe.
  • [ACCOUNT] ist die E-Mail-Adresse des Kontos, dem diese Rolle zugewiesen werden soll. Für ein Dienstkonto könnte diese beispielsweise my-sa@my-project-123.iam.gserviceaccount.com lauten.
  • [ROLE] ist die Rolle, die Sie dem Nutzer zuweisen möchten. Geben Sie für Images roles/compute.imageUser an. Geben Sie für Snapshots roles/compute.storageAdmin an.

Im folgenden Beispiel wird dem Nutzer john@example.com die Rolle roles/compute.imageUser zugewiesen, damit er auf Images in einem Projekt namens database-images zugreifen kann:

gcloud projects add-iam-policy-binding database-images \
    --member user:john@example.com --role roles/compute.imageUser

API

Richten Sie in der API eine POST-Anfrage an die folgende URL, wobei [PROJECT_ID] die ID des Projekts mit den Images ist, die Sie freigeben möchten.

POST https://cloudresourcemanager.googleapis.com/v1/projects/[PROJECT_ID]:setIamPolicy

Der Anfragetext muss eine Liste der Bindungen enthalten, die für dieses Projekt gelten sollen. Die Rolle sollte Teil der Bindung sein. Beispiel:

{
   "policy": {
       "version": "0",
       "bindings": [
       {
           "role": "roles/compute.admin",
           "members": [
               "user:example@gmail.com"
           ]
       },
       {
           "role": "roles/compute.imageUser",
           "members": [
               "user:john@gmail.com"
           ]
       }
       ]
   }

}

Einer verwalteten Instanzgruppe Zugriff auf Images gewähren

In Compute Engine können verwaltete oder nicht verwaltete Instanzgruppen erstellt werden. Wenn Sie eine verwaltete Instanzgruppe erstellen, verwendet Compute Engine das Google APIs-Dienstkonto zum Aufrufen der Compute Engine API für relevante Aktionen in Bezug auf die Gruppe. Dabei kann es sich z. B. um die Neuerstellung bei fehlerhaften Instanzen handeln oder um das Aktualisieren von Instanzen. Wenn Sie eine verwaltete Instanzgruppe mit einem Image aus einem anderen Projekt erstellen möchten, können Sie dem APIs-Dienstkonto des Projekts, das die verwaltete Instanzgruppe erstellt, die Rolle compute.imageUser zuweisen.

Beispiel: In Projekt A soll eine verwaltete Instanzgruppe mithilfe eines Images von Projekt B erstellt werden. Der Eigentümer von Projekt B muss in diesem Fall dem Google APIs-Dienstkonto von Projekt A die Rolle compute.imageUser für Projekt B zuweisen. Dadurch kann dieses Konto die Images von Projekt B verwenden, um verwaltete Instanzgruppen in Projekt A zu erstellen.

Nachdem die Rolle compute.imageUser zugewiesen wurde, können Sie bei der Erstellung der Instanzvorlage für die Gruppe die URL dieses Images angeben.

Gehen Sie folgendermaßen vor, um die E-Mail-Adresse des Dienstkontos abzurufen und dem Konto Zugriffsrechte zu gewähren:

  1. Rufen Sie in der Cloud Console die IAM-Seite des Projekts auf, in dem Sie verwaltete Instanzgruppen erstellen möchten.

    Zur IAM-Seite

  2. Wählen Sie bei Aufforderung Ihr Projekt aus der Liste aus.
  3. Suchen Sie nach dem Google APIs-Dienstkonto, dessen E-Mail-Adresse folgendes Format hat:

    [PROJECT_NUMBER]@cloudservices.gserviceaccount.com
    
  4. Notieren Sie die oben angeführte E-Mail-Adresse. Gewähren Sie dem Konto anschließend Zugriff auf das Projekt, das die Images enthält.

    Console

    1. Öffnen Sie in der Google Cloud Console die IAM-Seite des Projekts, das die gewünschten Images enthält.

      Zur IAM-Seite

    2. Wählen Sie das Projekt aus der Projektliste aus.
    3. Klicken Sie auf Hinzufügen, um ein neues Mitglied hinzuzufügen.
    4. Geben Sie die E-Mail-Adresse des Dienstkontos in das Feld Mitglieder ein.
    5. Erweitern Sie die Drop-down-Liste Rollen und wählen Sie Compute Engine > Compute-Image-Nutzer (Beta) aus.
    6. Klicken Sie auf Hinzufügen, um das Konto hinzuzufügen.

    gcloud

    Fügen Sie mit dem gcloud-Befehlszeilentool eine Bindung zur Cloud IAM-Richtlinie für das Image oder Imageprojekt hinzu. Im folgenden Beispiel wird eine Bindung auf Projektebene hinzugefügt.

    gcloud projects add-iam-policy-binding [PROJECT_ID] \
        --member serviceAccount:[SERVICE_ACCOUNT_EMAIL] --role roles/compute.imageUser

    Dabei gilt:

    • [PROJECT_ID] ist die ID des Projekts mit den Images, die Sie freigeben möchten.
    • [SERVICE_ACCOUNT_EMAIL] ist die E-Mail-Adresse des Dienstkontos.

    Beispiel:

    gcloud projects add-iam-policy-binding database-images \
        --member serviceAccount:123456789012@cloudservices.gserviceaccount.com  \
        --role roles/compute.imageUser

    API

    Richten Sie in der API eine POST-Anfrage an die folgende URL, wobei [PROJECT_ID] die ID des Projekts mit den Images ist, die Sie freigeben möchten.

    POST https://cloudresourcemanager.googleapis.com/v1/projects/$[PROJECT_ID]:setIamPolicy
    

    Der Anfragetext muss eine Liste der Bindungen enthalten, die für dieses Projekt gelten sollen. Die Rolle roles/compute.imageUser muss Teil der Bindung sein. Beispiel:

    {
       "policy": {
           "version": "0",
           "bindings": [
           {
               "role": "roles/owner",
               "members": [
                   "user:example@gmail.com"
               ]
           },
           {
               "role": "roles/compute.imageUser",
               "members": [
                   "serviceAccount:123456789012@cloudservices.gservbiceaccount.com"
               ]
           }
           ]
       }
    }
    

Verwendung freigegebener Images und Snapshots einschränken

Nachdem Sie Images und Snapshots für andere Nutzer freigegeben haben, können Sie steuern, wo diese Nutzer die Ressourcen verwenden. Mit der Einschränkung constraints/compute.storageResourceUseRestrictions können Sie festlegen, in welchen Projekten Nutzer Ihre Speicherressourcen verwenden dürfen.

Sie müssen die Berechtigung haben, die Richtlinien Ihrer Organisation zu ändern, um diese Einschränkungen festzulegen. Die Rolle resourcemanager.organizationAdmin hat beispielsweise die Berechtigung, diese Einschränkungen festzulegen.

  1. Suchen Sie die Organisations-ID für Ihre Organisation.

    gcloud organizations list
    
  2. Rufen Sie die vorhandenen Richtlinieneinstellungen Ihrer Organisation ab.

    gcloud beta resource-manager org-policies describe \
        compute.storageResourceUseRestrictions \
        --organization [ORGANIZATION_ID] > org-policy.yaml
    

    [ORGANIZATION_ID] ist Ihre Organisations-ID.

  3. Öffnen Sie die Datei org-policy.yaml in einem Texteditor und ändern Sie die Einschränkung compute.storageResourceUseRestrictions. Fügen Sie die gewünschten Einschränkungen hinzu und entfernen Sie die nicht mehr benötigten Einschränkungen. Wenn Sie mit der Bearbeitung der Datei fertig sind, speichern Sie die Änderungen. Sie können in der Richtliniendatei z. B. die folgende Einschränkung angeben:

    constraint: compute.storageResourceUseRestrictions
    listPolicy:
      allowedValues:
        - under:organization/[ORGANIZATION_ID]
    
  4. Wenden Sie die Datei policy.yaml auf Ihre Organisation an.

    gcloud beta resource-manager org-policies set-policy
    --organization [ORGANIZATION_ID] org-policy.yaml
    

    [ORGANIZATION_ID] ist Ihre Organisations-ID.

Wenn Sie die Einschränkungen in der Organisationsrichtlinie fertig konfiguriert haben, sollten Sie diese Einschränkungen testen und prüfen, ob die gewünschten Beschränkungen erzielt wurden.

Images von einem anderen Projekt verwenden

Wenn Ihnen die Rolle compute.imageUser zugeteilt wurde, können Sie auf die Images des Projekts zugreifen, indem Sie das Imageprojekt in Ihrer Anfrage angeben. So erhalten Sie beispielsweise eine Liste der für Sie verfügbaren Images:

gcloud compute images list --project [IMAGE_PROJECT_ID]

Weitere Informationen zur Erstellung neuer Ressourcen, wie etwa einer Instanz, mithilfe eines Images finden Sie unter Instanz erstellen und starten.

Mit dem folgenden Befehl erstellen Sie beispielsweise eine Instanz mit einem Image namens database-image-a aus dem Projekt database-images:

gcloud compute instances create test-instance --image database-image-a --image-project database-images

Sie können das Image auch für die Erstellung von nichtflüchtigem Speicher verwenden. Weitere Informationen zur Erstellung eines Laufwerks aus einem Image finden Sie unter Eigenständigen nichtflüchtigen Speicher mit Startfunktion aus einem Image erstellen.

Snapshots aus einem anderen Projekt verwenden

Wenn Ihnen die Rolle compute.snapshots.useReadOnly für einen Snapshot in einem bestimmten Projekt zugeteilt wurde, können Sie auf diesen Snapshot zugreifen, indem Sie die Projekt-ID in Ihrer Anfrage angeben. Wenn Ihnen die Rolle compute.storageAdmin in einem bestimmten Projekt zugeteilt wurde, können Sie auf die Snapshots in diesem Projekt zugreifen, indem Sie die Projekt-ID in Ihrer Anfrage angeben. So rufen Sie beispielsweise eine Liste der für Sie verfügbaren Snapshots im Projekt [SNAPSHOT_PROJECT_ID] ab:

gcloud compute snapshots list --project [SNAPSHOT_PROJECT_ID]

Snapshots mit Nutzern in anderen Projekten teilen, um Laufwerksdaten in andere Projekte zu übertragen.

Wenn Sie beispielsweise im project-a befindliche Daten vom Laufwerk disk-1 auf ein neues Laufwerk disk-2 verschieben möchten, das sich im project-b befindet, führen Sie die folgenden Schritte aus. In diesem Beispiel befindet sich disk-1 in der Zone us-west2-a und instance-1 befindet sich in der Zone us-west2-b.

gcloud

  1. Erstellen Sie einen Snapshot von disk-1:

    gcloud --project project-a compute disks snapshot disk-1 --snapshot-names snapshot-1
    
  2. Erstellen Sie ein neues Laufwerk im project-b, das auf dem Snapshot basiert:

    gcloud --project project-b beta compute disks create disk-2 --source-snapshot projects/project-a/global/snapshots/snapshot-1
    
  3. Hängen Sie das neue Laufwerk an die Instanz instance-1 im project-b an. Das Laufwerk muss sich in derselben Zone wie die Instanz befinden:

    gcloud --project project-b compute instances attach-disk instance-1 --disk disk-2
    
  4. Stellen Sie das Laufwerk bereit. Eine Beschreibung finden Sie in den Schritten 5–7 unter Nichtflüchtigen Speicher formatieren und bereitstellen.

API

  1. Erstellen Sie einen Snapshot von disk-1, indem Sie eine POST-Anfrage an die Methode disks.createSnapshot stellen.

    POST https://compute.googleapis.com/compute/v1/projects/project-a/zones/us-west2-a/disks/disk-1/createSnapshot
    
    {
     "name": "snapshot-1"
    }
    
  2. Erstellen Sie ein neues Laufwerk disk-2 im Projekt project-b, das auf dem Snapshot basiert. Erstellen Sie eine POST-Anfrage, um mit der Methode disks.insert einen zonalen nichtflüchtigen Speicher zu erstellen.

    POST https://compute.googleapis.com/compute/v1/projects/project-b/zones/us-west2-b/disks
    
    {
     "name": "disk-2",
     "sizeGb": [DISK_SIZE],
     "type": "zones/us-west2-b/diskTypes/[DISK_TYPE]"
     "sourceSnapshot": "projects/project-a/global/snapshots/snapshot-1"
    }
    

    Dabei gilt:

    • [DISK_SIZE] ist die Größe des neuen Laufwerks in GB.
    • [DISK_TYPE] ist der Typ des nichtflüchtigen Speichers, pd-standard oder pd-ssd.
  3. Hängen Sie das neue Laufwerk an die Instanz instance-1 im project-b an. Das Laufwerk muss sich in derselben Zone wie die Instanz befinden. Richten Sie eine POST-Anfrage an die Methode instances.attachDisk und fügen Sie die URL zum zonalen nichtflüchtigen Speicher hinzu, den Sie gerade erstellt haben.

    POST https://compute.googleapis.com/compute/v1/projects/project-b/zones/us-west2-b/instances/instance-1/attachDisk
    
    {
     "source": "/compute/v1/projects/project-b/zones/us-west2-b/disks/disk-2"
    }
    
  4. Stellen Sie das Laufwerk bereit. Eine Beschreibung finden Sie in den Schritten 5–7 unter Nichtflüchtigen Speicher formatieren und bereitstellen.

Weitere Informationen