Auf dieser Seite werden Berechtigungen zur Zugriffssteuerung auf Container Registry beschrieben.
Nachdem Sie die Berechtigungen konfiguriert haben, können Sie die Authentifizierung für Docker-Clients konfigurieren, die Sie zum Übertragen von Images per Push und Pull verwenden.
Wenn Sie Container Analysis für die Arbeit mit Containermetadaten verwenden, z. B. gefundene Sicherheitslücken-Images, lesen Sie die Container Analysis-Dokumentation für Informationen dazu, wie Sie Zugriff zum Aufrufen oder Verwalten von Metadaten gewähren können.
Berechtigungen für das Container Registry-Dienstkonto
Der Container Registry-Dienst-Agent ist ein von Google verwaltetes Dienstkonto, das bei der Interaktion mit Google Cloud-Diensten im Namen von Container Registry agiert.
Diesem Dienstkonto wird in Projekten, in denen die Container Registry API nach dem 5. Oktober 2020 aktiviert wurde, die Rolle „Container Registry-Dienst-Agent“ gewährt, um das Prinzip der geringsten Berechtigung durchzusetzen. Diese Rolle hat die folgenden Berechtigungen:
- Themen veröffentlichen:
pubsub.topics.publish
- Storage-Objekt-ACLs lesen:
storage.objects.getIamPolicy
- Storage-Objektdaten und -Objektmetadaten lesen:
storage.objects.get
- Storage-Objekte in einem Bucket auflisten und Objektmetadaten lesen:
storage.objects.list
Bisher wurde dem Container Registry-Dienstkonto die Rolle Bearbeiter zugewiesen. Da die Bearbeiterrolle Berechtigungen zum Erstellen und Löschen der meisten Ressourcen in einem Projekt gewährt, empfehlen wir, die Berechtigungen einzuschränken, falls Ihr Container Registry-Dienstkonto diese Rolle hat.
Führen Sie folgenden Befehl aus, um die aktuellen Berechtigungen Ihres Container Registry-Dienstkontos zu prüfen:
gcloud projects get-iam-policy PROJECT-ID \
--flatten="bindings[].members" \
--format='table(bindings.role)' \
--filter="bindings.members:service-PROJECT-NUMBER@containerregistry.iam.gserviceaccount.com"
Dabei gilt:
- PROJECT-ID ist die Google Cloud-Projekt-ID.
- PROJECT-NUMBER ist die Google Cloud-Projektnummer.
Sie können Projekt-ID und Projektnummer in der Google Cloud Console oder mit folgenden Befehlen ermitteln:
PROJECT=$(gcloud config get-value project)
echo $PROJECT && gcloud projects list --filter="$PROJECT" --format="value(PROJECT_NUMBER)"
So erteilen Sie die Rolle "Container Registry-Dienst-Agent" und widerrufen die Rolle "Bearbeiter":
Weisen Sie die Rolle "Container Registry-Dienst-Agent" mit dem folgenden Befehl zu:
gcloud projects add-iam-policy-binding PROJECT-ID \ --member=serviceAccount:service-PROJECT-NUMBER@containerregistry.iam.gserviceaccount.com --role=roles/containerregistry.ServiceAgent
Entziehen Sie die Bearbeiterrolle mit dem folgenden Befehl:
gcloud projects remove-iam-policy-binding PROJECT-ID \ --member=serviceAccount:service-PROJECT-NUMBER@containerregistry.iam.gserviceaccount.com --role=roles/editor
Berechtigungen zum Zugriff auf Container Registry
Alle Nutzer, Dienstkonten und andere Identitäten, die mit Container Registry interagieren, müssen die entsprechenden IAM-Berechtigungen (Identity and Access Management) für Cloud Storage-Speicher haben.
IAM-Berechtigungen
IAM-Berechtigungen bestimmen, wer auf eine Ressource zugreifen kann. Alle Nutzer, Dienstkonten und andere Identitäten, die mit Container Registry interagieren, müssen die entsprechenden Cloud Storage-Berechtigungen haben.
Google Cloud verwendet standardmäßig Standarddienstkonten für die Interaktion mit Ressourcen innerhalb desselben Projekts. Beispielsweise kann das Cloud Build-Dienstkonto sowohl Images übertragen als auch abrufen, wenn sich Container Registry im selben Projekt befindet.
In folgenden Fällen müssen Sie Berechtigungen selbst konfigurieren oder ändern:
- Sie verwenden ein Dienstkonto in einem Projekt, um in einem anderen Projekt auf Container Registry zuzugreifen.
- Sie verwenden ein Standarddienstkonto mit Lesezugriff auf den Speicher, möchten jedoch Images sowohl per Pull als auch per Push übertragen.
- Sie verwenden ein benutzerdefiniertes Dienstkonto für die Interaktion mit Container Registry.
Zugriffsbereiche für VMs und Cluster
Bei Compute Engine-VM-Dienstkonten, einschließlich VMs in GKE-Clustern, basiert der Zugriff auf den Speicher sowohl auf IAM-Berechtigungen als auch auf dem konfigurierten Speicherzugriffsbereich.
Das Compute Engine-Standarddienstkonto ist so konfiguriert, dass Images im selben Projekt wie die VM abgerufen werden. Wenn Sie eine VM oder einen GKE-Cluster benötigen, um Images abzurufen oder mit Container Registry in einem anderen Projekt zu interagieren, lesen Sie Container Registry mit Google Cloud verwenden.
IAM-Berechtigungen konfigurieren
Container Registry verwendet Cloud Storage-Buckets als zugrunde liegenden Speicher für Container-Images. Sie steuern den Zugriff auf Ihre Images, indem Sie einem Nutzer, einer Gruppe, einem Dienstkonto oder einer anderen Identität die entsprechenden Cloud Storage-Berechtigungen gewähren.
Cloud Storage-Berechtigungen auf Projektebene gelten für alle Speicher-Buckets im Projekt, nicht nur für die von Container Registry verwendeten Buckets. Weisen Sie Berechtigungen für den von der Registry verwendeten Storage-Bucket zu, um spezifische Berechtigungen für Container Registry zu konfigurieren. Container Registry ignoriert Berechtigungen, die für einzelne Objekte im Storage-Bucket festgelegt wurden.
Obwohl Sie auch die Rollen Owner
, Editor
und Viewer
auf Projektebene verwenden können, um Zugriff zu gewähren, können Sie mit den Cloud Storage-Rollen das Sicherheitsprinzip der geringsten Berechtigung anwenden, damit Nutzer und Dienstkonten nur die Berechtigungen haben, die tatsächlich erforderlich sind.
Google Cloud-Produkte und -Anwendungen, die mit Google Cloud interagieren, verwenden Dienstkonten für die Interaktion mit Container Registry. Für den Zugriff auf Dienstkonten gilt Folgendes:
- Standardmäßig sind Dienstkonten für einige gängige Einbindungen mit Zugriff auf Container Registry innerhalb desselben Projekts konfiguriert. Beispielsweise kann das Cloud Build-Dienstkonto standardmäßig Images in dasselbe Projekt übertragen und abrufen.
- Wenn das Dienstkonto in einem anderen Projekt auf Container Registry zugreifen muss, müssen Sie die erforderlichen Berechtigungen im Projekt mit Container Registry gewähren.
- Für VM-Instanzen, einschließlich derer in Google Kubernetes Engine-Clustern, müssen die richtigen Speicherzugriffsbereiche konfiguriert sein, um Images hoch- oder herunterladen zu können. Standardmäßig können VMs Images abrufen, wenn sich Container Registry im selben Projekt befindet.
Berechtigungen und Rollen
In der folgenden Tabelle werden die Berechtigungen und Rollen beschrieben, die für Container Registry-Aktionen erforderlich sind.
Weitere Informationen zu Cloud Storage-Rollen und -Berechtigungen finden Sie in der Dokumentation zu Cloud Storage.
Aktion | Berechtigungen | Rolle | Rollentitel |
---|---|---|---|
Push (Lesen und Schreiben) |
storage.buckets.create storage.buckets.delete storage.buckets.get storage.buckets.list storage.buckets.update storage.objects.create storage.objects.delete storage.objects.get storage.objects.list storage.objects.update |
roles/storage.admin | Storage-Administrator |
Pull (nur Lesen) |
storage.objects.get storage.objects.list |
roles/storage.objectViewer | Storage-Objekt-Betrachter |
IAM-Berechtigungen gewähren
Gewähren Sie Berechtigungen für den von Container Registry verwendeten Storage-Bucket.
Berechtigungen gewähren
Erstellen Sie einen Storage-Bucket für den multiregionalen Host, falls im Projekt noch keiner vorhanden ist. Folgende Hosts sind verfügbar:
gcr.io
,asia.gcr.io
,eu.gcr.io
undus.gcr.io
. Für diesen Schritt benötigen Sie die Berechtigung „Inhaber“, „Bearbeiter“ oder „Storage-Administrator“.Übertragen Sie ein ursprüngliches Image per Push an den Host, um den Storage-Bucket zu erstellen. Mit diesen Befehlen rufen Sie beispielsweise das
busybox
-Image aus Docker Hub ab, taggen es mit dem Pfad zur Registrygcr.io
im Projektmy-project
und übertragen das Image dann per Push.docker pull busybox docker tag busybox gcr.io/my-project/busybox docker push gcr.io/my-project/busybox
Erteilen Sie im Projekt mit Container Registry die entsprechenden Berechtigungen für den Cloud Storage-Bucket, der vom Hostnamen verwendet wird.
Der Bucket, in dem Ihre Images gespeichert sind, hat den Namen BUCKET-NAME im Format:
artifacts.PROJECT-ID.appspot.com
für Images, die in eine Registry im Hostgcr.io
hochgeladen werden, oderSTORAGE-REGION.artifacts.PROJECT-ID.appspot.com
Wo
- PROJECT-ID ist Ihre Projekt-ID der Google Cloud Console.
- STORAGE-REGION ist der Speicherort des Storage-Buckets:
us
für Registries im Hostus.gcr.io
eu
für Registrys im Hosteu.gcr.io
asia
für Registrys im Hostasia.gcr.io
Sie können Berechtigungen für einen Bucket über die Google Cloud Console oder das
gsutil
-Befehlszeilentool erteilen.Console
- Rufen Sie die Cloud Storage-Seite in der Cloud Console auf.
Klicken Sie auf den Link
artifacts.PROJECT-ID.appspot.com
oderSTORAGE-REGION.artifacts.PROJECT-ID.appspot.com
für den Bucket.Hier ist PROJECT-ID die Google Cloud-Projekt-ID des Projekts, das Container Registry hostet, und STORAGE-REGION ist die Mehrfachregion (
asia
,eu
, oderus
) der Registry, die das Image hostet.Wählen Sie den Tab Berechtigungen.
Klicken Sie auf Mitglieder hinzufügen.
Geben Sie in dem angezeigten Menü im Feld Mitglieder die E-Mail-Adressen der Nutzer ein, die Berechtigungen benötigen. Trennen Sie die Adressen durch Kommas. Die E-Mail-Adresse kann mit Folgendem verknüpft sein:
- ein Google-Konto, z. B.
someone@example.com
- eine Google-Gruppe (z. B.
my-developer-team@googlegroups.com
) - ein IAM-Dienstkonto
- dem Compute Engine-Standarddienstkonto eines anderen Projekts. Dieses Konto wird von Google Kubernetes Engine verwendet, um standardmäßig Container-Image-Cluster abzurufen. Es hat das Format
PROJECT-NUMBER-compute@developer.gserviceaccount.com
, wobei PROJECT-NUMBER die Google Cloud-Projektnummer des Projekts ist, das den Google Kubernetes Engine-Cluster ausführt.
- ein Google-Konto, z. B.
Wählen Sie im Drop-down-Menü Rolle auswählen die Kategorie Storage und dann die entsprechende Berechtigung aus.
- Storage-Objekt-Betrachter, um nur Images herunterzuladen
- Storage-Administrator, um Images zu übertragen und abzurufen
Klicken Sie auf Add.
gsutil
Führen Sie den folgenden Befehl aus, um Buckets im Projekt aufzulisten:
gsutil ls
Die Antwort sieht in etwa so aus:
gs://[BUCKET_NAME1]/ gs://[BUCKET_NAME2]/ gs://[BUCKET_NAME3]/ ...
Führen Sie den folgenden Befehl in der Shell oder im Terminalfenster aus:
gsutil iam ch TYPE:EMAIL-ADDRESS:ROLE gs://BUCKET_NAME
Dabei gilt:
- TYPE kann eines der Folgenden sein:
serviceAccount
, wenn EMAIL-ADDRESS ein Dienstkonto angibt.user
, wenn die EMAIL-ADDRESS ein Google-Konto ist.group
, wenn EMAIL-ADDRESS eine Google-Gruppe ist.
- EMAIL-ADDRESS kann eines der Folgenden sein:
- ein Google-Konto, z. B.
someone@example.com
- eine Google-Gruppe (z. B.
my-developer-team@googlegroups.com
) - ein IAM-Dienstkonto
- das Compute Engine-Standarddienstkonto eines anderen Projekts. Dieses Konto wird von Google Kubernetes Engine verwendet, um standardmäßig Container-Image-Cluster abzurufen. Es hat das Format
PROJECT_NUMBER-compute@developer.gserviceaccount.com
, wobeiPROJECT_NUMBER
die Google Cloud-Projektnummer des Projekts ist, das den Google Kubernetes Engine-Cluster ausführt.
- ein Google-Konto, z. B.
- ROLE ist die Cloud Storage-Rolle, die Sie zuweisen möchten.
objectViewer
, um Images herunterzuladenobjectAdmin
, um Images hoch- und herunterzuladen
- BUCKET_NAME ist der Name des Cloud Storage-Buckets im Format
artifacts.PROJECT-ID.appspot.com
oderSTORAGE-REGION.artifacts.PROJECT-ID.appspot.com
- TYPE kann eines der Folgenden sein:
Mit dem Befehl
gsutil iam ch
ändern Sie die IAM-Berechtigungen des Storage-Buckets, in dem die Registry gehostet wird. Wenn Sie einem Konto die BerechtigungobjectViewer
gewähren, kann das Konto Images aus der Registry herunterladen.Weitere Informationen zum Befehl finden Sie in der Dokumentation zu
gsutil iam
.Compute Engine und Google Kubernetes Engine sind mit Berechtigungen zum Herunterladen von Images standardmäßig aus Container Registry im selben Projekt konfiguriert. Weitere Informationen zu diesen Integrationen finden Sie unter Integration mit Google Cloud-Diensten.
Öffentlichen Zugriff auf Images konfigurieren
Container Registry ist öffentlich zugänglich, wenn der dem Hoststandort zugrunde liegende Storage-Bucket öffentlich zugänglich ist. Innerhalb eines Projekts sind alle Images an jedem Hoststandort entweder öffentlich oder nicht. Innerhalb des Hosts eines Projekts ist es nicht möglich, nur bestimmte Images öffentlich bereitzustellen. Wenn Sie bestimmte Images öffentlich zugänglich machen möchten:
- legen Sie diese an einem eigenen Hoststandort ab, den Sie öffentlich freigeben, oder
- erstellen Sie ein neues Projekt, das die öffentlich zugänglichen Images enthält.
So machen Sie den zugrunde liegenden Storage-Bucket öffentlich zugänglich, um Container-Images öffentlich bereitzustellen:
Console
Prüfen Sie, ob ein Image per Push an Container Registry übertragen wurde und der zugrunde liegende Storage-Bucket vorhanden ist.
Öffnen Sie in der Cloud Console die Seite Container Registry.
Klicken Sie im linken Bereich auf Einstellungen.
Ändern Sie die Sichtbarkeit unter Öffentlicher Zugriff auf der Seite Einstellungen zu Öffentlich oder Privat. Diese Einstellung steuert den Zugriff auf den zugrunde liegenden Storage-Bucket.
Wenn der Host öffentlich sichtbar ist, sind alle Images in Ihrem Google Cloud-Projekt, die sich an diesem Hoststandort befinden, öffentlich zugänglich.
gsutil
Prüfen Sie, ob ein Image per Push an Container Registry übertragen wurde und der zugrunde liegende Storage-Bucket vorhanden ist.
Suchen Sie den Namen des Cloud Storage-Buckets für diese Registry. Listen Sie dazu die Buckets auf:
gsutil ls
Die URL des Container Registry-Buckets wird als
gs://artifacts.PROJECT-ID.appspot.com
odergs://STORAGE-REGION.artifacts.PROJECT-ID.appspot.com
aufgeführt. Dabei gilt:- PROJECT-ID ist Ihre Projekt-ID der Google Cloud Console. Auf eine Domain beschränkte Projekte enthalten den Domainnamen in der Projekt-ID.
- STORAGE-REGION ist der Speicherort des Storage-Buckets:
us
für Registries im Hostus.gcr.io
eu
für Registrys im Hosteu.gcr.io
asia
für Registrys im Hostasia.gcr.io
Machen Sie den Storage-Bucket von Container Registry mit dem folgenden Befehl öffentlich zugänglich. Dadurch werden alle Images in der Registry öffentlich zugänglich.
gsutil iam ch allUsers:objectViewer gs://BUCKET-NAME
Dabei gilt:
gs://BUCKET-NAME
ist die URL des Container Registry-Buckets.
Wenn Container Registry öffentlich zugänglich ist, kann jeder Images daraus herunterladen. Eine Anleitung finden Sie unter Images aus einer Registry herunterladen.
Berechtigungen aufheben
Führen Sie die folgenden Schritte aus, um IAM-Berechtigungen aufzuheben.
Console
- Rufen Sie die Cloud Storage-Seite in der Cloud Console auf.
Klicken Sie auf den Link
artifacts.PROJECT-ID.appspot.com
oderSTORAGE-REGION.artifacts.PROJECT-ID.appspot.com
für den Bucket. Hier ist PROJECT-ID die Google Cloud-Projekt-ID des Projekts, das Container Registry hostet, und STORAGE-REGION ist die Mehrfachregion (asia
,eu
, oderus
) der Registry, in der das Image gehostet wird.Wählen Sie den Tab Berechtigungen.
Klicken Sie auf das Papierkorbsymbol neben jedem Mitglied, das Sie entfernen möchten.
gsutil
Führen Sie den folgenden Befehl in der Shell oder im Terminalfenster aus:
gsutil iam ch -d MEMBER gs://BUCKET-NAME
Dabei gilt:
- MEMBER kann eines der Folgenden sein:
user:EMAIL-ADDRESS
für ein Google-KontoserviceAccount:EMAIL-ADDRESS
für ein IAM-Dienstkontogroup:EMAIL-ADDRESS
für eine Google-GruppeallUsers
für den Widerruf des öffentlichen Zugriffs
BUCKET-NAME
ist der Name des jeweiligen Buckets.
Einbindung in Google Cloud-Dienste
Standardmäßig sind Dienstkonten für einige gängige Integrationen für den Zugriff zum Herunterladen oder den Zugriff zum Hoch- und Herunterladen innerhalb desselben Projekts konfiguriert. Der Zugriff basiert auf IAM-Berechtigungen und Sie müssen nur dann Berechtigungen konfigurieren, wenn das Dienstkonto in einem anderen Projekt eine Verbindung zu Container Registry herstellt.
Für das Dienstkonto, das mit Compute Engine-VM-Instanzen verknüpft ist, einschließlich VMs in GKE-Clustern, gelten zusätzliche Anforderungen. Der VM-Zugriff auf den Speicher basiert auf den erteilten IAM-Berechtigungen und Speicherzugriffsbereichen.
- IAM-Berechtigungen bestimmen, wer auf eine Ressource zugreifen kann.
- Mit Zugriffsbereichen werden die standardmäßigen OAuth-Bereiche für Anfragen festgelegt, die auf der VM-Instanz über das
gcloud
-Tool und Clientbibliotheken erfolgen. Dies hat zur Folge, dass mit Zugriffsbereichen bei der Authentifizierung mit Standardanmeldedaten für Anwendungen der Zugriff auf API-Methoden weiter eingeschränkt werden kann.- Zum Herunterladen eines privaten Images muss das VM-Dienstkonto die Berechtigung
read
für den Storage-Bucket des Images haben. - Zum Hochladen privater Images muss das VM-Dienstkonto die Berechtigung
read-write
,cloud-platform
oderfull-control
für den Storage-Bucket des Images haben.
- Zum Herunterladen eines privaten Images muss das VM-Dienstkonto die Berechtigung
Standardmäßig verfügt das Compute Engine-Standarddienstkonto über die Berechtigung "Bearbeiter" für Ressourcen im selben Projekt und den Speicherzugriffsbereich read-only
. Der Bereich read-only
beschränkt eine VM auf das Herunterladen von Images.
Das Standarddienstkonto hat das Suffix @developer.gserviceaccount.com.
Bei den folgenden Konfigurationen müssen Sie die Standardkonfiguration für Berechtigungen oder Bereiche ändern.
- Images von einer VM oder einem Cluster herunterladen
- Wenn Sie Images per Push übertragen möchten, muss das Dienstkonto der VM-Instanz den Bereich
storage-rw
anstelle vonstorage-ro
haben. - Die VM und die Container Registry befinden sich in separaten Projekten
- Sie müssen dem Dienstkonto IAM Berechtigungen zum Zugriff auf den von Container Registry verwendeten Storage-Bucket erteilen.
gcloud
-Befehle auf VMs ausführen- Das Dienstkonto muss den Bereich
cloud-platform
haben. Dieser Bereich gewährt Berechtigungen zum Hoch- und Herunterladen von Images sowie zum Ausführen vongcloud
-Befehlen.
Die Schritte zum Konfigurieren von Berechtigungen und Bereichen finden Sie in den folgenden Abschnitten.
IAM-Berechtigungen für VMs konfigurieren
Standardmäßig können Compute Engine-VMs nur auf Speicher in demselben Projekt zugreifen. Wenn Ihre VM in einem anderen Projekt auf Container Registry zugreifen muss, müssen Sie dem VM-Dienstkonto Berechtigungen erteilen.
Rufen Sie im Projekt mit Ihrer VM-Instanz den Namen des Compute Engine-Standarddienstkontos oder des Dienstkontos ab, das Sie der VM-Instanz zugeordnet haben. Das Standarddienstkonto hat das Suffix @developer.gserviceaccount.com.
Gewähren Sie Berechtigungen im Projekt mit der Container Registry, damit das Dienstkonto auf die Container Registry zugreifen kann.
Bereiche für VMs konfigurieren
Verwenden Sie die Option --scopes, um beim Erstellen einer VM Zugriffsbereiche festzulegen.
gcloud compute instances create INSTANCE --scopes=SCOPE
Dabei gilt:
- INSTANCE ist der Name der VM-Instanz.
- SCOPE ist der Bereich, den Sie für das VM-Dienstkonto konfigurieren möchten:
- Images abrufen:
storage-ro
- Images per Pull und Push übertragen:
storage-rw
- Images hoch- und herunterladen und gcloud-Befehle ausführen:
cloud-platform
- Images abrufen:
So ändern Sie Bereiche für eine vorhandene VM-Instanz:
Legen Sie den Zugriffsbereich mit der Option --scopes fest.
Stoppen Sie die VM-Instanz. Siehe Instanz beenden.
Ändern Sie den Zugriffsbereich mit dem folgenden Befehl.
gcloud compute instances set-service-account INSTANCE --scopes=SCOPE
Dabei gilt:
- INSTANCE ist der Name der VM-Instanz.
- SCOPE ist der Bereich, den Sie für das VM-Dienstkonto konfigurieren möchten:
- Images abrufen:
storage-ro
- Images per Pull und Push übertragen:
storage-rw
- Images hoch- und herunterladen und gcloud-Befehle ausführen:
cloud-platform
- Images abrufen:
Starten Sie die VM-Instanz neu. Siehe Beendete Instanz starten.
Bereiche für Google Kubernetes Engine-Cluster konfigurieren
Standardmäßig werden neue GKE-Cluster mit Leseberechtigungen für Cloud Storage-Buckets erstellt.
Wenn Sie beim Erstellen eines Google Kubernetes Engine-Clusters den read-write
-Speicherbereich festlegen möchten, verwenden Sie die Option --scopes
.
Der folgende Befehl erstellt beispielsweise einen Cluster mit den Bereichen bigquery
, storage-rw
und compute-ro
:
gcloud container clusters create example-cluster \
--scopes=bigquery,storage-rw,compute-ro
Weitere Informationen zu Bereichen, die Sie beim Erstellen eines neuen Clusters festlegen können, finden Sie in der Dokumentation zum Befehl gcloud container clusters create.