Configurer l'authentification auprès des dépôts de packages Python

Cette page explique comment configurer l'authentification avec un dépôt de packages Python Artifact Registry.

Vous devez vous authentifier auprès d'Artifact Registry lorsque vous utilisez une application tierce pour vous connecter à un dépôt.

Vous n'avez pas besoin de configurer l'authentification pour les environnements d'exécution Cloud Build ou Google Cloud tels que Google Kubernetes Engine et Cloud Run, mais vous devez vérifier que les autorisations requises sont configurées. (Installation de Python groupée).

Avant de commencer

  1. Si le dépôt cible n'existe pas, créez un dépôt de packages Python.
  2. Vérifiez que Python 3 est installé. Pour obtenir des instructions d'installation, consultez le tutoriel de configuration de Python Google Cloud.
  3. Vérifiez que le compte utilisateur ou le compte de service que vous utilisez dispose des autorisations requises pour accéder au dépôt.
  4. Installez et initialisez le SDK Cloud.
  5. (Facultatif) Configurez des valeurs par défaut pour les commandes gcloud.

Présentation

Artifact Registry est compatible avec les méthodes d'authentification suivantes.

Bibliothèque de trousseaux Python (recommandé)
Artifact Registry fournit un backend de trousseau de clés pour stocker les identifiants de connexion aux dépôts Artifact Registry.
Authentification par mot de passe
Optez pour cette option lorsque vous ne pouvez pas utiliser le trousseau et que vous avez besoin d'une option compatible avec l'authentification de base par mot de passe.

S'authentifier avec un trousseau

La bibliothèque de clés Python permet aux applications d'accéder aux backends de trousseau, c'est-à-dire aux systèmes d'exploitation et aux identifiants tiers.

Artifact Registry fournit le backend de clés keyrings.google-artifactregistry-auth pour gérer l'authentification avec les dépôts Artifact Registry.

Ordre de recherche des identifiants

Lorsque vous utilisez le backend de trousseaux Artifact Registry, vos identifiants ne sont pas stockés dans votre projet Python. Au lieu de cela, Artifact Registry recherche les identifiants dans l'ordre suivant:

  1. Identifiants par défaut de l'application (ADC), stratégie qui recherche les identifiants dans l'ordre suivant :

    1. Identifiants définis dans la variable d'environnement GOOGLE_APPLICATION_CREDENTIALS.

    2. Identifiants fournis par le compte de service par défaut pour Compute Engine, Google Kubernetes Engine, Cloud Run, App Engine ou Cloud Functions.

  2. Identifiants fournis par le SDK Cloud, y compris les identifiants utilisateur de la commande gcloud auth application-default login.

La variable GOOGLE_APPLICATION_CREDENTIALS rend le compte explicite pour l'authentification, ce qui facilite le dépannage. Si vous n'utilisez pas la variable, vérifiez que tous les comptes susceptibles d'être utilisés par l'ADC disposent des autorisations requises. Par exemple, le compte de service par défaut des VM Compute Engine, des nœuds Google Kubernetes Engine et des révisions Cloud Run dispose d'un accès en lecture seule aux dépôts. Si vous avez l'intention d'effectuer une importation depuis ces environnements à l'aide du compte de service par défaut, vous devez modifier les autorisations.

Configurer le trousseau

Pour configurer l'authentification avec le backend de trousseau de clés Artifact Registry:

  1. Installez la bibliothèque de trousseaux.

    pip install keyring
    
  2. Installez le backend Artifact Registry.

    pip install keyrings.google-artifactregistry-auth
    
  3. Répertoriez les backends pour confirmer l'installation.

    keyring --list-backends
    

    La liste doit inclure

    • ChainerBackend(priority:10)
    • GooglePythonAuth(priority: 9)
  4. Exécutez la commande suivante pour imprimer la configuration du dépôt à ajouter à votre projet Python.

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

    Remplacez les valeurs suivantes :

    • PROJECT est l'ID de projet. Si cette option est ignorée, le projet en cours ou par défaut est utilisé.
    • REPOSITORY est l'ID du dépôt. Si vous avez configuré un dépôt Artifact Registry par défaut, il est utilisé lorsque cette option est omise dans la commande.
    • LOCATION est l'emplacement régional ou multirégional du dépôt.
  5. Ajoutez les paramètres suivants au fichier .pypirc. L'emplacement par défaut est:

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

    Remplacez les valeurs suivantes :

    • PYTHON-REPO-ID est un ID de dépôt que vous pouvez référencer avec des outils tels que Twine.
    • PROJECT est l'ID de projet. Si cette option est ignorée, le projet en cours ou par défaut est utilisé.
    • REPOSITORY est l'ID du dépôt. Si vous avez configuré un dépôt Artifact Registry par défaut, il est utilisé lorsque cette option est omise dans la commande.
    • LOCATION est l'emplacement régional ou multirégional du dépôt.
  6. Ajoutez votre dépôt dans le fichier de configuration pip. L'emplacement du fichier dépend du format de mise à jour du fichier par utilisateur ou du fichier spécifique à un environnement virtuel que vous utilisez.

    Pour le fichier associé à votre utilisateur de système d'exploitation:

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

    Pour les environnements virtuels:

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

    Il n'existe pas d'ordre de recherche particulier. Par conséquent, les outils tels que pip et Twine peuvent commencer par rechercher pypi.org. Nous vous recommandons d'utiliser des noms uniques pour les packages privés que vous stockez dans votre dépôt Artifact Registry.

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

    La chaîne /simple/ à la fin du chemin d'accès au dépôt indique que le dépôt implémente l'API Python Simple Repository.

