Configurer le contrôle des accès

Cette page décrit comment accorder des autorisations aux dépôts Artifact Registry.

Avant de commencer

  1. Activez Artifact Registry et l'API puis installez le SDK Cloud.
  2. Créez les dépôts pour vos packages si vous souhaitez appliquer des autorisations spécifiques aux dépôts.

Présentation

Artifact Registry est entièrement intégré aux services Google Cloud pour la mise en œuvre d'un pipeline CI/CD, et comporte des autorisations par défaut afin de minimiser les efforts de configuration. Vous pouvez également intégrer Artifact Registry à des outils CI/CD tiers et configurer les autorisations et l'authentification requises pour accéder aux dépôts.

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.

Intégration à Google Cloud

Par défaut, les autorisations suivantes s'appliquent aux services Google Cloud CI/CD dans le même projet que Artifact Registry :

Si tous vos services appartiennent au même projet Google Cloud et que les autorisations par défaut répondent à vos besoins, vous n'avez pas besoin de configurer des autorisations.

Vous devez configurer les autorisations d'Artifact Registry pour ces services dans les cas suivants :

  • Vous souhaitez utiliser ces services pour accéder à Artifact Registry dans un autre projet. Dans le projet avec Artifact Registry, accordez au compte de service le rôle requis pour chaque service.
  • Vous utilisez une version de GKE qui n'est pas compatible avec l'extraction d'images de Artifact Registry. Consultez la section GKE pour obtenir des instructions de configuration.
  • Vous souhaitez que le compte de service par défaut dispose d'un accès en lecture et en écriture aux dépôts. Pour en savoir plus, consultez les informations suivantes :
  • Vous utilisez un compte de service personnalisé pour vos environnements d'exécution plutôt que le compte de service par défaut. Dans le projet avec Artifact Registry, accordez à votre compte de service le rôle requis.

Intégration tierce

Pour les clients tiers, vous devez configurer les autorisations et 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 CI/CD.
  2. Accordez le rôle Artifact Registry approprié au compte de service afin de fournir l'accès au dépôt.
  3. Configurez votre client tiers pour l'authentification auprès d'Artifact Registry.

Rôles et autorisations

Accordez une autorisation Identity and Access Management (IAM) en accordant un rôle qui inclut l'autorisation. Utilisez les rôles Artifact Registry pour contrôler l'accès à vos dépôts. Vous pouvez accorder des autorisations au niveau du projet ou du dépôt.

Bien que vous puissiez utiliser les rôles de base Owner, Editor et Viewer pour accorder l'accès aux dépôts, l'utilisation des rôles Artifact Registry vous permet 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.

Autorisations Artifact Registry

Le tableau ci-dessous répertorie les rôles IAM Artifact Registry et les autorisations associées :

Rôle Description Autorisations
roles/artifactregistry.reader Lecteur Artifact Registry

Afficher et obtenir des artefacts

  • artifactregistry.repositories.list
  • artifactregistry.repositories.get
  • artifactregistry.repositories.downloadArtifacts
  • artifactregistry.files.list
  • artifactregistry.files.get
  • artifactregistry.packages.list
  • artifactregistry.packages.get
  • artifactregistry.tags.list
  • artifactregistry.tags.get
  • artifactregistry.versions.list
  • artifactregistry.versions.get
roles/artifactregistry.writer Rédacteur Artifact Registry

Lire et écrire des artefacts

Toutes les autorisations roles/artifactregistry.reader et :

  • artifactregistry.repositories.uploadArtifacts
  • artifactregistry.tags.create
  • artifactregistry.tags.update
roles/artifactregistry.repoAdmin Administrateur de dépôts Artifact Registry

Lire, écrire et supprimer des artefacts

Toutes les autorisations roles/artifactregistry.writer et :

  • artifactregistry.repositories.deleteArtifacts
  • artifactregistry.packages.delete
  • artifactregistry.projectsettings.update
  • artifactregistry.tags.delete
  • artifactregistry.versions.delete
