Authentifizierung für Python-Paket-Repositories in Artifact Registry konfigurieren

Auf dieser Seite wird beschrieben, wie Sie die Authentifizierung mit einem Python-Paket-Repository in Artifact Registry konfigurieren.

Sie müssen sich bei Artifact Registry authentifizieren, wenn Sie eine Drittanbieteranwendung für die Verbindung mit einem Repository verwenden.

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

Hinweis

  1. Wenn das Ziel-Repository nicht vorhanden ist, erstellen Sie ein neues Python-Paket-Repository.
  2. Prüfen Sie, ob Python 3 installiert ist. Eine Installationsanleitung finden Sie imGoogle Cloud Leitfaden zum Einrichten von Python.
  3. Prüfen Sie, ob das verwendete Nutzer- oder Dienstkonto die erforderlichen Berechtigungen für den Zugriff auf das Repository hat.
  4. Install the Google Cloud CLI, then initialize it by running the following command:

    gcloud init
  5. Optional: Konfigurieren Sie die Standardeinstellungen für gcloud-Befehle.

Übersicht

Artifact Registry unterstützt die folgenden Authentifizierungsmethoden.

Python-Schlüsselbundbibliothek (empfohlen)
Artifact Registry bietet ein Schlüsselbund-Backend zum Speichern der Anmeldedaten für die Verbindung zu Artifact Registry-Repositories.
Passwortauthentifizierung
Verwenden Sie diese Option, wenn Sie den Schlüsselbund nicht verwenden können und eine Option benötigen, die die einfache Passwortauthentifizierung unterstützt.

In dieser Dokumentation wird beschrieben, wie Sie pip als einzigen Paketindex konfigurieren, in dem pip nach Paketen sucht. Wir empfehlen die Verwendung von virtuellen Repositories, um Pakete in Ihren privaten Paketen in der Artifact Registry und öffentlichen Paketen von PyPI zu suchen, anstatt mehrere Paketindizes in der Pip-Konfigurationsdatei zu konfigurieren. Das Pip-Tool durchsucht Paketindizes nicht in einer bestimmten Reihenfolge. Daher können Ihre Nutzer versehentlich ein öffentliches Paket mit demselben Namen wie eines Ihrer privaten Pakete herunterladen oder installieren. Mit virtuellen Repositories können Sie Prioritäten für Upstream-Quellen konfigurieren, um dieses Risiko zu minimieren.

Mit Schlüsselbund authentifizieren

Die Python-Bibliothek keyring bietet Anwendungen die Möglichkeit, auf keyring-Back-Ends zuzugreifen, also auf Anmeldedatenspeicher des Betriebssystems und von Drittanbietern.

Artifact Registry bietet das Schlüsselbund-Backend keyrings.google-artifactregistry-auth für die Authentifizierung mit Artifact Registry-Repositories.

Reihenfolge der Suche nach Anmeldedaten

Wenn Sie das Schlüsselbund-Backend der Artifact Registry verwenden, werden Ihre Anmeldedaten nicht in Ihrem Python-Projekt gespeichert. Stattdessen sucht Artifact Registry in der folgenden Reihenfolge nach Anmeldedaten:

  1. Standardanmeldedaten für Anwendungen (ADC), eine Strategie, die in der folgenden Reihenfolge nach Anmeldedaten sucht:

    1. In der Umgebungsvariable GOOGLE_APPLICATION_CREDENTIALS definierte Anmeldedaten.

    2. Anmeldedaten, die das Standarddienstkonto für Compute Engine, Google Kubernetes Engine, Cloud Run, App Engine oder Cloud Run-Funktionen bietet.

  2. Von der Google Cloud CLI bereitgestellte Anmeldedaten, einschließlich Nutzeranmeldedaten aus dem Befehl gcloud auth application-default login.

Mit der Variablen GOOGLE_APPLICATION_CREDENTIALS wird das Konto für die Authentifizierung explizit angegeben, was die Fehlerbehebung erleichtert. Wenn Sie die Variable nicht verwenden, prüfen Sie, ob alle Konten, die ADC möglicherweise verwendet, die erforderlichen Berechtigungen haben. Das Standarddienstkonto für Compute Engine-VMs, Google Kubernetes Engine-Knoten und Cloud Run-Versionen hat beispielsweise Lesezugriff auf Repositories. Wenn Sie aus diesen Umgebungen mit dem Standarddienstkonto hochladen möchten, müssen Sie die Berechtigungen ändern.

Schlüsselbund einrichten

