Configurer l'authentification auprès d'Artifact Registry pour npm

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 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.

Avant de commencer

  1. Installez Google Cloud CLI, puis initialisez-la en exécutant la commande suivante :

    gcloud init
  2. (Facultatif) Configurez les valeurs par défaut pour les commandes de gcloud CLI.
  3. Si vous vous connectez à des dépôts à partir de Windows, installez PowerShell.
  4. Créez un compte de service pour agir au nom de votre application.
  5. Si vous débutez avec npm, lisez la présentation pour en savoir plus sur les packages concernés et le fichier de configuration pour vos paramètres d'authentification.

Présentation

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

Utiliser un assistant d'identification
Cette option offre la plus grande flexibilité. Lorsque vous incluez l'assistant dans votre configuration npm, Artifact Registry recherche les identifiants de compte de service dans l'environnement.
Spécifier une clé de compte de service en tant qu'identifiant
Utilisez cette option lorsqu'une application n'est pas compatible avec les identifiants par défaut de l'application, mais accepte l'authentification avec un nom d'utilisateur et un mot de passe.

S'authentifier à l'aide d'un assistant d'identification

google-artifactregistry-auth est une bibliothèque cliente qui obtient les identifiants des dépôts Artifact Registry.

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 la Google Cloud CLI, y compris les identifiants utilisateur de la commande gcloud auth application-default login

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

Pour créer un compte de service et définir la variable d'environnement GOOGLE_APPLICATION_CREDENTIALS, procédez comme suit:

  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 CI/CD.

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

  3. 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
    

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

Pour configurer l'authentification :

  1. Exécutez la commande suivante pour afficher la configuration du dépôt:

    gcloud artifacts print-settings npm [--project=PROJECT] \
        [--repository=REPOSITORY] \
        [--location=LOCATION] \
        --scope=@SCOPE-NAME \
    

    • 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.
    • SCOPE-NAME est le nom du champ d'application npm à associer au dépôt.

      L'utilisation des champs d'application vous permet de toujours publier et d'installer des packages à partir du bon dépôt.

      Les packages sans champ d'application sont associés à votre registre npm par défaut, généralement le registre public npm. Si vous ne spécifiez pas de champ d'application, la configuration renvoyée définit votre dépôt Artifact Registry comme registre par défaut. Cela peut entraîner des problèmes si vos projets Node.js doivent installer des packages à partir du registre npm public et de votre dépôt Artifact Registry.

  2. Ajoutez les paramètres de configuration renvoyés au fichier de configuration .npmrc dans vos projets Node.js. Ce fichier se trouve généralement dans le même répertoire que package.json.

    Veillez à inclure ces paramètres dans les projets Node.js pour les packages que vous publiez, ainsi que dans les projets qui installeront des dépendances à partir de votre dépôt npm.

  3. Si vous avez d'autres dépôts Node.js auxquels vous connecter, répétez les étapes précédentes pour obtenir les paramètres et les ajouter aux fichiers .npmrc appropriés.

  4. Lorsque vous êtes prêt à connecter un dépôt, procurez-vous un jeton d'accès pour l'authentification.

Chaque dépôt de packages Node.js Artifact Registry est associé à un point de terminaison de registre https://LOCATION-npm.pkg.dev/PROJECT/REPOSITORY

Si vous n'avez pas spécifié de champ d'application avec la commande print-settings, vous pouvez exécuter la commande suivante pour associer un champ d'application à un dépôt Artifact Registry.

npm config set @SCOPE_NAME:registry https://LOCATION-npm.pkg.dev/PROJECT/REPOSITORY/

Obtenir un jeton d'accès

Les jetons d'accès sont valides pendant 60 minutes. Générez un jeton d'accès peu de temps avant d'exécuter des commandes qui interagissent avec les dépôts.

Pour obtenir un jeton, utilisez l'une des options suivantes:

  • Utilisez la commande npx pour actualiser le jeton d'accès.

    1. Assurez-vous que les identifiants de connexion au registre npm public se trouvent dans votre fichier de configuration npm d'utilisateur ~/.npmrc.

    2. Exécutez la commande suivante dans le répertoire de votre projet Node.js.

      npx google-artifactregistry-auth
      

      Si votre dépôt Artifact Registry est défini comme registre global et que le champ d'application de vos packages n'est pas défini, utilisez plutôt la commande suivante afin qu'elle puisse télécharger l'assistant d'identification à partir du registre npm public plutôt que depuis votre dépôt Artifact Registry.

      npm_config_registry=https://registry.npmjs.org npx google-artifactregistry-auth
      
  • Ajoutez un script au fichier package.json dans votre projet.

    "scripts": {
     "artifactregistry-login": "npx google-artifactregistry-auth"
    }
    

    Exécutez le script dans le répertoire de votre projet Node.js.

    npm run artifactregistry-login
    

Artifact Registry lit les paramètres du dépôt Artifact Registry dans le fichier .npmrc de votre projet et les utilise pour ajouter des identifiants de jeton au fichier .npmrc de votre utilisateur. Le stockage du jeton dans votre fichier utilisateur .npmrc isole vos identifiants de votre code source et de votre système de contrôle des sources.

  • --repo-config est le fichier .npmrc contenant les paramètres de votre dépôt. Si vous ne spécifiez pas cet indicateur, l'emplacement par défaut est le répertoire actuel.
  • --credential-config est le chemin d'accès au fichier .npmrc dans lequel vous souhaitez écrire le jeton d'accès. La valeur par défaut est le fichier .npmrc de votre utilisateur.

Configurer l'authentification par mot de passe

Utilisez cette approche lorsque votre application Node.js nécessite une authentification avec un nom d'utilisateur et un mot de passe donnés.

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 créer un compte de service et 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 Artifact Registry spécifique au compte de service pour fournir l'accès au dépôt.

  3. Si vous souhaitez activer le compte de service dans la session de gcloud CLI actuelle, exécutez la commande suivante:

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

    • ACCOUNT est l'utilisateur ou le compte de service.
    • KEY-FILE est le chemin d'accès au fichier de clé JSON du compte de service.
  4. Exécutez la commande suivante pour afficher la configuration du dépôt:

    gcloud artifacts print-settings npm [--project=PROJECT] \
    [--repository=REPOSITORY] [--location=LOCATION] --scope=@SCOPE-NAME --json-key=KEY-FILE
    

    • 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.
    • SCOPE-NAME est le nom du champ d'application npm à associer au dépôt.

      L'utilisation des champs d'application vous permet de toujours publier et d'installer des packages à partir du bon dépôt.

      Les packages sans champ d'application sont associés à votre registre npm par défaut, généralement le registre public npm. Si vous ne spécifiez pas de champ d'application, la configuration renvoyée définit votre dépôt Artifact Registry comme registre par défaut. Cela peut entraîner des problèmes si vos projets Node.js doivent installer des packages à partir du registre npm public et de votre dépôt Artifact Registry.

    • KEY-FILE est le chemin d'accès au fichier de clé JSON du compte de service.

  5. Ajoutez les paramètres de configuration renvoyés au fichier de configuration .npmrc dans vos projets Node.js. Ce fichier se trouve généralement dans le même répertoire que package.json. Veillez à inclure ces paramètres dans les projets Node.js pour les packages que vous publiez, ainsi que dans les projets qui installeront des dépendances à partir de votre dépôt npm.

  6. Si vous avez d'autres dépôts Node.js auxquels vous connecter, répétez les étapes précédentes pour obtenir les paramètres et les ajouter au fichier .npmrc.

Étapes suivantes