Authentifizierung für Python-Paket-Repositories einrichten

Auf dieser Seite wird beschrieben, wie Sie die Authentifizierung mit einem Artifact Registry-Python-Paket-Repository 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, sollten aber 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 in der Google Cloud-Anleitung zum Einrichten von Python.
  3. Prüfen Sie, ob das verwendete Nutzerkonto oder Dienstkonto die erforderlichen Berechtigungen für den Zugriff auf das Repository hat.
  4. Installieren Sie die Google Cloud CLI und initialisieren Sie sie mit folgendem Befehl:

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

Überblick

Artifact Registry unterstützt die folgenden Authentifizierungsmethoden.

Python-Schlüsselbundbibliothek (empfohlen)
Artifact Registry bietet ein Schlüsselbund-Back-End, um die Anmeldedaten für die Verbindung mit Artifact Registry-Repositories zu speichern.
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 Anleitung wird beschrieben, wie pip als Paketpaket konfiguriert wird, der nach Paketen sucht. Wir empfehlen die Verwendung virtueller Repositories, um Pakete in Ihren privaten Paketen in Artifact Registry und öffentlichen Paketen aus PyPI zu suchen, anstatt mehrere Paketindexe in der pip-Konfigurationsdatei zu konfigurieren. Das pip-Tool durchsucht keine Paketindexe in einer bestimmten Reihenfolge. Ihre Nutzer können daher ein öffentliches Paket mit dem gleichen Namen wie eines Ihrer privaten Pakete herunterladen oder installieren. Mit virtuellen Repositories können Sie Prioritäten für vorgelagerte Quellen konfigurieren, um dieses Abhängigkeitsrisiko zu minimieren.

Mit Schlüsselbund authentifizieren

Die Keyring-Bibliothek von Python bietet Anwendungen die Möglichkeit, auf Keyring-Back-Ends zuzugreifen, also auf Speicher für Betriebssysteme und Anmeldedaten von Drittanbietern.

Artifact Registry bietet das Schlüsselbund-Back-End keyrings.google-Artifactregistry-auth für die Authentifizierung mit Artifact Registry-Repositories.

Reihenfolge der Anmeldedatensuche

Wenn Sie das Artifact Registry-Schlüsselbund-Back-End 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 Functions bietet.

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

Die Variable GOOGLE_APPLICATION_CREDENTIALS macht das Konto für die Authentifizierung explizit, wodurch die Fehlerbehebung einfacher wird. Wenn Sie die Variable nicht verwenden, prüfen Sie, ob alle Konten, die ADC verwenden könnten, die erforderlichen Berechtigungen haben. Das Standarddienstkonto für Compute Engine-VMs, Google Kubernetes Engine-Knoten und Cloud Run-Überarbeitungen hat beispielsweise Lesezugriff auf Repositories. Wenn Sie einen Upload aus diesen Umgebungen mit dem Standarddienstkonto vornehmen 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. Schlüsselbundbibliothek installieren

    pip install keyring
    
  2. Installieren Sie das Artifact Registry-Back-End.

    pip install keyrings.google-artifactregistry-auth
    
  3. Back-Ends zur Bestätigung der Installation auflisten.

    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 auszugeben, die Ihrem Python-Projekt hinzugefügt werden soll.

    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 das 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 Ihr Repository zur pip-Konfigurationsdatei hinzu. Der Dateispeicherort hängt davon ab, ob Sie die Datei pro Nutzer oder die Datei für eine von Ihnen verwendete virtuelle Umgebung aktualisieren möchten.

    Für die mit dem Betriebssystem des Nutzers verknüpfte Datei:

    • 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 in Ihrem Repository gesucht wird, verwenden Sie die Einstellung index-url. Achten Sie darauf, dass keine anderen Paketindexe 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.

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

Schlüsselbundauthentifizierung mit Nutzeranmeldedaten

Nachdem Sie Schlüsselbund eingerichtet haben, können Sie Schlüsselbund mit Ihren Nutzeranmeldedaten in gcloud 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 Dienstkonto-Anmeldedaten

Nachdem Sie 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 aus, das Sie für die Automatisierung verwenden.
  2. Weisen Sie dem Dienstkontodie entsprechende Artifact Registry-Rolle zu, um Repository-Zugriff bereitzustellen.
  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
      
    • gcloud-Anmeldedaten

      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 gcloud 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 Nutzername 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 Dienstkontodie entsprechende Artifact Registry-Rolle zu, um Repository-Zugriff bereitzustellen.

  3. Führen Sie den folgenden Befehl aus, um die Repository-Konfiguration auszugeben, die Ihrem Python-Projekt hinzugefügt werden soll.

    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 pip-Konfigurationsdatei pro Nutzer 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/
    username: _json_key_base64
    password: KEY
    

    Ersetzen Sie die folgenden Werte:

    • PYTHON-REPO-ID ist eine ID für das Repository, auf das 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 Ihr Repository zur pip-Konfigurationsdatei hinzu. Der Speicherort der pip-Konfigurationsdatei hängt davon ab, ob Sie die Datei pro Nutzer oder die Datei für eine von Ihnen verwendete virtuelle Umgebung aktualisieren möchten.

    Für die mit dem Betriebssystem des Nutzers verknüpfte Datei:

    • 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 ist der private 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