Authentifizierung bei Artifact Registry für Docker konfigurieren

Auf dieser Seite wird beschrieben, wie Sie Docker für die Authentifizierung bei Artifact Registry konfigurieren Docker-Repositories

Sie müssen die Authentifizierung für Cloud Build oder Google Cloud nicht konfigurieren wie Google Kubernetes Engine und Cloud Run. Sie sollten jedoch Prüfen Sie, ob die erforderlichen Berechtigungen konfiguriert sind.

Hinweise

  1. Installieren Sie die Google Cloud CLI und initialisieren Sie sie mit folgendem Befehl:

    gcloud init
  2. (Optional) Konfigurieren Sie Standardeinstellungen für gcloud CLI-Befehle.
  3. Das zur Authentifizierung verwendete Konto muss folgende Voraussetzungen erfüllen: Berechtigungen für den Zugriff auf Artifact Registry. Wir empfehlen, ein Dienstkonto zu verwenden, als ein Nutzerkonto.
  4. Installieren Sie Docker, falls es noch nicht installiert ist. Docker ist in Cloud Shell enthalten.
  5. Docker benötigt für die Interaktion mit Registries Zugriff. Fügen Sie unter Linux oder Windows den Nutzer hinzu, mit dem Sie Docker-Befehle in der Docker-Sicherheitsgruppe ausführen. Dieser Schritt ist unter macOS nicht erforderlich, Docker Desktop wird auf einer virtuellen Maschine als Root-Nutzer ausgeführt.

    Linux

    Die Docker-Sicherheitsgruppe heißt docker. Führen Sie den folgenden Befehl aus, um Ihren Nutzernamen hinzuzufügen:

    sudo usermod -a -G docker ${USER}
    

    Windows

    Die Docker-Sicherheitsgruppe heißt docker-users. Führen Sie den folgenden Befehl aus, um einen Nutzer über die Administrator-Eingabeaufforderung hinzuzufügen:

    net localgroup docker-users DOMAIN\USERNAME /add
    

    Dabei gilt:

    • DOMAIN ist Ihre Windows-Domain.
    • USERNAME Ihr Nutzername ist.

    Melden Sie sich ab und wieder an, damit Änderungen an der Gruppenmitgliedschaft wirksam werden. Wenn Sie eine virtuelle Maschine verwenden, müssen Sie sie unter Umständen neu starten, damit die Mitgliedschaftsänderungen wirksam werden.

Authentifizierungsmethode auswählen

Die folgenden Authentifizierungsmethoden sind verfügbar:

gcloud CLI Credential Helper
Konfigurieren Sie Ihre Artifact Registry-Anmeldedaten für die Verwendung mit direkt in der gcloud CLI. Das ist die einfachste Authentifizierungsmethode, langsamer als der eigenständige Credential Helper.
Eigenständiger Docker Credential Helper
Diese Option dient hauptsächlich zum Konfigurieren Ihrer Anmeldedaten für die Verwendung mit Docker wenn die Google Cloud CLI nicht vorhanden ist. Er ist deutlich schneller als die gcloud CLI. Credential Helper und nutzt Standardanmeldedaten für Anwendungen (Application Default Credentials, ADC) Anmeldedaten in Ihrer Umgebung.
Zugriffstoken
Sie können ein kurzlebiges Zugriffstoken für ein Dienstkonto generieren und Verwenden Sie das Token zur Passwortauthentifizierung. Da das Token nur für 60 Tage gültig ist, ist er sicherer als ein Dienstkontoschlüssel.
Dienstkontoschlüssel
Ein nutzerverwaltetes Schlüsselpaar, das Sie als Anmeldedaten für ein Dienstkonto. Da die Anmeldedaten langlebig sind, ist es die unsicherste Option aller verfügbaren Authentifizierungsmethoden.

Verwenden Sie nach Möglichkeit ein Zugriffstoken. oder Credential Helper, um das Risiko nicht autorisierter Zugriffe Container-Images. Wenn Sie einen Dienstkontoschlüssel verwenden müssen, folgen Sie den Best Practices für die Verwaltung von Anmeldedaten.

Authentifizierungseinstellungen in der Docker-Konfigurationsdatei

Docker speichert die Authentifizierungseinstellungen in der Konfigurationsdatei config.json.

  • Linux: ~/.docker/config.json
  • Windows: %USERPROFILE%\.docker\config.json

Die Datei enthält separate Abschnitte für verschiedene Authentifizierungsmethoden:

credHelpers
Wenn Sie Docker Credential Helper für die Authentifizierung verwenden Artifact Registry speichert die Credential Helper-Einstellungen im credHelpers.
auths
Wenn Sie sich über Docker mit einem Token oder Dienstkontoschlüssel als Ihrem passwortgeschützt, speichert Docker eine base64-codierte Version Ihrer Anmeldedaten im auths.
credStore
Wenn Sie Anmeldedatenspeicher zum Verwalten Ihrer Anmeldedaten befinden sich die Einstellungen für den Anmeldedatenspeicher in im Abschnitt credStore der Datei.

