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 Artifact Analysis pour travailler avec des métadonnées de conteneur, telles que des failles détectées dans des images, consultez la documentation d'Artifact Analysis pour en savoir plus sur l'autorisation d'affichage ou de gestion des métadonnées.
Avant de commencer
Vérifiez que vous disposez des autorisations nécessaires pour gérer les utilisateurs. Vous devez disposer des autorisations dans l'un des rôles suivants:
- Administrateur de projet IAM (roles/resourcemanager.projectIamAdmin)
- Administrateur de sécurité (roles/iam.securityAdmin)
Au lieu d'attribuer ces rôles, vous pouvez utiliser un rôle personnalisé ou un rôle prédéfini avec les mêmes autorisations.
Autorisations et rôles
Tous les utilisateurs, comptes de service et autres identities qui interagissent avec Container Registry doivent disposer des autorisations IAM (Identity and Access Management) appropriées pour Cloud Storage.
- Les services Google Cloud qui accèdent généralement à Container Registry sont configurés avec les autorisations par défaut des registres du même projet Google Cloud. Si les autorisations par défaut ne répondent pas à vos besoins, vous devez configurer les autorisations appropriées.
- Pour les autres identités, vous devez configurer les autorisations requises.
Vous contrôlez l'accès aux hôtes Container Registry avec des autorisations Cloud Storage. Le tableau suivant répertorie les rôles Cloud Storage disposant des autorisations requises par Container Registry.
D'autres autorisations sont requises lorsque vous affichez des images Container Registry à l'aide de la console Google Cloud. Consultez la section Autorisations courantes requises pour utiliser la console Cloud.
Accès requis | Rôle | Où accorder des autorisations |
---|---|---|
Extraire des images (lecture seule) d'un registre existant | Lecteur des objets Storage (roles/storage.objectViewer) | Accordez le rôle sur le bucket de stockage du registre. |
Transférer (écrire) des images vers et extraire (lire) des images à partir d'un hôte de registre existant dans un projet | Rédacteur des anciens buckets de l'espace de stockage (roles/storage.legacyBucketWriter) | Accordez le rôle sur le bucket de stockage du registre. Cette autorisation n'est disponible qu'au niveau du bucket. Vous ne pouvez pas l'accorder au niveau du projet. |
Ajouter des hôtes de registre aux projets Google Cloud et créer les buckets de stockage associés | Administrateur de l'espace de stockage (roles/storage.admin) | Attribuer le rôle au niveau du projet |
Le transfert d'images nécessite des autorisations de lecture et d'écriture sur les objets, ainsi que l'autorisation storage.buckets.get
. Le rôle "Rédacteur des anciens buckets de l'espace de stockage" inclut les autorisations requises dans un seul rôle Cloud Storage, mais n'accorde pas le contrôle total des buckets et des objets de stockage.
Le rôle "Administrateur de l'espace de stockage" offre un contrôle complet sur les buckets et les objets de stockage. Si vous accordez cette autorisation au niveau du projet, le compte principal a accès à tous les buckets de stockage du projet, y compris aux buckets qui ne sont pas utilisés par Container Registry. Réfléchissez bien aux comptes principaux qui ont besoin de ce rôle.
- Par défaut, le compte de service Cloud Build dispose d'autorisations dans le rôle "Administrateur de l'espace de stockage". Ce compte de service peut donc ajouter des registres à son projet parent avec les premières images push et push d'images dans les registres existants de son projet parent.
- Si vous utilisez Docker ou d'autres outils pour créer et transférer des images vers un registre, envisagez d'ajouter des registres à votre projet à l'aide d'un compte doté du rôle d'administrateur de l'espace de stockage plus permissif, puis attribuez les rôles "Rédacteur des anciens buckets de l'espace de stockage" ou "Lecteur des objets Storage" aux autres comptes qui doivent transférer ou extraire des images.
Pour en savoir plus sur les rôles et les autorisations Cloud Storage, consultez la documentation de Cloud Storage.
Accorder 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 au bucket pour un registre.
Le premier transfert d'image vers un nom d'hôte ajoute l'hôte de registre et son bucket de stockage à un projet. Par exemple, le premier transfert vers gcr.io/my-project
ajoute l'hôte de registre gcr.io
au projet avec l'ID de projet
my-project
et crée un bucket de stockage pour le registre. Le nom du bucket utilise l'un des formats suivants:
artifacts.PROJECT-ID.appspot.com
pour les images stockées sur l'hôtegcr.io
STORAGE-REGION.artifacts.PROJECT-ID.appspot.com
pour les images stockées sur d'autres hôtes de registre
Pour réussir le transfert de cette première image, le compte qui effectue le transfert doit disposer des autorisations du rôle Administrateur de l'espace de stockage.
Une fois l'image initiale transférée sur un hôte de registre, vous accordez des autorisations au bucket de stockage du registre pour contrôler l'accès aux images dans le registre:
- Rédacteur des anciens buckets Storage pour le transfert et l'extraction
- Lecteur des objets Storage pour extraire uniquement
Vous pouvez accorder des autorisations sur un bucket à l'aide de la console Google Cloud ou de l'outil de ligne de commande gsutil
.
Limites et restrictions
Vous ne pouvez accorder des autorisations qu'au niveau du bucket de stockage pour les hôtes Container Registry.
- Container Registry ignore les autorisations définies sur des objets individuels dans un bucket Cloud Storage.
- Vous ne pouvez pas accorder d'autorisations sur des dépôts au sein d'un registre. Si vous avez besoin d'un contrôle des accès plus précis, Artifact Registry fournit un contrôle des accès au niveau du dépôt et peut mieux répondre à vos besoins.
- Si vous activez l'accès uniforme au niveau du bucket pour un bucket de stockage Container Registry, vous devez explicitement accorder des autorisations à tous les utilisateurs et comptes de service qui accèdent à vos registres. Dans ce cas, les rôles Propriétaire et Éditeur peuvent ne pas accorder eux-mêmes les autorisations requises.
Octroyer des autorisations
Si l'hôte de registre n'existe pas encore dans le projet, un compte disposant des autorisations du rôle Administrateur de l'espace de stockage doit transférer la première image vers le registre. Cette opération crée le bucket de stockage pour l'hôte du registre.
Cloud Build dispose des autorisations nécessaires pour effectuer le transfert de l'image initiale dans le même projet. Si vous transférez des images avec un autre outil, vérifiez les autorisations du compte Google Cloud que vous utilisez pour vous authentifier auprès de Container Registry.
Pour en savoir plus sur le transfert de l'image initiale avec Docker, consultez la section Ajouter un registre.
Dans le projet associé à Container Registry, accordez les autorisations appropriées sur le bucket Cloud Storage utilisé par l'hôte du registre.
Console
- Accédez à la page Cloud Storage dans la console Google Cloud.
Cliquez sur le lien
artifacts.PROJECT-ID.appspot.com
ouSTORAGE-REGION.artifacts.PROJECT-ID.appspot.com
correspondant au bucket.Remplacez PROJECT-ID par l'ID du projet Google Cloud du projet qui héberge Container Registry et STORAGE-REGION par l'emplacement multirégional (
asia
,eu
ouus
) du registre hébergeant l'image.Sélectionnez l'onglet Autorisations.
Cliquez sur Ajouter.
Dans le champ Comptes principaux, saisissez les adresses e-mail des comptes nécessitant un accès, en les séparant par une virgule. Voici les types d'adresses e-mail possibles :
- Un compte Google (par exemple,
someone@example.com
) - Groupe Google (par exemple,
my-developer-team@googlegroups.com
) Un compte de service IAM.
Consultez la liste des services Google Cloud qui accèdent généralement aux registres pour trouver l'adresse e-mail du compte de service associé. Si le service s'exécute dans un projet différent de celui de Container Registry, veillez à utiliser l'adresse e-mail du compte de service de l'autre projet.
- Un compte Google (par exemple,
Dans le menu déroulant Sélectionner un rôle, sélectionnez la catégorie Cloud Storage, puis sélectionnez l'autorisation appropriée.
- Lecteur des objets de l'espace de stockage pour extraire des images uniquement
- Rédacteur des anciens buckets Storage pour transférer et extraire des images
Cliquez sur Ajouter.
gsutil
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]/ ...
Recherchez le bucket de l'hôte du registre dans la liste de buckets renvoyée. Le bucket qui stocke vos images porte le nom BUCKET-NAME sous l'une des formes suivantes:
artifacts.PROJECT-ID.appspot.com
pour les images stockées sur l'hôtegcr.io
STORAGE-REGION.artifacts.PROJECT-ID.appspot.com
pour les images stockées sur d'autres hôtes de registre
Où
- PROJECT-ID est l'ID de votre projet Google Cloud.
- STORAGE-REGION correspond à l'emplacement du bucket de stockage :
us
pour les registres de l'hôteus.gcr.io
eu
pour les registres de l'hôteeu.gcr.io
asia
pour les registres de l'hôteasia.gcr.io
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
Où
- TYPE peut être l'une des valeurs suivantes :
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 :
- Un compte Google (par exemple,
someone@example.com
) - Groupe Google (par exemple,
my-developer-team@googlegroups.com
) Un compte de service IAM.
Consultez la liste des services Google Cloud qui accèdent généralement aux registres pour trouver l'adresse e-mail du compte de service associé. Si le service s'exécute dans un projet différent de celui de Container Registry, veillez à utiliser l'adresse e-mail du compte de service de l'autre projet.
- Un compte Google (par exemple,
ROLE est le rôle Cloud Storage que vous souhaitez accorder.
objectViewer
pour extraire des imageslegacyBucketWriter
: push et image
BUCKET_NAME est le nom du bucket Cloud Storage au format
artifacts.PROJECT-ID.appspot.com
ouSTORAGE-REGION.artifacts.PROJECT-ID.appspot.com
- TYPE peut être l'une des valeurs suivantes :
Par exemple, cette commande accorde au compte de service
my-account@my-project.iam.gserviceaccount.com
les autorisations nécessaires pour transférer et extraire des images dans le bucketmy-example-bucket
:gsutil iam ch \ serviceAccount:my-account@my-project.iam.gserviceaccount.com:legacyBucketWriter \ gs://my-example-bucket
La commande
gsutil iam ch
modifie les autorisations IAM du bucket de stockage dans lequel le registre est hébergé. Vous trouverez des exemples supplémentaires dans la documentation gsutil.Si vous configurez l'accès pour des VM Compute Engine ou des nœuds GKE qui envoient des images à Container Registry, consultez la page Configurer des VM et des clusters pour obtenir des étapes de configuration supplémentaires.
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 stocker les 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 :
Assurez-vous d'avoir transféré une image vers Container Registry afin que le bucket de stockage sous-jacent existe.
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
ougs://STORAGE-REGION.artifacts.PROJECT-ID.appspot.com
, où :- PROJECT-ID est l'ID de votre projet Google Cloud. Dans les projets à l'échelle du domaine, le nom de domaine figure dans l'ID du projet.
- STORAGE-REGION correspond à l'emplacement du bucket de stockage :
us
pour les registres de l'hôteus.gcr.io
eu
pour les registres de l'hôteeu.gcr.io
asia
pour les registres de l'hôteasia.gcr.io
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.
Supprimer l'accès public aux images
Console
Assurez-vous d'avoir transféré une image vers Container Registry afin que le bucket de stockage sous-jacent existe.
Ouvrez la page Container Registry dans la console Google Cloud.
Dans le panneau de gauche, cliquez sur Paramètres.
Sur la page Paramètres, sous Accès public, définissez la visibilité sur Privé. Ce paramètre contrôle l'accès au bucket de stockage sous-jacent.
gsutil
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
ougs://STORAGE-REGION.artifacts.PROJECT-ID.appspot.com
, où :- PROJECT-ID est l'ID du projet dans la console Google Cloud. Dans les projets à l'échelle du domaine, le nom de domaine figure dans l'ID du projet.
- STORAGE-REGION correspond à l'emplacement du bucket de stockage :
us
pour les registres de l'hôteus.gcr.io
eu
pour les registres de l'hôteeu.gcr.io
asia
pour les registres de l'hôteasia.gcr.io
Pour supprimer l'accès public à votre bucket de stockage, exécutez la commande suivante dans votre interface système ou votre fenêtre de terminal:
gsutil iam ch -d allUsers:objectViewer gs://BUCKET-NAME
où :
BUCKET-NAME
est le nom du bucket souhaité.
Révoquer des autorisations
Pour révoquer des autorisations IAM, procédez comme suit :
Console
- Accédez à la page Cloud Storage dans la console Google Cloud.
Cliquez sur le lien
artifacts.PROJECT-ID.appspot.com
ouSTORAGE-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
, ouus
) du registre qui héberge l'image.Sélectionnez l'onglet Autorisations.
Cliquez sur l'icône Corbeille à côté du compte principal 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 PRINCIPAL gs://BUCKET-NAME
où :
- PRINCIPAL peut être l'une des valeurs suivantes :
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é.
Integrate with Google Cloud services
Pour la plupart des comptes de service Google Cloud, la configuration de l'accès à un registre ne nécessite que l'attribution des autorisations IAM appropriées.
Autorisations par défaut pour les services Google Cloud
Les services Google Cloud tels que Cloud Build ou Google Kubernetes Engine utilisent un compte de service par défaut ou géré par Google pour interagir avec les ressources d'un même projet.
Vous devez configurer ou modifier vous-même les autorisations dans les cas suivants :
- Le service Google Cloud se trouve dans un projet différent de celui de Container Registry.
- Les autorisations par défaut ne répondent pas à vos besoins. Par exemple, le compte de service Compute Engine par défaut dispose d'un accès en lecture seule à l'espace de stockage du même projet. Si vous souhaitez transférer une image de la VM vers un registre, vous devez modifier les autorisations du compte de service de la VM ou vous authentifier auprès du registre avec un compte disposant d'un accès en écriture à l'espace de stockage.
- Vous utilisez un compte de service personnalisé pour interagir avec Container Registry.
Les comptes de service suivants accèdent généralement à Container Registry. L'adresse e-mail du compte de service inclut l'ID ou le numéro de projet Google Cloud du projet dans lequel le service est exécuté.
Service | Compte de service | Adresse e-mail | Autorisations |
---|---|---|---|
Environnement flexible App Engine | Compte de service App Engine par défaut | PROJECT-ID@appspot.gserviceaccount.com | Éditeur, peut lire et écrire dans l'espace de stockage |
Compute Engine | Compte de service Compute Engine par défaut | PROJECT-NUMBER-compute@developer.gserviceaccount.com | Rôle d'éditeur, limité à l'accès en lecture seule à l'espace de stockage |
Cloud Build | Compte de service Cloud Build | PROJECT-NUMBER@cloudbuild.gserviceaccount.com | Les autorisations par défaut incluent la création de buckets de stockage, ainsi que l'accès en lecture et en écriture à l'espace de stockage. |
Cloud Run | Compte de service Compute Engine par défaut Compte de service d'exécution par défaut pour les révisions. |
PROJECT-NUMBER-compute@developer.gserviceaccount.com | Rôle d'éditeur, limité à l'accès en lecture seule à l'espace de stockage |
GKE | Compte de service Compute Engine par défaut Compte de service par défaut pour les nœuds. |
PROJECT-NUMBER-compute@developer.gserviceaccount.com | Rôle d'éditeur, limité à l'accès en lecture seule à l'espace de stockage |
Configurer des VM et des clusters pour transférer des images
Compute Engine et tout service Google Cloud utilisant Compute Engine disposent d'un compte de service Compute Engine par défaut comme identité par défaut.
Les autorisations IAM et les niveaux d'accès ont un impact sur la capacité des VM à lire et à écrire dans l'espace de stockage.
- Les autorisations IAM déterminent l'accès aux ressources.
- Les niveaux d'accès déterminent les champs d'application OAuth par défaut pour les requêtes effectuées via la gcloud CLI 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 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 transférer des images privées, le compte de service de VM doit disposer du niveau d'accès
read-write
,cloud-platform
oufull-control
au bucket de stockage de l'image.
- Pour extraire une image privée, le compte de service de la VM doit disposer de l'autorisation
Le compte de service Compute Engine par défaut dispose du rôle Éditeur par défaut, qui inclut des autorisations permettant de créer et de mettre à jour des ressources pour la plupart des services Google Cloud. Toutefois, pour le compte de service par défaut ou pour un compte de service personnalisé que vous associez à une VM, le niveau d'accès par défaut aux buckets de stockage est en lecture seule. Cela signifie que par défaut, les VM ne peuvent pas transférer d'images.
Si vous avez uniquement l'intention de déployer des images dans des environnements tels que Compute Engine et GKE, vous n'avez pas besoin de modifier le niveau d'accès. Si vous souhaitez exécuter dans ces environnements des applications qui transfèrent des images vers le registre, vous devez effectuer une configuration supplémentaire.
Les configurations suivantes nécessitent de modifier la configuration des autorisations IAM 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 disposer du niveau d'accès
storage-rw
au lieu destorage-ro
. - La VM et Container Registry se trouvent dans des projets distincts
- Vous devez accorder au compte de service des autorisations IAM pour 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 commandesgcloud
.
Les étapes de configuration des niveaux d'accès se trouvent dans les sections suivantes.
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
Où
- INSTANCE est le nom de l'instance de VM.
- SCOPE est le champ d'application 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
- Extraire des images :
Pour modifier les niveaux d'accès d'une instance de VM existante :
Définissez le niveau d'accès avec l'option - scopes.
Arrêtez l'instance de VM. Consultez la section Arrêter une instance.
Modifiez le niveau d'accès à l'aide de la commande suivante.
gcloud compute instances set-service-account INSTANCE --scopes=SCOPE
Où
- INSTANCE est le nom de l'instance de VM.
- SCOPE est le champ d'application 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
- Extraire des images :
Redémarrez l'instance de VM. Consultez la section Démarrer une instance arrêtée.
Si vous souhaitez utiliser un compte de service personnalisé pour les VM au lieu du compte de service par défaut, vous pouvez spécifier le compte de service et les niveaux d'accès à utiliser lorsque vous créez la VM ou modifiez les paramètres de la VM.
Configurer les 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.
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. Le compte de service dispose de l'ensemble minimal d'autorisations requises si vous avez activé l'API Container Registry après le 5 octobre 2020. Le compte de service disposait précédemment du rôle Éditeur. Pour en savoir plus sur le compte et sur la modification de ses autorisations, consultez la section Compte de service Container Registry.
Faites l'essai
Si vous débutez sur Google Cloud, créez un compte pour évaluer les performances de Container Registry en conditions réelles. Les nouveaux clients bénéficient également de 300 $ de crédits pour exécuter, tester et déployer des charges de travail.
Profiter d'un essai gratuit de Container Registry