Méthodes d'authentification

Cette page explique comment configurer l'authentification d'un client tiers à l'aide de Container Registry.

Les services Google Cloud qui integrate à Container Registry sont préconfigurés avec des autorisations permettant d'accéder aux dépôts d'un même projet. Vous n'avez pas besoin de configurer l'authentification pour ces services, mais vous devez vérifier que les autorisations sont correctement configurées.

Avant de commencer

  1. Vérifiez que vous avez activé l'API Container Registry et installé gcloud CLI. Pour obtenir des instructions, consultez la page Activer et désactiver le service.
  2. Vérifiez que le compte que vous utilisez pour l'authentification dispose des autorisations permettant d'accéder à Container Registry. Nous vous recommandons d'utiliser un compte de service plutôt qu'un compte utilisateur.

  3. Installez Docker si ce n'est pas encore fait. Docker est inclus dans Cloud Shell.

  4. Docker nécessite un accès privilégié pour interagir avec les registres. Sous Linux ou Windows, ajoutez l'utilisateur que vous permet d'exécuter des commandes Docker dans le groupe de sécurité Docker. Cette étape n'est pas requise sous macOS, car Docker Desktop s'exécute sur une machine virtuelle en tant qu'utilisateur racine.

    Linux

    Le groupe de sécurité Docker s'appelle docker. Pour ajouter votre nom d'utilisateur, exécutez la commande suivante :

    sudo usermod -a -G docker ${USER}
    

    Windows

    Le groupe de sécurité Docker s'appelle docker-users. Pour ajouter un utilisateur à partir de l'invite de commande administrateur, exécutez la commande suivante :

    net localgroup docker-users DOMAIN\USERNAME /add
    

    • DOMAIN est votre domaine Windows.
    • USERNAME est votre nom d'utilisateur.

    Déconnectez-vous et reconnectez-vous pour que les modifications apportées à la liste des membres du groupe soient appliquées. Si vous utilisez une machine virtuelle, vous devrez peut-être la redémarrer pour que ces modifications prennent effet.

Méthodes d'authentification

Vous devez configurer les clients tiers ayant besoin d'accéder à Container Registry.

Les méthodes d'authentification suivantes sont disponibles :

Assistant d'identification gcloud (recommandé)
Configurez vos identifiants Container Registry à utiliser avec Docker directement dans gcloud. Cette méthode fournit un accès sécurisé et de courte durée aux ressources de votre projet. Utilisez-la dans la mesure du possible. Cette option n'est compatible qu'avec les versions Docker 18.03 ou ultérieures.
Assistant d'identification autonome
Cette option sert principalement à configurer vos identifiants à utiliser avec Docker en l'absence de Google Cloud CLI. Cette option n'est compatible qu'avec les versions Docker 18.03 ou ultérieures.
Jeton d'accès
Les identifiants par défaut de l'application fournissent des jetons d'accès de courte durée qu'un compte de service utilise pour accéder à vos ressources Google Cloud. La méthode la plus sûre consiste à utiliser gcloud comme assistant d'identification.
Fichier de clé JSON

Une paire de clés gérée par l'utilisateur que vous pouvez utiliser comme identifiant pour un compte de service. Les identifiants étant de longue durée, il s'agit de l'option la moins sécurisée de toutes les méthodes d'authentification disponibles.

Dans la mesure du possible, utilisez un jeton d'accès ou une autre méthode d'authentification disponible pour réduire le risque d'accès non autorisé à vos artefacts. Les clés de compte de service constituent un risque pour la sécurité si elles ne sont pas gérées correctement. Dans la mesure du possible, vous devez choisir une alternative plus sécurisée aux clés de compte de service. Si vous devez vous authentifier avec une clé de compte de service, vous êtes responsable de la sécurité de la clé privée et des autres opérations décrites sur la page Bonnes pratiques pour gérer les clés de compte de service. Si vous ne parvenez pas à créer une clé de compte de service, la création de clé de compte de service peut être désactivée pour votre organisation. Pour en savoir plus, consultez la page Gérer les ressources d'organisation sécurisées par défaut.

Pour certains outils ou flux de travail, l'assistant d'identification gcloud n'est pas le plus adapté. Si vous utilisez l'une des autres options, assurez-vous de bien comprendre les implications en termes de sécurité.