roles/artifactregistry.admin Administrateur Artifact Registry

Créer et gérer des dépôts et des artefacts

Toutes les autorisations roles/artifactregistry.repoAdmin et :

  • artifactregistry.repositories.create
  • artifactregistry.repositories.update
  • artifactregistry.repositories.delete
  • artifactregistry.repositories.getIamPolicy
  • artifactregistry.repositories.setIamPolicy

Le tableau suivant répertorie les rôles de base qui existaient avant IAM et les rôles IAM Artifact Registry qu'ils incluent :

Rôle Nom du rôle Inclus le rôle
roles/viewer Lecteur roles/artifactregistry.reader
roles/editor Éditeur roles/artifactregistry.writer
roles/owner Propriétaire
  • roles/artifactregistry.repoAdmin
  • roles/artifactregistry.admin

Accorder des autorisations

Accordez des autorisations au niveau du projet si les mêmes autorisations s'appliquent à tous les dépôts du projet. Si certains comptes nécessitent différents niveaux d'accès, attribuez des rôles au niveau du dépôt.

Si vous attribuez des rôles à l'aide de la commande gcloud, vous pouvez spécifier une liaison de rôle unique pour un membre ou utiliser un fichier de stratégie pour définir plusieurs liaisons.

Le modèle de règle de référence suivant est utilisé pour les exemples de cette page. Le fichier des règles de référence s'appelle policy.yaml. Le modèle contient des exemples de noms d'utilisateur et de compte de service. Remplacez ces exemples d'utilisateurs et de comptes de service appropriés pour votre projet.

Pour en savoir plus sur le format d'une stratégie, consultez la documentation sur la stratégie IAM.

bindings:

- members:
  - user: user@gmail.com
  role: roles/owner

- members:
  - serviceAccount: repo-readonly@iam.gserviceaccount.com
  - user: user2@gmail.com
  role: roles/artifactregistry.reader

- members:
  - serviceAccount: repo-write@iam.gserviceaccount.com
  role: roles/artifactregistry.writer

- members:
  - serviceAccount: repo-admin@iam.gserviceaccount.com
  role: roles/artifactregistry.repoAdmin

- members:
  - serviceAccount: ar-admin@iam.gserviceaccount.com
  role: roles/artifactregistry.admin

Accorder des autorisations à l'échelle du projet

Accordez un rôle au niveau du projet si les mêmes autorisations s'appliquent à tous les dépôts du projet.

Pour ajouter un membre de l'équipe à un projet et lui attribuer un rôle Artifact Registry:

Console

  1. Ouvrez la page IAM dans Cloud Console.

    Ouvrir la page IAM

  2. Cliquez sur Sélectionner un projet, choisissez le projet dans lequel Artifact Registry est en cours d'exécution, puis cliquez sur Ouvrir.

  3. Cliquez sur Ajouter.

  4. Saisissez une adresse e-mail. Vous pouvez ajouter des personnes, des comptes de service ou des groupes Google en tant que membres. Pour utiliser les fonctionnalités alpha dans Cloud Console, les membres doivent appartenir au groupe d'utilisateurs alpha : ar-trusted-testers@googlegroups.com.

  5. Sélectionnez un rôle pour le membre. Conformément au principe de sécurité du moindre privilège, envisagez d'accorder le moindre privilège pour empêcher tout accès indésirable à d'autres ressources.

  6. Cliquez sur Enregistrer.

gcloud

Pour accorder un rôle à un seul membre, exécutez la commande suivante :

gcloud projects add-iam-policy-binding PROJECT --member=MEMBER --role=ROLE

Où :

  • PROJECT est l'ID du projet dans lequel Artifact Registry est en cours d'exécution.
  • MEMBER correspond au membre pour lequel vous souhaitez ajouter la liaison. Utilisez le formulaire user|group|serviceAccount:email ou domain:domain.

    Exemples : user:test-user@gmail.com, group:admins@example.com, serviceAccount:test123@example.domain.com ou domain:example.domain.com.

  • ROLE est le rôle que vous souhaitez accorder.