Wenn Docker eine Verbindung zu einer Registry herstellt, wird zuerst nach einem Credential Helper gesucht, der dem Host zugeordnet ist. Wenn Ihre config.json also Folgendes enthält: Artifact Registry-Einstellungen in den Abschnitten credHelpers und auths Die Einstellungen im Bereich auths werden ignoriert.

Credential Helper für die gcloud CLI

Credential Helper für die gcloud CLI bietet sicheren, kurzlebigen Zugriff auf Ihr Projektressourcen. Es konfiguriert Docker für die Authentifizierung bei Artifact Registry wird in jeder Umgebung gehostet, in der die Google Cloud CLI installiert ist. Cloud Shell enthält die Google Cloud CLI und eine aktuelle Version von Docker.

Der gcloud CLI Credential Helper ist die einfachste Authentifizierungsmethode, die Sie einrichten können. Sie konfiguriert Docker mit den Anmeldedaten des aktiven Nutzers oder Dienstkontos in der gcloud CLI-Sitzung. Da für diesen Credential Helper gcloud CLI verwenden, kann sie erheblich langsamer sein als die Standalone Credential Helper Für automatisierte Builds mit Drittanbietertools oder Docker-Clients mit einer großen Anzahl konfigurierter Registrys verwenden Sie stattdessen den eigenständigen Credential Helper.

So authentifizieren Sie sich bei Artifact Registry:

  1. Melden Sie sich in der gcloud CLI als der Nutzer an, der Docker-Befehle ausführt.

    • Führen Sie den folgenden Befehl aus, um die Authentifizierung mit Nutzeranmeldedaten zu konfigurieren:

      gcloud auth login
      
    • Führen Sie den folgenden Befehl aus, um die Authentifizierung mit Dienstkonto-Anmeldedaten zu konfigurieren:

      gcloud auth activate-service-account ACCOUNT --key-file=KEY-FILE
      

      Dabei gilt:

      • ACCOUNT ist das Dienstkonto, mit dem Sie verwenden möchten. Artifact Registry im Format USERNAME@PROJECT-ID.iam.gserviceaccount.com. Wenn Sie ein vorhandenes Konto verwenden möchten, können Sie eine Liste der Dienste aufrufen, Konten auf der Dienstkonten Seite der Google Cloud Console oder mit dem Befehl gcloud iam service-accounts list
      • KEY-FILE ist die Dienstkonto-Schlüsseldatei. Informationen zum Erstellen eines Schlüssels finden Sie in der Dokumentation zur Identitäts- und Zugriffsverwaltung (Identity and Access Management, IAM).
  2. Führen Sie dazu diesen Befehl aus:

    gcloud auth configure-docker HOSTNAME-LIST
    

    Dabei ist HOSTNAME-LIST eine durch Kommas getrennte Liste von Repositorys Hostnamen, die der Credential Helper-Konfiguration hinzugefügt werden sollen.

    Führen Sie beispielsweise den folgenden Befehl aus, um die Regionen us-west1 und asia-northeast1 hinzuzufügen:

    gcloud auth configure-docker us-west1-docker.pkg.dev,asia-northeast1-docker.pkg.dev
    

    Die angegebenen Hostnamen werden der Credential Helper-Konfiguration hinzugefügt. Sie können der Konfiguration später weitere Hostnamen hinzufügen, indem Sie den Befehl erneut.

    Führen Sie den folgenden Befehl aus, um eine Liste der unterstützten Repository-Speicherorte anzuzeigen:

    gcloud artifacts locations list
    
  3. Mit dem Befehl wird der Abschnitt credHelpers des aktuellen Docker-Befehls angezeigt. Konfiguration und die aktualisierte Konfiguration nach dem Hinzufügen der angegebenen Hostnamen.

    Geben Sie y ein, um die Konfigurationsänderungen zu akzeptieren.

    Ihre Anmeldedaten werden im Basisverzeichnis des Nutzers gespeichert.

    • Linux: $HOME/.docker/config.json
    • Windows: %USERPROFILE%/.docker/config.json
  4. Für Docker müssen sich Credential Helper im System-PATH befinden. Prüfen Sie, ob der Befehl gcloud im System PATH ist.

Eigenständiger Credential Helper

