Artifact Registry étend les fonctionnalités de Container Registry et est le service recommandé pour gérer les images de conteneurs et les autres artefacts dans Google Cloud. Découvrez comment passer à Artifact Registry.

Configurer le contrôle des accès

Cette page décrit les autorisations de contrôle d'accès à Container Registry.

Une fois les autorisations configurées, vous pouvez configurer l'authentification pour les clients Docker que vous utilisez pour stocker et extraire des images.

Si vous utilisez Container Analysis pour travailler avec des métadonnées de conteneur, telles que les failles trouvées dans les images, consultez la documentation de Container Analysis pour savoir comment accorder l'accès permettant d'afficher ou de gérer les métadonnées.

Autorisations pour le compte de service Container Registry

L'agent de service Container Registry est un compte de service géré par Google qui agit au nom de Container Registry lors de l'interaction avec les services Google Cloud.

Pour appliquer le principe de sécurité du moindre privilège, ce compte de service se voit attribuer le rôle d'agent de service Container Registry dans les projets pour lesquels l'API Container Registry a été activée après le 5 octobre 2020. Ce rôle dispose des autorisations suivantes :

  • Publier les sujets : pubsub.topics.publish
  • Lire les LCA d'objets de stockage : storage.objects.getIamPolicy
  • Lires les données et les métadonnées d'objets de stockage : storage.objects.get
  • Répertorier les objets de stockage dans un bucket et lire les métadonnées d'objets : storage.objects.list

Auparavant, le compte de service Container Registry disposait du rôle Éditeur. Étant donné que le rôle Éditeur bénéficie des autorisations pour créer et supprimer la plupart des ressources d'un projet, nous vous recommandons de limiter les autorisations si votre compte de service Container Registry possède ce rôle.

Pour vérifier les autorisations actuelles de votre compte de service Container Registry, exécutez la commande suivante :

gcloud projects get-iam-policy PROJECT-ID  \
--flatten="bindings[].members" \
--format='table(bindings.role)' \
--filter="bindings.members:service-PROJECT-NUMBER@containerregistry.iam.gserviceaccount.com"

Où :

  • PROJECT-ID est l'ID du projet Google Cloud.
  • PROJECT-NUMBER est le numéro du projet Google Cloud.

Vous pouvez obtenir l'ID et le numéro du projet dans Google Cloud Console, ou à l'aide des commandes suivantes :

PROJECT=$(gcloud config get-value project)
echo $PROJECT && gcloud projects list --filter="$PROJECT" --format="value(PROJECT_NUMBER)"

Pour accorder le rôle d'Agent de service Container Registry et révoquer le rôle d'Éditeur, procédez comme suit :

  1. Attribuez le rôle d'Agent de service Container Registry à l'aide de la commande suivante :

    gcloud projects add-iam-policy-binding PROJECT-ID \
    --member=serviceAccount:service-PROJECT-NUMBER@containerregistry.iam.gserviceaccount.com --role=roles/containerregistry.ServiceAgent
    
  2. Révoquez le rôle d'Éditeur à l'aide de la commande suivante :

    gcloud projects remove-iam-policy-binding PROJECT-ID \
    --member=serviceAccount:service-PROJECT-NUMBER@containerregistry.iam.gserviceaccount.com --role=roles/editor
    

Autorisations d'accéder à Container Registry