Votre environnement Python est maintenant configuré pour s'authentifier auprès d'Artifact Registry.

Authentification par trousseau avec des identifiants utilisateur

Une fois que vous avez configuré le trousseau, vous pouvez l'utiliser avec vos identifiants utilisateur dans gcloud. Connectez-vous au SDK Cloud avant de vous connecter à un dépôt de packages Python.

Exécutez la commande suivante :

gcloud auth login

Authentifier les clés avec les identifiants du compte de service

Une fois que vous avez configuré le trousseau, vous pouvez configurer un compte de service pour l'authentification.

  1. Créez un compte de service ou choisissez un compte de service existant que vous utilisez pour l'automatisation.
  2. Accordez le rôle approprié d'Artifact Registry au compte de service afin de fournir l'accès au dépôt.
  3. Utilisez l'une des options suivantes pour vous authentifier avec votre compte de service:

    • Identifiants par défaut de l'application (recommandé)

      Attribuez l'emplacement du fichier de clé du compte de service à la variable GOOGLE_APPLICATION_CREDENTIALS afin que l'assistant d'identification Artifact Registry puisse obtenir votre clé lors de la connexion aux dépôts.

      export GOOGLE_APPLICATION_CREDENTIALS=KEY-FILE
      
    • gcloud credentials (Identifiants gcloud)

      Avant de vous connecter à un dépôt, connectez-vous en tant que compte de service. Évitez cette option si vous vous connectez à des dépôts à partir de VM Compute Engine, car Artifact Registry trouve les identifiants du compte de service de VM avant les identifiants dans gcloud.

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

    Remplacez KEY-FILE par le chemin d'accès au fichier de clé du compte de service.

S'authentifier à l'aide d'une clé de compte de service

Utilisez cette approche lorsque vous exigez l'authentification avec un nom d'utilisateur et un mot de passe.

Les clés de compte de service sont des identifiants de longue durée. Suivez les instructions ci-dessous pour limiter l'accès à vos dépôts :

  • Envisagez d'utiliser un compte de service dédié pour interagir avec les dépôts.
  • Attribuez le rôle Artifact Registry minimal requis par le compte de service. Par exemple, attribuez le lecteur Artifact Registry à un compte de service qui télécharge les artefacts uniquement.
  • Si les groupes de votre organisation nécessitent différents niveaux d'accès à des dépôts spécifiques, accordez l'accès au niveau du dépôt plutôt qu'au niveau du projet.
  • Suivez les bonnes pratiques de gestion des identifiants.

Pour configurer l'authentification :

  1. Créez un compte de service pour agir au nom de votre application ou sélectionnez un compte de service existant que vous utilisez pour l'automatisation.

    Vous aurez besoin de l'emplacement du fichier de clé de compte de service pour configurer l'authentification avec Artifact Registry. Pour les comptes existants, vous pouvez afficher les clés et en créer sur la page "Comptes de service".

    Accéder à la page "Comptes de service"

  2. Accordez le rôle approprié d'Artifact Registry au compte de service afin de fournir l'accès au dépôt.

  3. Exécutez la commande suivante pour imprimer la configuration du dépôt à ajouter à votre projet Python.

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

    Remplacez les valeurs suivantes :

    • PROJECT est l'ID de projet. Si cette option est ignorée, le projet en cours ou par défaut est utilisé.
    • REPOSITORY est l'ID du dépôt. Si vous avez configuré un dépôt Artifact Registry par défaut, il est utilisé lorsque cette option est omise dans la commande.
    • LOCATION est l'emplacement régional ou multirégional du dépôt.
    • KEY-FILE est le chemin d'accès au fichier de clé JSON du compte de service.
  4. Ajoutez les paramètres suivants au fichier .pypirc. L'emplacement par défaut est pour le fichier de configuration pip par utilisateur:

    • Linux et 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
    

    Remplacez les valeurs suivantes :

    • PYTHON-REPO-ID est un ID de dépôt que vous pouvez référencer avec des outils tels que Twine.
    • PROJECT est l'ID de projet. Si cette option est ignorée, le projet en cours ou par défaut est utilisé.
    • REPOSITORY est l'ID du dépôt. Si vous avez configuré un dépôt Artifact Registry par défaut, il est utilisé lorsque cette option est omise dans la commande.
    • LOCATION est l'emplacement régional ou multirégional du dépôt.
    • KEY est la clé encodée en base64 dans le fichier de clé de votre compte de service.
  5. Ajoutez votre dépôt dans le fichier de configuration pip. L'emplacement du fichier dépend du format de mise à jour du fichier par utilisateur ou du fichier spécifique à un environnement virtuel que vous utilisez.

    Pour le fichier associé à votre utilisateur de système d'exploitation:

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

    Pour les environnements virtuels:

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

    Il n'existe pas d'ordre de recherche particulier. Par conséquent, les outils tels que pip et Twine peuvent commencer par rechercher pypi.org. Nous vous recommandons d'utiliser des noms uniques pour les packages privés que vous stockez dans votre dépôt Artifact Registry.

    [global]
    extra-index-url = https://_json_key_base64:KEY@LOCATION-python.pkg.dev/PROJECT/REPOSITORY/simple/
    
    • KEY la clé privée dans le fichier de clé de votre compte de service.
    • La chaîne /simple/ à la fin du chemin d'accès au dépôt indique que le dépôt implémente l'API Python Simple Repository.

Étape suivante