Der eigenständige Docker Credential Helper konfiguriert Docker für die Authentifizierung. in Artifact Registry auf einem System übertragen werden, auf dem die gcloud CLI nicht verfügbar ist. Sie ist deutlich schneller als gcloud CLI Credential Helper und nutzt Standardanmeldedaten für Anwendungen (Application Default Credentials, ADC) in Ihrer Umgebung. Für andere Vorgänge als Push- und Images abrufen, z. B. das Taggen oder Auflisten von Bildern. Wir empfehlen dies Authentifizierungsmethode für automatisierte Builds mit Drittanbietertools oder Docker Clients mit einer großen Anzahl konfigurierter Registry-Hosts.

Mit dem eigenständigen Docker Credential Helper werden Ihre Artifact Registry-Anmeldedaten abgerufen und in die Docker-Konfigurationsdatei geschrieben. Auf diese Weise können Sie das Docker-Befehlszeilentool docker verwenden, um direkt mit Artifact Registry zu interagieren.

So verwenden Sie Docker Credential Helper:

  1. Melden Sie sich auf dem Computer als der Nutzer an, der Docker-Befehle ausführt.

  2. Laden Sie den eigenständigen Docker Credential Helper von GitHub herunter.

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

    VERSION=2.1.22
    OS=linux  # or "darwin" for OSX, "windows" for Windows.
    ARCH=amd64  # or "386" for 32-bit OSs
    
    curl -fsSL "https://github.com/GoogleCloudPlatform/docker-credential-gcr/releases/download/v${VERSION}/docker-credential-gcr_${OS}_${ARCH}-${VERSION}.tar.gz" \
    | tar xz docker-credential-gcr \
    && chmod +x docker-credential-gcr && sudo mv docker-credential-gcr /usr/bin/
    
  3. Konfigurieren Sie Docker so, dass die Anmeldedaten von Artifact Registry für die Interaktion mit Artifact Registry verwendet werden. Sie müssen dies nur einmal tun:

    docker-credential-gcr configure-docker --registries=HOSTNAME-LIST
    

    Dabei ist HOSTNAME-LIST eine durch Kommas getrennte Liste von Repositorys Hostnamen, die der Credential Helper-Konfiguration hinzugefügt werden sollen.

    Führen Sie beispielsweise den folgenden Befehl aus, um die Regionen us-west1 und asia-northeast1 hinzuzufügen:

    docker-credential-gcr configure-docker --registries=us-west1-docker.pkg.dev,asia-northeast1-docker.pkg.dev
    

    Die angegebenen Hostnamen werden der Credential Helper-Konfiguration hinzugefügt. Sie können der Konfiguration später weitere Hostnamen hinzufügen, indem Sie den Befehl erneut.

    Führen Sie den folgenden Befehl aus, um eine Liste der unterstützten Repository-Speicherorte anzuzeigen:

    gcloud artifacts locations list
    

    Weitere Informationen finden Sie in der eigenständige Docker Credential Helper-Dokumentation auf GitHub.

    Ihre Anmeldedaten werden im Basisverzeichnis des Nutzers gespeichert.

    • Linux: $HOME/.docker/config.json
    • Windows: %USERPROFILE%/.docker/config.json
  4. Für Docker müssen sich Credential Helper im System-PATH befinden. Prüfen Sie, ob der Befehl docker-credential-gcr im System PATH ist.

  5. So überprüfen Sie, ob Credential Helper Ihre Anmeldedaten verwenden, führen Sie den folgenden Befehl aus:

    echo "https://HOSTNAME" | docker-credential-gcr get
    

    Ersetzen Sie HOSTNAME durch einen Hostnamen, den Sie dem Konfiguration. Beispiel:

    echo "https://us-west1-docker.pkg.dev" | docker-credential-gcr get
    

    Wenn der Befehl erfolgreich ausgeführt wurde, enthält die zurückgegebene JSON-Ausgabe ein Token in Das Feld Secret. Beispiel:

    {"ServerURL":"https://us-west1-docker.pkg.dev","Username":"_dcgcr_2_0_0_token","Secret":"ya29..."}
    

Docker ist jetzt für die Authentifizierung bei Artifact Registry konfiguriert. Um und Images abrufen können, müssen die Berechtigungen richtig konfiguriert sind.

Zugriffstoken

Sie können ein kurzlebiges OAuth-Zugriffstoken für die Authentifizierung generieren. Artifact Registry. Da das Token 60 Minuten lang gültig ist, sollten Sie sie weniger als eine Stunde vor der Herstellung einer Verbindung Artifact Registry.