Tous les utilisateurs, comptes de service et autres identités qui interagissent avec Container Registry doivent disposer des autorisations IAM (gestion de l'authentification et des accès) appropriées pour le stockage Cloud Storage.

Autorisations IAM

Les autorisations IAM déterminent qui peut accéder aux ressources. Tous les utilisateurs, comptes de service et autres identités qui interagissent avec Container Registry doivent disposer des autorisations Cloud Storage appropriées.

Google Cloud utilise des comptes de service par défaut pour interagir avec les ressources d'un même projet. Par exemple, le compte de service Cloud Build peut stocker et extraire des images lorsque Container Registry se trouve dans le même projet.

Vous devez configurer ou modifier vous-même les autorisations dans les cas suivants :

  • Vous utilisez un compte de service dans un projet pour accéder à Container Registry dans un autre projet.
  • Vous utilisez un compte de service par défaut avec un accès en lecture seule au stockage, mais vous souhaitez extraire et stocker des images.
  • Vous utilisez un compte de service personnalisé pour interagir avec Container Registry.

Niveaux d'accès pour les VM et les clusters

Pour les comptes de service associés aux VM Compute Engine, y compris les VM des clusters GKE, l'accès à l'espace de stockage est basé sur les autorisations IAM et le niveau d'accès configuré.

Le compte de service par défaut Compute Engine est configuré pour extraire les images dans le même projet que la VM. Si vous avez besoin d'une VM ou d'un cluster GKE pour extraire des images ou interagir avec Container Registry dans un autre projet, consultez la page Utiliser Container Registry avec Google Cloud.

Configurer des autorisations IAM

Container Registry utilise les buckets Cloud Storage comme stockage sous-jacent pour les images de conteneurs. Vous contrôlez l'accès à vos images en accordant des autorisations Cloud Storage appropriées à un utilisateur, un groupe, un compte de service ou une autre identité.

Les autorisations Cloud Storage accordées au niveau du projet s'appliquent à tous les buckets de stockage du projet, et pas seulement aux buckets utilisés par Container Registry. Pour configurer des autorisations spécifiques à Container Registry, accordez des autorisations sur le bucket de stockage utilisé par le registre. Container Registry ignore les autorisations définies sur des objets individuels dans le bucket de stockage.

Bien que vous puissiez également utiliser les rôles Owner, Editor et Viewer au niveau du projet pour accorder l'accès, les rôles Cloud Storage vous permettent d'appliquer le principe de sécurité du moindre privilège, afin que les utilisateurs et les comptes de service ne disposent que des autorisations requises.

Les produits et applications Google Cloud qui interagissent avec Google Cloud utilisent des comptes de service pour interagir avec Container Registry. Les considérations suivantes s'appliquent à l'accès au compte de service :

  • Par défaut, les comptes de service pour certaines intégrations courantes sont configurés avec un accès à Container Registry dans le même projet. Par exemple, le compte de service Cloud Build peut transférer et extraire par défaut des images dans le même projet.
  • Si le compte de service doit accéder à Container Registry dans un autre projet, vous devez accorder les autorisations requises dans le projet avec Container Registry.
  • Les instances de VM, y compris celles qui se trouvent dans les clusters Google Kubernetes Engine, doivent disposer de niveaux d'accès de stockage correctement configurés pour pouvoir transférer ou extraire des images. Par défaut, les VM peuvent extraire des images lorsque Container Registry se trouve dans le même projet.

Autorisations et rôles

Le tableau ci-dessous présente les autorisations et les rôles requis pour les actions de Container Registry.

Pour en savoir plus sur les rôles et les autorisations Cloud Storage, consultez la documentation de Cloud Storage.

Action Autorisations Rôle Nom du rôle
Envoi (lecture et écriture)

storage.buckets.create

storage.buckets.delete

storage.buckets.get

storage.buckets.list

storage.buckets.update

storage.objects.create

storage.objects.delete

storage.objects.get

storage.objects.list

storage.objects.update

roles/storage.admin Administrateur de l'espace de stockage
Retrait (lecture seule)

storage.objects.get

storage.objects.list

roles/storage.objectViewer Lecteur des objets Storage

Accorder des autorisations IAM

Accordez des autorisations sur le bucket de stockage utilisé par Container Registry.

Accorder des autorisations

  1. Créez un bucket de stockage pour l'hôte multirégional s'il n'existe pas déjà dans votre projet. Les hôtes disponibles sont : gcr.io, asia.gcr.io, eu.gcr.io et us.gcr.io. Pour effectuer cette étape, vous devez disposer des autorisations suivantes : "Propriétaire", "Éditeur" ou "Administrateur de l'espace de stockage".

    Pour créer le bucket de stockage, transférez une image initiale vers l'hôte. Par exemple, ces commandes extraient l'image busybox à partir de Docker Hub, lui attribuent un tag avec le chemin d'accès au registre gcr.io dans le projet my-project, puis envoient l'image.

    docker pull busybox
    docker tag busybox gcr.io/my-project/busybox
    docker push gcr.io/my-project/busybox
    
  2. Dans le projet avec Container Registry, accordez les autorisations appropriées sur le bucket Cloud Storage utilisé par le nom d'hôte.

    Le bucket qui stocke vos images porte le nom BUCKET-NAME au format suivant :

    • artifacts.PROJECT-ID.appspot.com pour les images stockées dans un registre de l'hôte gcr.io, ou
    • STORAGE-REGION.artifacts.PROJECT-ID.appspot.com

    Où :

    • PROJECT-ID est l'ID du projet dans Google Cloud Console.
    • STORAGE-REGION est l'emplacement du bucket de stockage :
      • us pour les registres de l'hôte us.gcr.io
      • eu pour les registres de l'hôte eu.gcr.io
      • asia pour les registres de l'hôte asia.gcr.io

    Vous pouvez accorder une autorisation pour un bucket à l'aide de Google Cloud Console ou de l'outil de ligne de commande gsutil.

    Console

    1. Accédez à la page "Cloud Storage" de Cloud Console.
    2. Cliquez sur le lien artifacts.PROJECT-ID.appspot.com ou STORAGE-REGION.artifacts.PROJECT-ID.appspot.com associés au bucket.

      Ici, PROJECT-ID est l'ID du projet Google Cloud qui héberge Container Registry et STORAGE-REGION est l'emplacement multirégional (asia, eu, ou us) du registre qui héberge l'image.

    3. Sélectionnez l'onglet Autorisations.

    4. Cliquez sur Ajouter des membres.

    5. Dans le menu qui s'affiche, renseignez le champ Membres en saisissant les adresses e-mail des utilisateurs ayant besoin d'une autorisation, séparées par des virgules. Voici les types d'adresses e-mail possibles :

      • Adresse de compte Google (par exemple, someone@example.com)
      • Groupe Google (par exemple, my-developer-team@googlegroups.com)
      • Compte de service IAM
      • Adresse de compte de service par défaut Compute Engine d'un autre projet. Ce compte est utilisé par Google Kubernetes Engine pour extraire les clusters d'images de conteneurs par défaut. L'adresse se présente sous la forme PROJECT-NUMBER-compute@developer.gserviceaccount.com, où PROJECT-NUMBER correspond au numéro du projet Google Cloud exécutant le cluster Google Kubernetes Engine.
    6. Dans le menu déroulant Sélectionner un rôle, sélectionnez la catégorie Stockage, puis l'autorisation appropriée.

      • Lecteur des objets de l'espace de stockage pour extraire des images uniquement
      • Administrateur Storage pour stocker et extraire des images
    7. Cliquez sur Ajouter.

    gsutil

    1. Exécutez la commande suivante pour répertorier les buckets du projet :

      gsutil ls
      

      La réponse est semblable à ceci :

      gs://[BUCKET_NAME1]/
      gs://[BUCKET_NAME2]/
      gs://[BUCKET_NAME3]/ ...
      
    2. Exécutez la commande suivante dans la fenêtre de votre interface système ou de votre terminal :

      gsutil iam ch TYPE:EMAIL-ADDRESS:ROLE gs://BUCKET_NAME
      

      • TYPE peut être :
        • serviceAccount, si EMAIL-ADDRESS spécifie un compte de service.
        • user, si EMAIL-ADDRESS est un compte Google.
        • group, si EMAIL-ADDRESS est un groupe Google.
      • EMAIL-ADDRESS peut être :
        • Adresse de compte Google (par exemple, someone@example.com)
        • Groupe Google (par exemple, my-developer-team@googlegroups.com)
        • Compte de service IAM
        • Adresse de compte de service par défaut Compute Engine d'un autre projet. Ce compte est utilisé par Google Kubernetes Engine pour extraire les clusters d'images de conteneurs par défaut. L'adresse se présente sous la forme PROJECT_NUMBER-compute@developer.gserviceaccount.com, où PROJECT_NUMBER correspond au numéro du projet Google Cloud exécutant le cluster Google Kubernetes Engine.
      • ROLE est le rôle Cloud Storage que vous souhaitez accorder.
        • objectViewer pour extraire des images
        • objectAdmin pour stocker et extraire des images
      • BUCKET_NAME est le nom du bucket Cloud Storage au format artifacts.PROJECT-ID.appspot.com ou STORAGE-REGION.artifacts.PROJECT-ID.appspot.com

    La commande gsutil iam ch modifie les autorisations IAM du bucket de stockage dans lequel le registre est hébergé. L'octroi d'autorisations objectViewer à un compte permet à celui-ci d'extraire des images du registre.

    Pour en savoir plus sur la commande, consultez la documentation sur gsutil iam.

  3. Compute Engine et Google Kubernetes Engine sont configurés avec des autorisations permettant par défaut d'extraire des images de Container Registry dans le même projet. Si vous avez d'autres exigences pour ces intégrations, consultez la page Intégration aux services Google Cloud.

Configurer l'accès public aux images

Container Registry est accessible publiquement si le bucket de stockage sous-jacent de l'emplacement d'hôte l'est aussi. Dans un projet, toutes les images de chaque emplacement d'hôte sont publiques ou non. Dans l'hôte d'un projet, il n'est pas possible de ne diffuser publiquement que des images spécifiques. Si vous souhaitez rendre publiques des images spécifiques :

  • veillez à les conserver dans un emplacement d'hôte séparé que vous rendez public, ou ;
  • créez un projet pour y stocker des images accessibles au public.

Pour diffuser publiquement des images de conteneurs, faites passer le bucket de stockage sous-jacent en accès public en procédant comme suit :

Console

  1. Assurez-vous d'avoir transféré une image vers Container Registry afin que le bucket de stockage sous-jacent existe.

  2. Ouvrez la page Container Registry dans Cloud Console.

    Ouvrir la page Container Registry.

  3. Dans le panneau de gauche, cliquez sur Paramètres.

  4. Sur la page Paramètres, sous Accès public, basculez la visibilité sur Public ou Privé. Ce paramètre contrôle l'accès au bucket de stockage sous-jacent.

    Lorsque la visibilité de l'hôte est publique, toutes les images de votre projet Google Cloud situées dans cet emplacement d'hôte sont accessibles au public.

gsutil

  1. Assurez-vous d'avoir transféré une image vers Container Registry afin que le bucket de stockage sous-jacent existe.

  2. Recherchez le nom du bucket Cloud Storage pour ce registre. Pour cela, répertoriez les buckets :

    gsutil ls
    

    L'URL de votre bucket Container Registry sera répertoriée sous la forme gs://artifacts.PROJECT-ID.appspot.com ou gs://STORAGE-REGION.artifacts.PROJECT-ID.appspot.com, où :

    • PROJECT-ID est l'ID du projet dans Google Cloud Console. Dans les projets à l'échelle du domaine, le nom de domaine figure dans l'ID du projet.
    • STORAGE-REGION est l'emplacement du bucket de stockage :
      • us pour les registres de l'hôte us.gcr.io
      • eu pour les registres de l'hôte eu.gcr.io
      • asia pour les registres de l'hôte asia.gcr.io
  3. Faites passer le bucket de stockage Container Registry en accès public en exécutant la commande suivante. Cette dernière rendra toutes les images du bucket accessibles au public.

    gsutil iam ch allUsers:objectViewer gs://BUCKET-NAME
    

    où :

    • gs://BUCKET-NAME est l'URL du bucket Container Registry.

Lorsque Container Registry est accessible au public, tout le monde peut sortir ses images. Pour obtenir des instructions, consultez la page Extraire des images d'un registre.

Révoquer des autorisations

Pour révoquer des autorisations IAM, procédez comme suit :

Console

  1. Accédez à la page "Cloud Storage" de Cloud Console.
  2. Cliquez sur le lien artifacts.PROJECT-ID.appspot.com ou STORAGE-REGION.artifacts.PROJECT-ID.appspot.com associés au bucket. Ici, PROJECT-ID est l'ID du projet Google Cloud qui héberge Container Registry et STORAGE-REGION est l'emplacement multirégional (asia, eu, ou us) du registre qui héberge l'image.

  3. Sélectionnez l'onglet Autorisations.

  4. Cliquez sur l'icône de la corbeille à côté du membre que vous souhaitez supprimer.

gsutil

Exécutez la commande suivante dans la fenêtre de votre interface système ou de votre terminal :

gsutil iam ch -d MEMBER gs://BUCKET-NAME

où :

  • MEMBER peut être :
    • user:EMAIL-ADDRESS pour un compte Google ;
    • serviceAccount:EMAIL-ADDRESS pour un compte de service IAM ;
    • group:EMAIL-ADDRESS pour un groupe Google ;
    • allUsers pour révoquer l'accès public
  • BUCKET-NAME est le nom du bucket souhaité.

Intégration aux services Google Cloud

Par défaut, les comptes de service pour certaines intégrations courantes sont configurés pour utiliser l'accès en mode "pull" ou "pull and push", au sein du même projet. L'accès est basé sur les autorisations IAM. Vous ne devez configurer les autorisations que si le compte de service se connecte à Container Registry au sein d'un autre projet.

Le compte de service associé aux instances de VM Compute Engine, y compris les VM dans des clusters GKE, présente une exigence supplémentaire. L'accès de la VM à l'espace de stockage est basé sur les autorisations IAM et les niveaux d'accès à l'espace de stockage.

  • Les autorisations IAM déterminent qui peut accéder aux ressources.
  • Les niveaux d'accès déterminent les champs d'application OAuth par défaut pour les requêtes effectuées via l'outil gcloud et les bibliothèques clientes sur une instance de VM. Par conséquent, les niveaux d'accès peuvent limiter davantage l'accès aux méthodes d'API lors de l'authentification avec les identifiants par défaut de l'application.
    • Pour extraire une image privée, le compte de service de la VM doit disposer de l'autorisation read sur le bucket de stockage de l'image.
    • Pour stocker des images privées, le compte de service de VM doit disposer des autorisations read-write, cloud-platform ou full-control sur le bucket de stockage de ces images.

Par défaut, le compte de service par défaut Compute Engine dispose de l'autorisation d'éditeur sur les ressources du même projet et du niveau d'accès à l'espace de stockage read-only. Le niveau d'accès read-only limite une VM à l'extraction d'images uniquement. Le compte de service par défaut comporte le suffixe @developer.gserviceaccount.com.

Dans les configurations suivantes, vous devez modifier la configuration par défaut des autorisations ou du niveau d'accès.

Stocker des images à partir d'une VM ou d'un cluster
Si vous souhaitez transférer des images, le compte de service de l'instance de VM doit avoir le niveau d'accès storage-rw au lieu de storage-ro.
La VM et Container Registry se trouvent dans des projets distincts
Vous devez accorder au compte de service des autorisations Cloud IAM permettant d'accéder au bucket de stockage utilisé par Container Registry.
Exécuter des commandes gcloud sur des VM
Le compte de service doit avoir le niveau d'accès cloud-platform. Ce champ d'application accorde des autorisations pour stocker et extraire des images, ainsi que pour exécuter des commandes gcloud.

Les étapes de configuration des autorisations et des niveaux d'accès sont décrites dans les sections suivantes.

Configurer les autorisations IAM pour les VM

Par défaut, les VM Compute Engine ne peuvent accéder qu'à l'espace de stockage du projet. Si votre VM doit accéder à Container Registry dans un autre projet, vous devez accorder des autorisations au compte de service de la VM.

  1. Dans le projet comportant votre instance de VM, déterminez le nom du compte de service par défaut de Compute Engine ou du compte de service que vous avez associé à l'instance de VM. Le compte de service par défaut comporte le suffixe @developer.gserviceaccount.com.

  2. Dans le projet avec Container Registry, accordez des autorisations pour que le compte de service puisse accéder à Container Registry.

Configurer les niveaux d'accès pour les VM

Pour définir des niveaux d'accès lors de la création d'une VM, utilisez l'option --scopes.

gcloud compute instances create INSTANCE --scopes=SCOPE

  • INSTANCE est le nom de l'instance de VM.
  • SCOPE correspond au niveau d'accès que vous souhaitez configurer pour le compte de service de VM :
    • Extraire des images : storage-ro
    • Extraire et stocker des images : storage-rw
    • Pour extraire et stocker des images, exécutez la commande gcloud : cloud-platform

Pour modifier les niveaux d'accès d'une instance de VM existante :

Définissez le niveau d'accès avec l'option - scopes.

  1. Arrêtez l'instance de VM. Consultez la section Arrêter une instance.

  2. Modifiez le niveau d'accès à l'aide de la commande suivante.

    gcloud compute instances set-service-account INSTANCE --scopes=SCOPE
    

    • INSTANCE est le nom de l'instance de VM.
    • SCOPE correspond au niveau d'accès que vous souhaitez configurer pour le compte de service de VM :
      • Extraire des images : storage-ro
      • Extraire et stocker des images : storage-rw
      • Pour extraire et stocker des images, exécutez la commande gcloud : cloud-platform
  3. Redémarrez l'instance de VM. Consultez la section Démarrer une instance arrêtée.

Configurer des niveaux d'accès pour les clusters Google Kubernetes Engine

Par défaut, les clusters GKE sont créés avec des autorisations en lecture seule pour les buckets Cloud Storage.

Pour définir le niveau d'accès à l'espace de stockage read-write lors de la création d'un cluster Google Kubernetes Engine, utilisez l'option --scopes. Par exemple, la commande suivante crée un cluster avec les niveaux d'accès bigquery, storage-rw et compute-ro :

gcloud container clusters create example-cluster \
--scopes=bigquery,storage-rw,compute-ro

Pour plus d'informations sur les niveaux d'accès que vous pouvez définir lors de la création d'un cluster, reportez-vous à la documentation de la commande gcloud container clusters create.