Pour en savoir plus, consultez la documentation sur add-iam-policy-binding.

Pour attribuer des rôles à l'aide d'un fichier de stratégie, exécutez la commande suivante :

gcloud projects set-iam-policy PROJECT /PATH/TO/policy.yaml

Où :

  • PROJECT est l'ID du projet ou l'identifiant complet du projet dans lequel Artifact Registry est en cours d'exécution.
  • /PATH/TO/policy.yaml est le chemin d'accès et le nom du fichier de stratégie.

Pour obtenir la stratégie actuellement configurée, exécutez la commande suivante :

gcloud projects get-iam-policy PROJECT

PROJECT est l'ID du projet ou à l'identifiant complet du projet.

Pour en savoir plus, consultez la documentation sur set-iam-policy.

Accorder des autorisations spécifiques au dépôt

Accordez des autorisations au niveau du dépôt lorsque vous souhaitez que les utilisateurs ou les comptes de service disposent de différents niveaux d'accès pour chaque dépôt de votre projet.

Console

Pour accorder l'accès à un dépôt spécifique, procédez comme suit :

  1. Ouvrez la page Dépôts dans Cloud Console.

    Ouvrir la page "Dépôts"

  2. Sélectionnez le dépôt approprié.

  3. Si le panneau d'informations ne s'affiche pas, cliquez sur Afficher le panneau d'informations dans la barre de menu.

  4. Dans l'onglet Autorisations cliquez sur Ajouter un membre.

  5. Saisissez une adresse e-mail. Vous pouvez ajouter des personnes, des comptes de service ou des Google Groupes en tant que membres. Pour utiliser les fonctionnalités alpha dans Cloud Console, les membres doivent appartenir au groupe d'utilisateurs alpha : ar-trusted-testers@googlegroups.com.

  6. Sélectionnez un rôle pour le membre. Nous recommandons d'accorder le moins de privilèges possible aux membres.

  7. Cliquez sur Enregistrer.

gcloud

Vous pouvez définir un ensemble IAM de liaisons de stratégies individuelles ou utiliser un fichier de stratégie.

Pour accorder un rôle à un seul membre, exécutez la commande suivante :

gcloud artifacts repositories add-iam-policy-binding REPOSITORY \
--location LOCATION --member=MEMBER --role=ROLE

Où :

  • REPOSITORY est l'ID du dépôt.
  • MEMBER correspond au membre pour lequel vous souhaitez ajouter la liaison. Utilisez le formulaire user|group|serviceAccount:email ou domain:domain.

    Exemples : user:test-user@gmail.com, group:admins@example.com, serviceAccount:test123@example.domain.com ou domain:example.domain.com.

  • ROLE est le rôle que vous souhaitez accorder.

  • LOCATION est l'emplacement régional ou multirégional du dépôt.

Par exemple, pour ajouter une liaison de stratégie IAM pour le rôle roles/artifactregistry.writer de l'utilisateur write@gmail.com avec le dépôt my-repo à l'emplacement --us-central1, exécutez la commande suivante :

gcloud artifacts repositories add-iam-policy-binding my-repo \
 --location=us-central1 --member=user:write@gmail.com --role=roles/artifactregistry.writer

Pour attribuer des rôles à l'aide d'un fichier de stratégie, exécutez la commande suivante :

gcloud artifacts repositories set-iam-policy REPOSITORY /PATH/TO/policy.yaml --location=LOCATION

Où :

  • REPOSITORY est l'ID du dépôt.
  • /PATH/TO/policy.yaml est le chemin d'accès et le nom du fichier de stratégie.
  • LOCATION est l'emplacement régional ou multirégional du dépôt.

Par exemple, pour définir la stratégie IAM du dépôt my-repo à l'emplacement --us-central1 avec la stratégie définie dans policy.yaml, exécutez la commande suivante :

gcloud artifacts repositories set-iam-policy my-repo policy.yaml --location=us-central1

