Authentifizierungsmethoden

Auf dieser Seite wird beschrieben, wie Sie die Authentifizierung für Container Registry konfigurieren.

Hinweise

Folgende Voraussetzungen müssen erfüllt sein:

  1. Sie haben die neueste Version des Cloud SDK installiert, das das gcloud-Befehlszeilentool enthält.

  2. Sie haben Docker installiert.

Authentifizierungsmethode auswählen

Die folgenden Authentifizierungsmethoden sind verfügbar:

gcloud als Credential Helper (empfohlen)
Konfigurieren Sie Ihre Container Registry-Anmeldedaten für die Verwendung mit Docker direkt in gcloud. Verwenden Sie diese Methode nach Möglichkeit, um einen sicheren, kurzzeitigen Zugriff auf Ihre Projektressourcen zu gewähren. Diese Option unterstützt nur Docker-Versionen ab 18.03.
Eigenständiger Docker Credential Helper
Diese Option dient hauptsächlich zur Konfiguration Ihrer Anmeldedaten zur Verwendung mit Docker, wenn kein Cloud SDK vorhanden ist. Diese Option unterstützt nur Docker-Versionen ab 18.03.
Zugriffstoken
Die Standardanmeldedaten für Anwendungen stellen kurzlebige Zugriffstokens bereit, die ein Dienstkonto für den Zugriff auf Ihre Google Cloud-Ressourcen verwendet. Es ist die sicherste Alternative zur Verwendung von gcloud als Credential Helper.
JSON-Schlüsseldatei

Ein vom Nutzer verwaltetes Schlüsselpaar, das Sie als Anmeldedaten für ein Dienstkonto verwenden können. Da die Anmeldedaten langlebig sind, ist dies die am wenigsten sichere Option aller verfügbaren Authentifizierungsmethoden.

Verwenden Sie nach Möglichkeit Standardanmeldedaten für Anwendungen oder eine andere verfügbare Authentifizierungsmethode, um das Risiko eines nicht autorisierten Zugriffs auf Ihre Artefakte zu reduzieren. Wenn Sie einen Dienstkontoschlüssel verwenden müssen, folgen Sie den Best Practices für die Verwaltung von Anmeldedaten.

Einige Tools oder Workflows bieten keinen guten Support für die Verwendung von gcloud als Credential Helper. Wenn Sie eine der alternativen Optionen verwenden, müssen Sie die Auswirkungen auf die Sicherheit verstehen.

gcloud als Docker Credential Helper

Wir empfehlen dringend, diese Methode nach Möglichkeit zu verwenden. Sie gewährleistet sicheren Zugriff auf Ihre Projektressourcen für beschränkte Zeit.

Zur Authentifizierung bei Container Registry verwenden Sie gcloud als Docker Credential Helper. Dazu führen Sie den folgenden Befehl aus:

gcloud auth configure-docker
    

Sie müssen diesen Befehl nur einmal ausführen, um sich bei Container Registry zu authentifizieren.

Eigenständiger Docker Credential Helper

Docker muss zum Hoch- und Herunterladen von Images Zugriff auf Container Registry haben. Dazu können Sie Ihre Container Registry-Anmeldedaten mit dem Docker Credential Helper docker-credential-gcr, der ohne gcloud auskommt, für die Verwendung mit Docker konfigurieren.

Credential Helper ruft Ihre Container Registry-Anmeldedaten ab – entweder automatisch oder von einem mit dem Flag --token-source angegebenen Speicherort – und schreibt sie in die Konfigurationsdatei von Docker. Auf diese Weise können Sie das docker-Befehlszeilentool von Docker verwenden, um direkt mit Container Registry zu interagieren.

