IAM-Rollen von Container Registry Artifact Registry zuordnen

Container Registry und Artifact Registry verwenden unterschiedliche Identity and Access Management-Rollen, um den Zugriff auf Container-Images zu steuern, die in der Registry gespeichert sind.

Zur Unterstützung bei der Umstellung von Container Registry auf Artifact Registry können Sie einen Google Cloud CLI-Befehl ausführen, der:

  • Identifiziert Zulassungsrichtlinien für einen Cloud Storage-Bucket, in dem Images für Container Registry gespeichert werden.
  • Gibt eine Richtlinie mit ähnlichen Artifact Registry-Rollen zurück, sodass Sie Ihren vorhandenen Container Registry-Nutzern Zugriff auf Artifact Registry-Repositories gewähren können.

Der Befehl verwendet IAM Policy Analyzer, um IAM-Zulassungsrichtlinien zu analysieren.

Hinweise

  1. Cloud Asset API aktivieren.

    Aktivieren Sie die API

    Sie müssen die API in dem Projekt oder der Organisation aktivieren, in der Sie vorhandene Zulassungsrichtlinien analysieren möchten.

  2. Installieren und initialisieren Sie die gcloud CLI. Eine vorhandene Installation kann mit dem folgenden Befehl auf die neueste Version aktualisiert werden:

    gcloud components update
    

Erforderliche Rollen

Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen für das Projekt, den Ordner oder die Organisation zu gewähren, deren Berechtigungen Sie analysieren möchten, um die Berechtigungen zu erhalten, die Sie zum Analysieren von Zulassungsrichtlinien und zum Gewähren von Zugriff auf Artifact Registry-Repositories benötigen:

Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff verwalten.

Diese vordefinierten Rollen enthalten die Berechtigungen, die zum Analysieren von Zulassungsrichtlinien und zum Gewähren des Zugriffs auf Artifact Registry-Repositories erforderlich sind. Erweitern Sie den Abschnitt Erforderliche Berechtigungen, um die erforderlichen Berechtigungen anzuzeigen:

Erforderliche Berechtigungen

Die folgenden Berechtigungen sind erforderlich, um Zulassungsrichtlinien zu analysieren und Zugriff auf Artifact Registry-Repositories zu gewähren:

  • cloudasset.assets.analyzeIamPolicy
  • cloudasset.assets.searchAllResources
  • cloudasset.assets.searchAllIamPolicies
  • So analysieren Sie Richtlinien mit benutzerdefinierten IAM-Rollen: iam.roles.get
  • So verwenden Sie die Google Cloud CLI zum Analysieren von Richtlinien: serviceusage.services.use
  • So gewähren Sie Rollen für ein Artifact Registry-Repository: artifactregistry.repositories.setIamPolicy

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

Mapping-Tool verwenden

Das Zuordnungstool prüft, ob Richtlinien für einen angegebenen Container Registry-Hostnamen wie gcr.io zulässig sind.

Das Tool sucht nach Berechtigungssätzen in vordefinierten Cloud Storage-Rollen und weist sie Artifact Registry-Rollen zu. Einen Vergleich der Cloud Storage-Berechtigungen und Artifact Registry-Rollen finden Sie unter Rollenzuordnungen.