Terraform

Pour en savoir plus sur l'utilisation de Terraform pour provisionner des dépôts et accorder des autorisations de dépôt, consultez la section Intégrer à Terraform.

Configurer l'accès public à un dépôt

Si vous possédez des artefacts que vous souhaitez rendre accessibles à tous les internautes sans authentification, stockez-les dans un dépôt que vous rendez public.

Pour configurer un dépôt pour un accès en lecture seule, accordez le rôle de lecteur Artifact Registry au membre allUsers. Nous vous recommandons également de plafonner les quotas de requêtes utilisateur pour qu'un seul utilisateur ne puisse pas dépenser le quota global de votre projet.

Console

  1. Ouvrez la page Dépôts dans Cloud Console.

    Ouvrir la page "Dépôts"

  2. Sélectionnez le dépôt approprié.

  3. Si le panneau d'informations ne s'affiche pas, cliquez sur Afficher le panneau d'informations dans la barre de menu.

  4. Dans l'onglet Autorisations cliquez sur Ajouter un membre.

  5. Dans le champ Nouveaux membres, saisissez allUsers.

  6. Sélectionnez le rôle Lecteur Artifact Registry.

  7. Définissez une limite par utilisateur pour les requêtes API Artifact Registry afin d'éviter toute utilisation abusive par des utilisateurs non authentifiés. Pour en savoir plus, consultez la section Limiter l'utilisation des ressources.

gcloud

  1. Exécutez la commande suivante :

    gcloud artifacts repositories add-iam-policy-binding REPOSITORY \
    --location=LOCATION --member=allUsers --role=ROLE
    

    Où :

    • REPOSITORY est l'ID du dépôt.
    • MEMBER correspond au membre pour lequel vous souhaitez ajouter la liaison. Utilisez le formulaire user|group|serviceAccount:email ou domain:domain.

      Exemples : user:test-user@gmail.com, group:admins@example.com, serviceAccount:test123@example.domain.com ou domain:example.domain.com.

    • ROLE est le rôle que vous souhaitez accorder.

    • LOCATION est l'emplacement régional ou multirégional du dépôt.

    Par exemple, configurez le dépôt my-repo à l'emplacement --us-central1 en tant qu'emplacement public en exécutant la commande suivante :

    gcloud artifacts repositories add-iam-policy-binding my-repo \
     --location=us-central1 --member=allUsers --role=roles/artifactregistry.reader
    
  2. Définissez une limite par utilisateur pour les requêtes API Artifact Registry afin d'éviter toute utilisation abusive par des utilisateurs non authentifiés. Pour en savoir plus, consultez la section Limiter l'utilisation des ressources.

Révoquer des autorisations

Pour révoquer l'accès à un dépôt, supprimez le membre de la liste des membres autorisés.

Pour supprimer l'accès public d'un dépôt, supprimez le membre allUsers.

Console

Pour révoquer des autorisations :

  1. Ouvrez la page Dépôts dans Cloud Console.

    Ouvrir la page "Dépôts"

  2. Sélectionnez le dépôt approprié.

  3. Si le panneau d'informations ne s'affiche pas, cliquez sur Afficher le panneau d'informations dans la barre de menu.

  4. Dans l'onglet "Autorisations", développez la liste des membres appropriés. Si vous rendez privé un dépôt public, développez le membre allUsers.

  5. Cliquez sur Supprimer le membre pour révoquer l'accès.

gcloud

Pour révoquer un rôle au niveau du projet, exécutez la commande suivante :

gcloud projects remove-iam-policy-binding PROJECT --member=MEMBER --role=ROLE
  • PROJECT est l'ID de projet.
  • MEMBER est le membre pour lequel vous souhaitez supprimer la liaison. Utilisez le formulaire user|group|serviceAccount:email ou domain:domain.

    Exemples : user:test-user@gmail.com, group:admins@example.com, serviceAccount:test123@example.domain.com ou domain:example.domain.com.

  • ROLE est le rôle que vous souhaitez révoquer.