So richten Sie die Authentifizierung mit dem Artifact Registry-Schlüsselbund-Back-End ein:

  1. Installieren Sie die Schlüsselbundbibliothek.

    pip install keyring
    
  2. Installieren Sie das Artifact Registry-Backend.

    pip install keyrings.google-artifactregistry-auth
    
  3. Listen Sie die Backends auf, um die Installation zu bestätigen.

    keyring --list-backends
    

    Die Liste sollte Folgendes enthalten:

    • ChainerBackend(priority:10)
    • GooglePythonAuth(priority: 9)
  4. Führen Sie den folgenden Befehl aus, um die Repository-Konfiguration zu drucken und sie dem Python-Projekt hinzuzufügen.

    gcloud artifacts print-settings python --project=PROJECT \
        --repository=REPOSITORY \
        --location=LOCATION
    

    Ersetzen Sie die folgenden Werte:

  5. Fügen Sie der Datei .pypirc die folgenden Einstellungen hinzu. Der Standardspeicherort ist:

    • Linux und macOS: $HOME/.pypirc
    • Windows: %USERPROFILE%\.pypirc
    [distutils]
    index-servers =
        PYTHON-REPO-ID
    
    [PYTHON-REPO-ID]
    repository = https://LOCATION-python.pkg.dev/PROJECT/REPOSITORY/
    

    Ersetzen Sie die folgenden Werte:

    • PYTHON-REPO-ID ist eine ID für das Repository, auf die Sie mit Tools wie Twine verweisen können.
    • PROJECT ist die Projekt-ID. Wenn dieses Flag nicht angegeben ist, wird das aktuelle Projekt oder das Standardprojekt verwendet.
    • REPOSITORY ist die ID des Repositorys. Wenn Sie ein Standard-Artifact Registry-Repository konfiguriert haben, wird es verwendet, wenn dieses Flag im Befehl ausgelassen wird.
    • LOCATION ist der regionale oder multiregionale Standort für das Repository.
  6. Fügen Sie der Pip-Konfigurationsdatei Ihr Repository hinzu. Der Dateispeicherort hängt davon ab, ob Sie die pro Nutzer gültige Datei oder die Datei aktualisieren möchten, die für eine von Ihnen verwendete virtuelle Umgebung spezifisch ist.

    Für die Datei, die mit Ihrem Betriebssystemnutzer verknüpft ist:

    • Unix: $HOME/.config/pip/pip.conf oder $HOME/.pip/pip.conf
    • macOS: /Library/Application Support/pip/pip.conf oder $HOME/.config/pip/pip.conf
    • Windows: %APPDATA%\pip\pip.ini oder %USERPROFILE%\pip\pip.ini

    Für virtuelle Umgebungen:

    • Unix und macOS: $VIRTUAL_ENV/pip.conf
    • Windows: %VIRTUAL_ENV%\pip.ini

    Wenn Sie Pip so konfigurieren möchten, dass nur Ihr Repository durchsucht wird, verwenden Sie die Einstellung index-url und achten Sie darauf, dass keine anderen Paketindizes mit der Einstellung extra-index-url konfiguriert sind.

    [global]
    index-url = https://LOCATION-python.pkg.dev/PROJECT/REPOSITORY/simple/
    

    Der String /simple/ am Ende des Repository-Pfads gibt an, dass das Repository die Python Simple Repository API implementiert.

Ihre Python-Umgebung ist jetzt für die Authentifizierung bei Artifact Registry konfiguriert.

Schlüsselanhängerauthentifizierung mit Nutzeranmeldedaten

Nachdem Sie den Schlüsselbund eingerichtet haben, können Sie ihn mit Ihren Nutzeranmeldedaten in der gcloud CLI verwenden. Melden Sie sich in der Google Cloud CLI an, bevor Sie eine Verbindung zu einem Python-Paket-Repository herstellen.

Führen Sie dazu diesen Befehl aus:

gcloud auth login

Schlüsselbundauthentifizierung mit Anmeldedaten für Dienstkonten

Nachdem Sie den Schlüsselbund eingerichtet haben, können Sie ein Dienstkonto für die Authentifizierung einrichten.

  1. Erstellen Sie ein Dienstkonto oder wählen Sie ein vorhandenes Dienstkonto für die Automatisierung aus.
  2. Weisen Sie dem Dienstkonto die Rolle Artifact Registry zu, um den Zugriff auf das Repository zu ermöglichen.
  3. Verwenden Sie eine der folgenden Optionen, um sich mit Ihrem Dienstkonto zu authentifizieren:

    • Standardanmeldedaten für Anwendungen (empfohlen)

      Weisen Sie der Variablen GOOGLE_APPLICATION_CREDENTIALS den Speicherort des Dienstkontoschlüssels zu, damit die Artifact Registry-Credential Helper Ihren Schlüssel beim Herstellen einer Verbindung zu Repositories abrufen können.

      export GOOGLE_APPLICATION_CREDENTIALS=KEY-FILE
      
    • Anmeldedaten für die gcloud-Befehlszeile

      Melden Sie sich als Dienstkonto an, bevor Sie eine Verbindung zu einem Repository herstellen. Vermeiden Sie diese Option, wenn Sie eine Verbindung zu Repositories von Compute Engine-VMs herstellen, da Artifact Registry die Anmeldedaten des VM-Dienstkontos vor den Anmeldedaten in der gcloud-Befehlszeile findet.

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

    Ersetzen Sie KEY-FILE durch den Pfad zur Schlüsseldatei des Dienstkontos.