So verwenden Sie das Tool für die Rollenzuordnung:

  1. Führen Sie das Zuordnungstool aus:

    gcloud beta artifacts docker upgrade print-iam-policy HOSTNAME \
        --project=PROJECT_ID > POLICY_FILENAME
    

    Ersetzen Sie die folgenden Werte:

    • HOSTNAME ist der Container Registry-Hostname, den das Tool analysieren soll:

      • gcr.io
      • asia.gcr.io
      • eu.gcr.io
      • us.gcr.io
    • PROJECT_ID ist die ID des Google Cloud-Projekts mit dem Registry-Host, den Sie analysieren.

    • POLICY_FILE ist der Dateiname für die Richtlinie im YAML-Format, den das Tool zurückgibt.

    Mit dem folgenden Beispielbefehl wird der Storage-Bucket für gcr.io im Projekt my-project im Hinblick auf Zulassungsrichtlinien analysiert, die direkt auf den Bucket angewendet oder von der ID der übergeordneten Organisation 101231231231 und ihren untergeordneten Elementen übernommen werden.

    gcloud beta artifacts docker upgrade print-iam-policy gcr.io \
        --project=my-project > gcr-io-policy.yaml
    

    Der Befehl gibt eine Richtliniendatei im YAML-Format mit Artifact Registry-Rollenbindungen basierend auf vorhandenen Zulassungsrichtlinien für den Storage-Bucket zurück. Wenn sich das übergeordnete Projekt für den Storage-Bucket in einer Organisation befindet, enthält die Richtliniendatei Hauptkonten, denen Zugriff auf Ordner- oder Organisationsebene gewährt wurde.

    Das folgende Beispiel enthält Artifact Registry-Rollenbindungen für:

    • Dienst-Agents für Cloud Build, Compute Engine und Container Registry. Dienst-Agents sind von Google verwaltete Dienstkonten, die im Namen von Google Cloud-Diensten handeln.
    • Nutzerkonto user@example.com
    • Das vom Nutzer verwaltete Dienstkonto deploy@my-project.iam.gserviceaccount.com.
    bindings:
    - members:
      - service-3213213213213@gcp-sa-cloudbuild.iam.gserviceaccount.com
      - user:user@example.com
      role: roles/artifactregistry.repoAdmin
    - members:
      - serviceAccount:deploy@my-project.iam.gserviceaccount.com
      - serviceAccount:service-1231231231231@@compute-system.iam.gserviceaccount.com
      - serviceAccount:service-1231231231231@containerregistry.iam.gserviceaccount.com
      role: roles/artifactregistry.reader
    
  2. Entfernen Sie die Zeile für den Container Registry-Dienst-Agent aus der Richtliniendatei, da dieses Dienstkonto keinen Zugriff auf Ihre Artifact Registry-Repositories benötigt. Das Suffix der E-Mail-Adresse des Dienst-Agents lautet containerregistry.iam.gserviceaccount.com.

    In der Beispielrichtlinie aus dem vorherigen Schritt lautet die Zeile mit dem Container Registry-Dienst-Agent:

    - serviceAccount:service-1231231231231@containerregistry.iam.gserviceaccount.com
    
  3. Prüfen Sie die anderen Rollenbindungen, um zu bestätigen, dass sie geeignet sind.

    Artifact Registry bietet zusätzliche vordefinierte Rollen, die Sie für einige Hauptkonten in Betracht ziehen sollten. Mit dem Repository-Administrator von Artifact Registry beim Erstellen bei Push können Hauptkonten beispielsweise gcr.io-Repositories in Artifact Registry erstellen, aber keine anderen Artifact Registry-Repositories erstellen.

  4. Fügen Sie Rollenbindungen für alle Hauptkonten hinzu, die in der Richtliniendatei fehlen.

    Die folgenden Hauptkonten fehlen möglicherweise in der zurückgegebenen Richtliniendatei:

    • Hauptkonten mit benutzerdefinierten Rollen, die nicht die Berechtigungen haben, die das Tool zum Zuordnen von Rollen verwendet hat.
    • Hauptkonten, denen Zugriff auf einen übergeordneten Ordner oder eine übergeordnete Organisation gewährt wurde, wenn Sie keine Berechtigungen zum Ansehen eines übergeordneten Ordners oder einer übergeordneten Organisation haben.
  5. Wenden Sie die Richtlinienbindungen auf Ihre Artifact Registry-Repositories an.

    gcloud artifacts repositories set-iam-policy REPOSITORY FILENAME \
        --project=PROJECT_ID \
        --location=LOCATION
    

    Ersetzen Sie die folgenden Werte:

    • REPOSITORY ist der Name des Repositorys.
    • POLICY_FILENAME ist der Name der Richtliniendatei, die Sie auf das Repository anwenden.
    • PROJECT_ID ist die Projekt-ID.
    • LOCATION ist der regionale oder multiregionale Speicherort für das Repository.

    Im folgenden Beispiel für das Projekt my-project wird die Richtlinie in der Datei gcr-io-policy.yaml auf das Repository mit dem Namen gcr.io am multiregionalen Standort us angewendet:

    gcloud artifacts repositories set-iam-policy gcr.io gcr-io-policy.yaml \
        --project=my-project \
        --location=us
    

    Wenn Sie Rollenbindungen auf eine übergeordnete Ressource anwenden möchten, bearbeiten Sie die vorhandene Projekt-, Ordner- oder Organisationsrichtlinie mit den hinzuzufügenden Bindungen.

Rollenzuordnungen

Die folgende Tabelle zeigt, welche vordefinierten Artifact Registry-Rollen vorhandenen Container Registry-Nutzern je nach ihren Cloud Storage-Berechtigungen gewährt werden sollten.

Erforderliche Berechtigungen in der Rolle Artifact Registry-Rolle
storage.objects.get
storage.objects.list
Artifact Registry-Leser
storage.buckets.get
storage.objects.get
storage.objects.list
storage.objects.create
Artifact Registry-Autor
storage.buckets.get
storage.objects.get
storage.objects.list
storage.objects.create
storage.objects.delete
Artifact Registry-Repository-Administrator
storage.buckets.get
storage.objects.get
storage.objects.list
storage.objects.create
storage.buckets.create
Artifact Registry-Administrator