Pour révoquer un rôle dans un dépôt, exécutez la commande suivante :

gcloud artifacts repositories remove-iam-policy-binding REPOSITORY --member=MEMBER --role=ROLE

Où :

  • REPOSITORY est l'ID du dépôt.
  • MEMBER est le membre pour lequel vous souhaitez supprimer la liaison. Utilisez le formulaire user|group|serviceAccount:email ou domain:domain.

    Exemples : user:test-user@gmail.com, group:admins@example.com, serviceAccount:test123@example.domain.com ou domain:example.domain.com.

    Pour révoquer l'accès public au dépôt, spécifiez le membre allUsers.

  • ROLE est le rôle que vous souhaitez révoquer.

Par exemple, pour supprimer une liaison de stratégie pour le rôle roles/artifactregistry.writer de l'utilisateur write@gmail.com avec le dépôt my-repo à l'emplacement --us-central1, exécutez la commande suivante:

gcloud artifacts repositories remove-policy-binding my-repo \
 --location=us-central1 --member=user:write@gmail.com --role=roles/artifactregistry.writer

Pour révoquer l'accès public à my-repo à l'emplacement --us-central1, exécutez la commande suivante :

gcloud artifacts repositories remove-policy-binding my-repo \
 --location=us-central1 --member=allUsers --role=roles/artifactregistry.reader
 

Accorder l'accès aux instances Compute Engine

Les instances de VM qui accèdent aux dépôts doivent disposer des autorisations Artifact Registry et avoir le niveau d'accès à l'espace de stockage configuré.

Alors que le niveau d'accès d'un compte de service est déterminé par les rôles IAM qui lui sont attribués, les niveaux d'accès d'une instance de VM déterminent les champs d'application OAuth par défaut pour les requêtes effectuées via les outils gcloud et les bibliothèques clientes sur l'instance. 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.

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. L'adresse e-mail associée au compte de service comporte le suffixe @developer.gserviceaccount.com.

Bien que les autorisations de l'éditeur accordent généralement un accès en écriture, le niveau d'accès read-only limite le compte de service de l'instance à télécharger uniquement les artefacts appartenant aux dépôts d'un même projet.

Vous devez configurer le niveau d'accès du compte de service dans les cas suivants :

  • Le compte de service de VM doit accéder à un dépôt dans un autre projet.
  • Le compte de service de VM doit effectuer des actions autres que la lecture d'artefacts à partir de dépôts. Cela permet généralement d'appliquer des outils tiers sur une VM qui doit transférer des images ou exécuter des commandes gcloud Artifact Registry.

Pour configurer les autorisations et définir le niveau d'accès :

  1. Dans le projet contenant votre instance de VM, obtenez le nom du compte de service Compute Engine par défaut. L'adresse e-mail associée au compte de service comporte le suffixe @developer.gserviceaccount.com.

  2. Dans le projet contenant le dépôt, accordez des autorisations pour que le compte de service puisse accéder au dépôt.

  3. 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. Définissez le niveau d'accès à l'aide de la commande suivante 

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

      Remplacez SCOPE par la valeur appropriée.

      • Pour Docker, les options suivantes sont acceptées :

        • storage-ro : accorde un accès en lecture pour obtenir des images uniquement.
        • storage-rw : accorde un accès en lecture et en écriture pour le transfert ou l'extraction d'images.
        • cloud-platform : consultez et gérez les données, y compris les métadonnées, dans l'ensemble du service Google Cloud.
      • Pour les autres formats, vous devez utiliser le niveau d'accès cloud-platform.

    3. Redémarrez l'instance de VM. Consultez la section Démarrer une instance arrêtée.

Accorder l'accès aux clusters Google Kubernetes Engine

Les clusters GKE peuvent extraire des conteneurs sans aucune configuration supplémentaire si toutes les conditions suivantes sont remplies :

Si votre environnement GKE ne répond pas à ces exigences, les instructions pour accorder l'accès varient selon que vous utilisez le compte de service Compute Engine par défaut ou un compte de service personnalisé en tant qu'identité pour vos nœuds.