Paramètres d'authentification dans le fichier de configuration Docker

Docker enregistre les paramètres d'authentification dans le fichier de configuration config.json.

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

Le fichier comporte des sections distinctes correspondant aux différentes méthodes d'authentification:

credHelpers
Si vous utilisez l'assistant d'identification Docker pour l'authentification, Container Registry stocke ses paramètres dans la section credHelpers du fichier.
auths
Si vous utilisez Docker pour vous connecter avec un jeton ou une clé de compte de service comme mot de passe, Docker stocke vos identifiants dans la section auths du fichier.
credStore
Si vous avez configuré un magasin d'identifiants pour gérer vos identifiants, les paramètres correspondants se trouvent dans la section credStore du fichier.

Lorsque Docker se connecte à un registre, il recherche d'abord un assistant d'identification associé à l'hôte. Ainsi, si votre fichier config.json inclut les paramètres de Container Registry dans les sections credHelpers et auths, les paramètres de la section auths sont ignorés.

Assistant d'identification gcloud

Nous vous recommandons fortement d'utiliser cette méthode dans la mesure du possible. Il fournit un accès sécurisé et de courte durée aux ressources de votre projet.

Utilisez la gcloud CLI pour configurer l'authentification dans Cloud Shell ou tout environnement dans lequel la Google Cloud CLI est installée. Cloud Shell inclut la version actuelle de Docker.

Pour configurer l'authentification :

  1. Connectez-vous à gcloud en tant que l'utilisateur qui exécutera les commandes Docker.

    • Pour configurer l'authentification avec des identifiants utilisateur, exécutez la commande suivante :

      gcloud auth login
      
    • Pour configurer l'authentification avec des identifiants de compte de service, exécutez la commande suivante :

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

      Où :

      • ACCOUNT est le nom du compte de service au format [USERNAME]@[PROJECT-ID].iam.gserviceaccount.com. Vous pouvez afficher les comptes de service existants sur la page Comptes de service de la console Google Cloud ou à l'aide de la commande gcloud iam service-accounts list.
      • KEY-FILE est le fichier de clé du compte de service. Pour en savoir plus sur la création d'une clé, consultez la documentation IAM (Identity and Access Management).
  2. Configurez Docker à l'aide de la commande suivante :

    gcloud auth configure-docker
    

    Vos identifiants sont enregistrés dans votre répertoire d'accueil utilisateur.

    • Linux : $HOME/.docker/config.json
    • Windows : %USERPROFILE%/.docker/config.json

Assistant d'identification autonome

L'assistant d'identification Docker autonome configure Docker pour s'authentifier auprès de Container Registry sur un système où gcloud CLI n'est pas disponible.

L'assistant d'identification récupère vos identifiants Container Registry, soit automatiquement, soit à partir d'un emplacement spécifié à l'aide de son option --token-source, puis les écrit dans le fichier de configuration de Docker. Ainsi, vous pouvez utiliser l'outil de ligne de commande de Docker (docker) pour interagir directement avec Container Registry.

Pour configurer l'authentification :

  1. Connectez-vous à l'ordinateur en tant que l'utilisateur qui exécutera les commandes Docker.

  2. Téléchargez docker-credential-gcr à partir des versions GitHub :

    Vous pouvez éventuellement utiliser l'utilitaire de ligne de commande curl. Exemple :

    VERSION=2.1.22
    OS=linux  # or "darwin" for OSX, "windows" for Windows.
    ARCH=amd64  # or "386" for 32-bit OSs, "arm64" for ARM 64.
    
    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. Configurez Docker à l'aide de la commande suivante :

    docker-credential-gcr configure-docker
    

    Vos identifiants sont enregistrés dans votre répertoire d'accueil utilisateur.

    • Linux : $HOME/.docker/config.json
    • Windows : %USERPROFILE%/.docker/config.json

Pour en savoir plus, consultez la documentation de l'assistant d'identification Docker autonome sur GitHub.

Docker est à présent configuré pour s'authentifier avec Container Registry. Pour stocker et extraire des images, assurez-vous que les autorisations sont correctement configurées.

