Cette page explique comment configurer l'authentification d'un client tiers à l'aide de Container Registry.
Les services Google Cloud qui sont intégrés à 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
- 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.
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.
Installez Docker si ce n'est pas encore fait. Docker est inclus dans Cloud Shell.
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
Où
- 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 permet principalement de 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 contient des sections distinctes pour les différentes méthodes d'authentification:
credHelpers
- Si vous utilisez l'assistant d'identification Docker pour l'authentification, Container Registry stocke les paramètres de l'assistant d'identification 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 répertoire d'identifiants pour gérer vos identifiants, les paramètres du répertoire d'identifiants 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. Par conséquent, si votre config.json
inclut des 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. Elle 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 dans tout environnement dans lequel la Google Cloud CLI est installée. Cloud Shell inclut la version actuelle de Docker.
Pour configurer l'authentification :
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 avec la commandegcloud 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).
- ACCOUNT est le nom du compte de service au format
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
- Linux :
Assistant d'identification autonome
L'assistant d'identification Docker autonome configure Docker pour s'authentifier auprès de Container Registry sur un système sur lequel la 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 :
Connectez-vous à l'ordinateur en tant que l'utilisateur qui exécutera les commandes Docker.
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.23 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/
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
- Linux :
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 le demander moins d'une heure avant de vous en servir pour vous connecter à Container Registry.
Créez un compte de service qui interagira avec Container Registry.
Console
Dans la console Google Cloud, accédez à la page Créer un compte de service.
Sélectionnez le projet que vous souhaitez utiliser.
Dans le champ Nom du compte de service, saisissez un nom.
Facultatif : Dans le champ Description du compte de service, saisissez une description.
Cliquez sur Create (Créer).
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.
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.
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
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 pourrez modifier le rôle ultérieurement. Vous pouvez également attribuer différents rôles au compte de service dans 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"
Obtenez une clé pour le compte de service qui interagira avec Container Registry.
Console
Dans Google Cloud Console, accédez à la page Comptes de service.
Cliquez sur l'adresse e-mail du compte de service que vous souhaitez utiliser.
Cliquez sur Clés.
Cliquez sur AJOUTER UNE CLÉ -> Créer une clé.
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é.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
pour le fichier de clé.gcloud iam service-accounts keys create keyfile.json --iam-account [NAME]@[PROJECT_ID].iam.gserviceaccount.com
Exécutez la commande suivante pour vous connecter à la Google Cloud CLI en tant que compte de service.
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
. - 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.
- ACCOUNT est le nom du compte de service au format
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.
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 suivante :
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
où HOSTNAME est
gcr.io
,us.gcr.io
,eu.gcr.io
ouasia.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 :
- Obtenez la clé du compte de service qui interagira avec Container Registry.
- Attribuez le rôle spécifique correspondant au niveau d'accès minimal requis par le compte de service.
- Suivez les bonnes pratiques de gestion des identifiants.
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 :
Créez un compte de service qui interagira avec Container Registry.
Console
Dans la console Google Cloud, accédez à la page Créer un compte de service.
Sélectionnez le projet que vous souhaitez utiliser.
Dans le champ Nom du compte de service, saisissez un nom.
Facultatif : Dans le champ Description du compte de service, saisissez une description.
Cliquez sur Create (Créer).
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.
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.
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
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"
Obtenez une clé pour le compte de service qui interagira avec Container Registry.
Console
Dans Google Cloud Console, accédez à la page Comptes de service.
Cliquez sur l'adresse e-mail du compte de service que vous souhaitez utiliser.
Cliquez sur Clés.
Cliquez sur AJOUTER UNE CLÉ -> Créer une clé.
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é.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
pour le fichier de clé.gcloud iam service-accounts keys create keyfile.json --iam-account [NAME]@[PROJECT_ID].iam.gserviceaccount.com
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.
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
ouasia.gcr.io
.
Docker est désormais authentifié avec Container Registry.