So verwenden Sie ein Zugriffstoken mit Dienstkonto-Anmeldedaten:

  1. Erstellen Sie ein Dienstkonto, das im Namen Ihrer Anwendung agiert. oder wählen Sie ein vorhandenes Dienstkonto für die Automatisierung aus.

  2. Die spezifische Artifact Registry-Rolle erteilen an das Dienstkonto, um Zugriff auf das Repository zu gewähren.

  3. Generieren Sie ein Zugriffstoken für das Dienstkonto und authentifizieren Sie sich:

    • Sie benötigen die Berechtigungen in der Rolle „Ersteller von Dienstkonto-Tokens“ (roles/iam.serviceAccountTokenCreator) bis sich als Dienstkonto zugeben, , um ein Token dafür abzurufen, und authentifizieren sich dann als Dienstkonto.

      Führen Sie den folgenden Befehl aus und ersetzen Sie dabei ACCOUNT durch Ihren E-Mail-Adresse des Dienstkontos und LOCATION regional oder multiregional Standort von des Repositorys.

      Linux

      gcloud auth print-access-token \
          --impersonate-service-account ACCOUNT | docker login \
          -u oauth2accesstoken \
          --password-stdin https://LOCATION-docker.pkg.dev
      

      Windows

      gcloud auth print-access-token --impersonate-service-account ACCOUNT |
          docker login -u oauth2accesstoken --password-stdin https://LOCATION-docker.pkg.dev
      

Docker ist jetzt bei Artifact Registry authentifiziert.

Dienstkontoschlüssel

Jeder, der Zugriff auf einen gültigen privaten Schlüssel für ein Dienstkonto hat, kann über das Dienstkonto auf Ressourcen zugreifen. Beachten Sie, 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.

Verwenden Sie die folgenden Richtlinien, um den Zugriff auf Ihre Repositories einzuschränken:

  • Erstellen Sie dedizierte Dienstkonten, die nur für die Interaktion mit Repositories verwendet werden.
  • Die spezifische URL erteilen Artifact Registry-Rolle für den Zugriff, der für das Dienstkonto erforderlich ist. Beispielsweise benötigt ein Dienstkonto, das nur Artefakte herunterlädt, nur die Rolle Artifact Registry-Leser.
  • Konfigurieren Sie die Berechtigungen für Ihre dedizierten Dienstkonten für jedes Repository und nicht auf Projektebene. Anschließend können Sie den Zugriff basierend auf dem Repository-Kontext festlegen. Beispielsweise kann ein Dienstkonto für Entwicklungs-Builds die Rolle Artifact Registry-Leser für ein Produktions-Repository und die Artifact Registry-Autor-Rolle für ein Staging-Repository haben.
  • Folgen Sie den Best Practices für die Verwaltung von Anmeldedaten.

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

  1. Erstellen Sie ein Dienstkonto, das im Namen Ihrer Anwendung agieren soll, oder wählen Sie ein vorhandenes Dienstkonto für die Automatisierung aus.

    Sie benötigen den Speicherort der Dienstkonto-Schlüsseldatei, um damit die Authentifizierung bei Artifact Registry einzurichten. Auf der Seite „Dienstkonten“ können Sie die Schlüssel vorhandener Konten aufrufen und neue Schlüssel erstellen.

    Zur Seite „Dienstkonten“

  2. Sie können den gesamten Inhalt der Schlüsseldatei optional base64-codieren.

    Linux

    base64 FILE-NAME > NEW-FILE-NAME
    

    macOS

    base64 -i FILE-NAME -o NEW-FILE-NAME
    

    Windows

    Base64.exe -e FILE-NAME > NEW-FILE-NAME
    

    Dabei ist FILE-NAME der ursprüngliche Schlüsseldateiname und NEW-FILE-NAME ist Ihre base64-codierte Schlüsseldatei.

  3. Prüfen Sie, ob die Berechtigungen für das Dienstkonto ordnungsgemäß konfiguriert sind. Wenn Sie das Compute Engine-Dienstkonto verwenden, müssen Sie sowohl Berechtigungen als auch Zugriffsbereiche richtig konfigurieren.

  4. Verwenden Sie den Dienstkontoschlüssel, um die Integration in Docker zu konfigurieren:

    Führen Sie dazu diesen Befehl aus:

    Linux/macOS

    cat KEY-FILE | docker login -u KEY-TYPE --password-stdin \
    https://LOCATION-docker.pkg.dev
    

    Windows

    Get-Content KEY-FILE |
    docker login -u KEY-TYPE --password-stdin https://LOCATION-docker.pkg.dev
    

    Ersetzen Sie Folgendes:

    • KEY-TYPE ist einer der folgenden Werte:
      • _json_key, wenn Sie den Dienstkontoschlüssel im JSON-Format verwenden, wie er beim Erstellen der Datei angegeben wurde.
      • _json_key_base64, wenn Sie den gesamten Inhalt der Datei base64-codiert haben.
    • KEY-FILE ist der Name der Dienstkonto-Schlüsseldatei im JSON-Format.
    • LOCATION ist der/die/das regional oder multiregional Speicherort des Repositorys, in dem das Image gespeichert wird.

Docker ist jetzt bei Artifact Registry authentifiziert.