So verwenden Sie Docker Credential Helper:

  1. Laden Sie docker-credential-gcr aus GitHub unter "Releases" herunter:

    Sie können optional das curl-Befehlszeilentool verwenden. Beispiel:

    VERSION=2.0.0
        OS=linux  # or "darwin" for OSX, "windows" for Windows.
        ARCH=amd64  # or "386" for 32-bit OSs, "arm64" for ARM 64.
    
        curl -fsSL "https://github.com/GoogleCloudPlatform/docker-credential-gcr/releases/download/v${VERSION}/docker-credential-gcr_${OS}_${ARCH}-${VERSION}.tar.gz" \
          | tar xz --to-stdout ./docker-credential-gcr \
          > /usr/bin/docker-credential-gcr && chmod +x /usr/bin/docker-credential-gcr
          ```
        
  2. Konfigurieren Sie Docker so, dass für die Interaktion mit Container Registry Ihre Container Registry-Anmeldedaten verwendet werden (nur einmal erforderlich):

    docker-credential-gcr configure-docker
        

    Weitere Informationen finden Sie in der Hauptdokumentation von docker-credential-gcr auf GitHub.

  3. Wenn das Dienstkonto zum Hoch- oder Herunterladen von Images von einer Compute Engine-VM-Instanz dient, konfigurieren Sie die Zugriffsbereiche für die erforderliche Zugriffsebene.

Zugriffstoken

Zugriffstokens sind kurzlebige Anmeldedaten, mit denen Sie auf Ihre Google Cloud-Ressourcen zugreifen können. Sie können ein Zugriffstoken als Passwort für die Verbindung mit Container Registry verwenden.

Informationen zur Verwendung eines Zugriffstokens finden Sie in der Dokumentation zu den Standardanmeldedaten für Anwendungen. Verwenden Sie anschließend diese Anmeldedaten:

  1. Rufen Sie den Schlüssel für das Dienstkonto ab, das mit Container Registry interagiert.

    Console

    1. Öffnen Sie in der Google Cloud Console die Seite Dienstkontoschlüssel erstellen.

      Zur Seite Dienstkontoschlüssel erstellen

    2. Wählen Sie aus der Liste "Dienstkonto" das Dienstkonto aus, das Sie verwenden möchten.

      Wählen Sie zum Erstellen eines neuen Dienstkontos Neues Dienstkonto aus und geben Sie den Dienstkontonamen, die ID und die entsprechende Container Registry-Rolle entsprechend den Berechtigungen an, die Sie für das Dienstkonto gewähren möchten.

    3. Wählen Sie JSON als Schlüsseltyp aus.

    4. Klicken Sie auf Erstellen. Es wird dann eine JSON-Datei mit Ihrem Schlüssel auf Ihren Computer heruntergeladen.

      In der Anleitung auf dieser Seite wird der Dateiname keyfile.json für diese Schlüsseldatei verwendet.

    gcloud

    Sie können die folgenden Befehle mit dem Cloud SDK auf Ihrem lokalen Rechner oder in Cloud Shell ausführen.

    1. Erstellen Sie das Dienstkonto. Ersetzen Sie dabei NAME durch einen Namen für das Dienstkonto.

          gcloud iam service-accounts create NAME
          
    2. Gewähren Sie dem Dienstkonto Berechtigungen. Ersetzen Sie PROJECT_ID durch Ihre Projekt-ID und ROLE durch die entsprechende Container Registry-Rolle für das Dienstkonto. Diese Rolle gilt für alle Repositories im Projekt. Sie können die Rolle später ändern und verschiedene Berechtigungen für das Dienstkonto für bestimmte Repositories festlegen.

          gcloud projects add-iam-policy-binding PROJECT_ID --member "serviceAccount:NAME@PROJECT_ID.iam.gserviceaccount.com" --role "roles/ROLE"
          
    3. Erstellen Sie die Schlüsseldatei. In der Anleitung auf dieser Seite wird der Dateiname keyfile.json für die Schlüsseldatei verwendet.

          gcloud iam service-accounts keys create keyfile.json --iam-account [NAME]@[PROJECT_ID].iam.gserviceaccount.com
          
  2. Wenn das Dienstkonto zum Hoch- oder Herunterladen von Images von einer Compute Engine-VM-Instanz dient, konfigurieren Sie die Zugriffsbereiche für die erforderliche Zugriffsebene.

  3. Führen Sie den folgenden Befehl aus, um sich als Dienstkonto bei Cloud SDK anzumelden. In diesem Befehl ist keyfile.json die Schlüsseldatei, die Sie für das Dienstkonto erstellt haben.

    gcloud auth activate-service-account [NAME]@[PROJECT_ID].iam.gserviceaccount.com --key-file=keyfile.json
        
  4. Rufen Sie ein Zugriffstoken für das Dienstkonto ab. Da das Token nur für eine begrenzte Zeit gültig ist, fordern Sie es weniger als eine Stunde an, bevor Sie es zur Verbindung mit Container Registry verwenden möchten.

    Linux/macOS

    • Nutzername ist oauth2accesstoken.
    • Passwort ist Ihr Zugriffstoken. Beispiel: gcloud auth print-access-token

    Beispiel:

    gcloud auth print-access-token | docker login -u oauth2accesstoken --password-stdin https://[HOSTNAME]
        

    Dabei ist [HOSTNAME] entweder gcr.io, us.gcr.io, eu.gcr.io oder asia.gcr.io.

    Alternative für ältere Docker-Clients, die --password-stdin nicht unterstützen:

    docker login -u oauth2accesstoken -p "$(gcloud auth print-access-token)" https://[HOSTNAME]
        

    Windows

    • Nutzername ist oauth2accesstoken.
    • Passwort ist die Ausgabe von gcloud auth print-access-token.
    1. Rufen Sie das Zugriffstoken ab.
    gcloud auth print-access-token
        

    Der zurückgegebene String ist das Zugriffstoken, das Sie als Passwort verwenden. In diesem Beispiel stellt ya29.8QEQIfY_... das zurückgegebene Zugriffstoken dar.

    ya29.8QEQIfY_...
        
    1. Melden Sie sich mit dem Zugriffstoken an.
    docker login -u oauth2accesstoken -p "ya29.8QEQIfY_..." https://[HOSTNAME]
        

    Dabei ist [HOSTNAME] entweder gcr.io, us.gcr.io, eu.gcr.io oder asia.gcr.io.

JSON-Schlüsseldatei

Ein Dienstkontoschlüssel ist ein langlebiges Schlüsselpaar, das Sie als Anmeldedaten für ein Dienstkonto verwenden können. Die Verantwortung für die Sicherheit des privaten Schlüssels und andere Verwaltungsvorgänge wie die Schlüsselrotation liegt bei Ihnen.

Jeder, der Zugriff auf einen gültigen privaten Schlüssel für ein Dienstkonto hat, kann über das Dienstkonto auf Ressourcen zugreifen. Beispielsweise erhalten einige von Google Cloud automatisch erstellten Dienstkonten wie das Container Registry-Dienstkonto die Rolle Editor mit Lese- und Schreibberechtigungen für das übergeordnete Projekt. Das Compute Engine-Standarddienstkonto ist mit schreibgeschütztem Zugriff auf den Speicher innerhalb desselben Projekts konfiguriert.

Beachten Sie darüber hinaus, dass der Lebenszyklus des Schlüsselzugriffs auf das Dienstkonto (und damit die Daten, auf die das Dienstkonto Zugriff hat) vom Lebenszyklus des Nutzers unabhängig ist, der den Schlüssel heruntergeladen hat.

Richten Sie sich nach den folgenden Richtlinien, um den Zugriff auf Ihre Container-Images zu beschränken:

So erstellen Sie ein neues Dienstkonto und einen Dienstkontoschlüssel für die Verwendung mit Container Registry-Repositories:

  1. Erstellen Sie das Dienstkonto für die Interaktion mit Repositories:

    Console

    1. Öffnen Sie in der Google Cloud Console die Seite Dienstkontoschlüssel erstellen.

      Zur Seite Dienstkontoschlüssel erstellen

    2. Wählen Sie aus der Liste "Dienstkonto" die Option Neues Dienstkonto aus.

    3. Geben Sie im Feld Name des Dienstkontos einen Namen ein.

    4. Wählen Sie aus der Liste Rolle die entsprechende Container Registry-Rolle für das Dienstkonto aus.

    5. Klicken Sie auf Erstellen. Es wird dann eine JSON-Datei mit Ihrem Schlüssel auf Ihren Computer heruntergeladen.

      In der Anleitung auf dieser Seite wird der Dateiname keyfile.json für diese Schlüsseldatei verwendet.

    gcloud

    Sie können die folgenden Befehle mit dem Cloud SDK auf Ihrem lokalen Rechner oder in Cloud Shell ausführen.

    1. Erstellen Sie das Dienstkonto. Ersetzen Sie dabei NAME durch einen Namen für das Dienstkonto.

          gcloud iam service-accounts create NAME
          
    2. Gewähren Sie dem Dienstkonto Berechtigungen. Ersetzen Sie PROJECT_ID durch Ihre Projekt-ID und ROLE durch die entsprechende Rolle für das Dienstkonto.

          gcloud projects add-iam-policy-binding PROJECT_ID --member "serviceAccount:NAME@PROJECT_ID.iam.gserviceaccount.com" --role "roles/ROLE"
          
    3. Erstellen Sie die Schlüsseldatei. In diesem Beispiel lautet der Name der Ausgabeschlüsseldatei keyfile.json.

          gcloud iam service-accounts keys create keyfile.json --iam-account [NAME]@[PROJECT_ID].iam.gserviceaccount.com
          
  2. Verwenden Sie den Dienstkontoschlüssel als Passwort für die Authentifizierung bei Docker.

    Linux/macOS

    • Nutzername ist _json_key (NICHT der Name Ihres Dienstkontos).
    • keyfile.json ist der Dienstkontoschlüssel, den Sie erstellt haben

    Beispiel:

    cat keyfile.json | docker login -u _json_key --password-stdin https://[HOSTNAME]
        

    Dabei ist [HOSTNAME] entweder gcr.io, us.gcr.io, eu.gcr.io oder asia.gcr.io.

    Alternative für ältere Docker-Clients, die --password-stdin nicht unterstützen:

    docker login -u _json_key -p "$(cat keyfile.json)" https://[HOSTNAME]
        

    Dabei ist [HOSTNAME] entweder gcr.io, us.gcr.io, eu.gcr.io oder asia.gcr.io.

    Windows

    • Nutzername ist _json_key (NICHT der Name Ihres Dienstkontos).
    • keyfile.json enthält den JSON-Schlüssel des Dienstkontos.

    Beispiel:

    docker login -u _json_key --password-stdin https://[HOSTNAME] < keyfile.json
        

    Dabei ist [HOSTNAME] entweder gcr.io, us.gcr.io, eu.gcr.io oder asia.gcr.io.

    Alternative für ältere Docker-Clients, die --password-stdin nicht unterstützen:

    set /p PASS=<keyfile.json
        docker login -u _json_key -p "%PASS%" https://[HOSTNAME]
        

    Dabei ist [HOSTNAME] entweder gcr.io, us.gcr.io, eu.gcr.io oder asia.gcr.io.

  3. Wenn das Dienstkonto zum Hoch- oder Herunterladen von Images von einer Compute Engine-VM-Instanz dient, konfigurieren Sie die Zugriffsbereiche für die erforderliche Zugriffsebene.

Container Registry mit Google Cloud verwenden

Compute Engine-Instanzen und Google Kubernetes Engine-Cluster können Container Registry-Images basierend auf Cloud Storage-Bereichen auf den Instanzen übertragen und abrufen. Weitere Informationen finden Sie unter Container Registry mit Google Cloud verwenden.

In der Container Registry gespeicherte Images können über die flexible App Engine-Umgebung bereitgestellt werden.