Jeton d'accès

Vous pouvez générer un jeton d'accès OAuth de courte durée pour vous authentifier auprès de Container Registry. Comme le jeton est valide pendant 60 minutes, vous devez en faire la demande moins d'une heure avant de l'utiliser pour vous connecter à Container Registry.

  1. Créez un compte de service qui interagira avec Container Registry.

    Console

    1. Dans la console Google Cloud, accédez à la page Créer un compte de service.

      Accéder à la page Créer un compte de service

    2. Sélectionnez le projet que vous souhaitez utiliser.

    3. Dans le champ Nom du compte de service, saisissez un nom.

    4. Facultatif : Dans le champ Description du compte de service, saisissez une description.

    5. Cliquez sur Créer.

    6. Cliquez sur le champ Sélectionner un rôle. Sous Tous les rôles, sélectionnez un rôle Cloud Storage approprié en fonction des autorisations que vous souhaitez accorder au compte de service.

    7. Cliquez sur OK.

    gcloud

    Vous pouvez exécuter les commandes suivantes à l'aide de Google Cloud CLI sur votre ordinateur local ou dans Cloud Shell.

    1. Créez le compte de service. Remplacez NAME par le nom que vous souhaitez donner au compte de service.

      gcloud iam service-accounts create NAME
      
    2. Attribuez un rôle au compte de service. Remplacez PROJECT_ID par l'ID de votre projet et ROLE par le rôle Cloud Storage approprié pour le compte de service. Ce rôle s'applique à tous les dépôts du projet. Vous pouvez modifier le rôle ultérieurement et attribuer différents rôles au compte de service sur des dépôts spécifiques.

      gcloud projects add-iam-policy-binding PROJECT_ID --member "serviceAccount:NAME@PROJECT_ID.iam.gserviceaccount.com" --role "roles/ROLE"
      
  2. Obtenez une clé pour le compte de service qui interagira avec Container Registry.

    Console

    1. Dans Google Cloud Console, accédez à la page Comptes de service.

      Accéder à la page "Comptes de service"

    2. Cliquez sur l'adresse e-mail du compte de service que vous souhaitez utiliser.

    3. Cliquez sur Clés.

    4. Cliquez sur AJOUTER UNE CLÉ -> Créer une clé.

    5. Cliquez sur Créer. Un fichier JSON contenant votre clé est téléchargé sur votre ordinateur.

      Les instructions de cette page utilisent le nom de fichier keyfile.json pour ce fichier de clé.

    6. Cliquez sur Fermer.

    gcloud

    Vous pouvez exécuter la commande suivante à l'aide de Google Cloud CLI sur votre ordinateur local ou dans Cloud Shell.

    Les instructions de cette page utilisent le nom de fichier keyfile.json comme fichier de clé.

    gcloud iam service-accounts keys create keyfile.json --iam-account [NAME]@[PROJECT_ID].iam.gserviceaccount.com
    
  3. Exécutez la commande suivante pour vous connecter à Google Cloud CLI en tant que compte de service.

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

    • ACCOUNT est le nom du compte de service au format [USERNAME]@[PROJECT-ID].iam.gserviceaccount.com.
    • KEY-FILE est le fichier de clé du compte de service. Pour en savoir plus sur la création d'une clé, consultez la documentation IAM.
  4. Vérifiez que les autorisations sont correctement configurées pour le compte de service. Si vous utilisez le compte de service Compute Engine, vous devez configurer correctement les autorisations et les niveaux d'accès.

  5. Procurez-vous un jeton d'accès pour le compte de service. Étant donné que le jeton est de courte durée, demandez-le moins d'une heure avant de l'utiliser pour vous connecter à Container Registry.

    Exécutez la commande ci-dessous.

    Linux

    gcloud auth print-access-token | docker login -u oauth2accesstoken \
        --password-stdin https://HOSTNAME
    

    Windows

    gcloud auth print-access-token |
        docker login -u oauth2accesstoken --password-stdin https://HOSTNAME
    

    HOSTNAME est gcr.io, us.gcr.io, eu.gcr.io ou asia.gcr.io.

Docker est désormais authentifié avec Container Registry.

Fichier de clé JSON