Compte de service par défaut

Les exigences de configuration suivantes s'appliquent au compte de service Compute Engine par défaut :

  1. Pour stocker des images, interagir avec des dépôts pour d'autres formats que des conteneurs ou exécuter des commandes gcloud depuis votre cluster, vous devez définir des niveaux d'accès pour le compte de service lors de la création cluster.

  2. Si GKE se trouve dans un projet différent de celui qui contient Artifact Registry, accordez les autorisations requises au compte de service.

  3. Si vous n'utilisez pas une version compatible de GKE, configurez imagePullSecrets.

Définir des niveaux d'accès

Pour spécifier un niveau d'accès lors de la création d'un cluster, exécutez la commande suivante :

gcloud container clusters create CLUSTER-NAME --scopes=SCOPE

Où :

CLUSTER-NAME est le nom du cluster. SCOPE est un champ d'application qui correspond à vos besoins :

  • Pour les dépôts Docker, choisissez l'une des options suivantes :

    • storage-ro : accorde un accès en lecture pour obtenir des images uniquement.
    • storage-rw : accorde un accès en lecture et en écriture pour le transfert ou l'extraction d'images.
    • cloud-platform : consultez et gérez les données, y compris les métadonnées, dans l'ensemble du service Google Cloud.
  • Pour les autres dépôts, vous devez utiliser le niveau d'accès cloud-platform.

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.

Configurer imagePullSecret

Pour configurer un objet imagePullSecret :

  1. Dans le projet avec GKE, recherchez le compte de service Compute Engine par défaut. L'adresse e-mail associée au compte comporte le suffixe @developer.gserviceaccount.com.

  2. Téléchargez la clé de compte de service pour le compte de service.

  3. Dans le projet contenant le dépôt, vérifiez que vous avez accordé les autorisations appropriées.

  4. Dans le projet contenant votre cluster, créez un secret imagePullSecret appelé artifact-registry avec la clé de compte de service.

    kubectl create secret docker-registry artifact-registry \
    --docker-server=https://LOCATION-docker.pkg.dev \
    --docker-email=SERVICE-ACCOUNT-EMAIL \
    --docker-username=_json_key \
    --docker-password="$(cat KEY-FILE)"
    

    Où :

    • LOCATION est l'emplacement régional ou multirégional du dépôt.
    • SERVICE-ACCOUNT-EMAIL est l'adresse e-mail associée au compte de service Compute Engine.
    • KEY-FILE est le nom du fichier de clé de votre compte de service. Exemple : key.json.
  5. Ouvrez votre compte de service par défaut :

    kubectl edit serviceaccount default --namespace default

    Chaque espace de noms de votre cluster Kubernetes possède un compte de service par défaut appelé default. Ce compte de service par défaut est utilisé pour extraire votre image de conteneur.

  6. Ajoutez le secret nouvellement créé imagePullSecret à votre compte de service par défaut :

    imagePullSecrets:
    - name: artifact-registry
    

    Votre compte de service doit maintenant se présenter comme suit :

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: default
      namespace: default
      ...
    secrets:
    - name: default-token-zd84v
    # The secret you created:
    imagePullSecrets:
    - name: artifact-registry
    

Désormais, tout pod créé dans l'espace de noms default actuel sera associé au secret imagePullSecret.

Configurer un compte de service personnalisé

Pour les clusters qui utilisent un compte de service personnalisé comme identité, vous devez accorder les autorisations requises au compte de service du projet Google Cloud dans lequel Artifact Registry est en cours d'exécution.

Compte de service Artifact Registry

L'agent de service Artifact Registry est un compte de service géré par Google qui agit pour le compte d'Artifact Registry lors des interactions avec les services Google Cloud. Pour en savoir plus sur le compte et ses autorisations, consultez la section Compte de service Artifact Registry.

Étape suivante

Une fois les autorisations configurées, découvrez comment utiliser vos artefacts.