Mit einem Dienstkontoschlüssel authentifizieren

Verwenden Sie diesen Ansatz, wenn eine Authentifizierung mit einem Nutzernamen und Passwort erforderlich ist.

Dienstkontoschlüssel sind langlebige Anmeldedaten. Verwenden Sie die folgenden Richtlinien, um den Zugriff auf Ihre Repositories einzuschränken:

  • Verwenden Sie ein dediziertes Dienstkonto für die Interaktion mit Repositories.
  • Erteilen Sie die vom Dienstkonto erforderliche Artifact Registry-Mindestrolle. Weisen Sie z. B. Artifact Registry-Reader einem Dienstkonto zu, das nur Artefakte herunterlädt.
  • Wenn Gruppen in Ihrer Organisation verschiedene Zugriffsebenen für bestimmte Repositories benötigen, erteilen Sie den Zugriff auf Repository-Ebene und nicht auf Projektebene.
  • Folgen Sie den Best Practices für die Verwaltung von Anmeldedaten.

So konfigurieren Sie die Authentifizierung:

  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. Weisen Sie dem Dienstkonto die entsprechende Artifact Registry-Rolle zu, um den Zugriff auf das Repository zu ermöglichen.

  3. Führen Sie den folgenden Befehl aus, um die Repository-Konfiguration zu drucken und sie dem Python-Projekt hinzuzufügen.

    gcloud artifacts print-settings python --project=PROJECT \
        --repository=REPOSITORY \
        --location=LOCATION \
        --json-key=KEY-FILE
    

    Ersetzen Sie die folgenden Werte:

  4. Fügen Sie der Datei .pypirc die folgenden Einstellungen hinzu. Der Standardspeicherort für die nutzerspezifische Pip-Konfigurationsdatei lautet:

    • Linux und macOS: $HOME/.pypirc
    • Windows: %USERPROFILE%\.pypirc
    [distutils]
    index-servers =
        PYTHON-REPO-ID
    
    [PYTHON-REPO-ID]
    repository = https://LOCATION-python.pkg.dev/PROJECT/REPOSITORY/
    username: _json_key_base64
    password: KEY
    

    Ersetzen Sie die folgenden Werte:

    • PYTHON-REPO-ID ist eine ID für das Repository, auf die Sie mit Tools wie Twine verweisen können.
    • PROJECT ist die Projekt-ID. Wenn dieses Flag nicht angegeben ist, wird das aktuelle Projekt oder das Standardprojekt verwendet.
    • REPOSITORY ist die ID des Repositorys. Wenn Sie ein Standard-Artifact Registry-Repository konfiguriert haben, wird es verwendet, wenn dieses Flag im Befehl ausgelassen wird.
    • LOCATION ist der regionale oder multiregionale Standort für das Repository.
    • KEY ist der base64-codierte Schlüssel in Ihrer Dienstkonto-Schlüsseldatei.
  5. Fügen Sie der Pip-Konfigurationsdatei Ihr Repository hinzu. Der Speicherort der Pip-Konfigurationsdatei hängt davon ab, ob Sie die pro Nutzer gültige Datei oder die Datei aktualisieren möchten, die für eine von Ihnen verwendete virtuelle Umgebung spezifisch ist.

    Für die Datei, die mit Ihrem Betriebssystemnutzer verknüpft ist:

    • Unix: $HOME/.config/pip/pip.conf oder $HOME/.pip/pip.conf
    • macOS: /Library/Application Support/pip/pip.conf oder $HOME/.config/pip/pip.conf
    • Windows: %APPDATA%\pip\pip.ini oder %USERPROFILE%\pip\pip.ini

    Für virtuelle Umgebungen:

    • Unix und macOS: $VIRTUAL_ENV/pip.conf
    • Windows: %VIRTUAL_ENV%\pip.ini

    Fügen Sie der Pip-Konfigurationsdatei die folgende Zeile hinzu:

    [global]
    index-url = https://_json_key_base64:KEY@LOCATION-python.pkg.dev/PROJECT/REPOSITORY/simple/
    
    • KEY den privaten Schlüssel in Ihrer Dienstkonto-Schlüsseldatei.
    • Der String /simple/ am Ende des Repository-Pfads gibt an, dass das Repository die Python Simple Repository API implementiert.

Nächste Schritte