Une clé de compte de service est une paire de clés à longue durée de vie que vous pouvez utiliser comme identifiant de compte de service. Contrairement au jeton d'accès OAuth, une clé de compte de service n'expire pas.

Toute personne ayant accès à une clé privée valide pour un compte de service peut accéder aux ressources via le compte de service. Par exemple, certains comptes de service créés automatiquement par Google Cloud, tels que le compte de service Container Registry, se voient attribuer le rôle Editor avec des autorisations de lecture/écriture pour le projet parent. Le compte de service par défaut Compute Engine est configuré avec un accès en lecture seule à l'espace de stockage dans le même projet.

En outre, le cycle de vie de l'accès de la clé au compte de service est indépendant du cycle de vie de l'utilisateur qui a téléchargé la clé.

Suivez les instructions ci-dessous pour limiter l'accès aux images de vos conteneurs :

Pour créer un nouveau compte de service et une clé de compte de service à n'utiliser qu'avec les dépôts Container Registry, procédez comme suit :

  1. Créez un compte de service qui interagira avec Container Registry.

    Console

    1. Dans la console Google Cloud, accédez à la page Créer un compte de service.

      Accéder à la page Créer un compte de service

    2. Sélectionnez le projet que vous souhaitez utiliser.

    3. Dans le champ Nom du compte de service, saisissez un nom.

    4. Facultatif : Dans le champ Description du compte de service, saisissez une description.

    5. Cliquez sur Créer.

    6. Cliquez sur le champ Sélectionner un rôle. Sous Tous les rôles, sélectionnez un rôle Cloud Storage approprié pour le compte de service.

    7. Cliquez sur OK.

    gcloud

    Vous pouvez exécuter les commandes suivantes à l'aide de Google Cloud CLI sur votre ordinateur local ou dans Cloud Shell.

    1. Créez le compte de service. Remplacez NAME par le nom que vous souhaitez donner au compte de service.

      gcloud iam service-accounts create NAME
      
    2. Attribuez un rôle au compte de service. Remplacez PROJECT_ID par l'ID de votre projet et ROLE par le rôle Cloud Storage approprié pour le compte de service.

      gcloud projects add-iam-policy-binding PROJECT_ID --member "serviceAccount:NAME@PROJECT_ID.iam.gserviceaccount.com" --role "roles/ROLE"
      
  2. Obtenez une clé pour le compte de service qui interagira avec Container Registry.

    Console

    1. Dans Google Cloud Console, accédez à la page Comptes de service.

      Accéder à la page "Comptes de service"

    2. Cliquez sur l'adresse e-mail du compte de service que vous souhaitez utiliser.

    3. Cliquez sur Clés.

    4. Cliquez sur AJOUTER UNE CLÉ -> Créer une clé.

    5. Cliquez sur Créer. Un fichier JSON contenant votre clé est téléchargé sur votre ordinateur.

      Les instructions de cette page utilisent le nom de fichier keyfile.json pour ce fichier de clé.

    6. Cliquez sur Fermer.

    gcloud

    Vous pouvez exécuter la commande suivante à l'aide de Google Cloud CLI sur votre ordinateur local ou dans Cloud Shell.

    Les instructions de cette page utilisent le nom de fichier keyfile.json comme fichier de clé.

    gcloud iam service-accounts keys create keyfile.json --iam-account [NAME]@[PROJECT_ID].iam.gserviceaccount.com
    
  3. Vérifiez que les autorisations sont correctement configurées pour le compte de service. Si vous utilisez le compte de service Compute Engine, vous devez configurer correctement les autorisations et les niveaux d'accès.

  4. Utilisez la clé de compte de service comme mot de passe pour vous authentifier auprès de Docker.

    Linux/macOS

    cat KEY-FILE | docker login -u _json_key --password-stdin \
    https://HOSTNAME
    

    Windows

    Get-Content KEY-FILE |
    docker login -u _json_key --password-stdin https://HOSTNAME
    

    Remplacez les éléments suivants :

    • KEY-FILE est le nom du fichier de clé du compte de service au format JSON.
    • HOSTNAME est gcr.io, us.gcr.io, eu.gcr.io ou asia.gcr.io.

Docker est désormais authentifié avec Container Registry.