Tags et accès conditionnel

Cette page explique comment utiliser les tags avec IAM (Identity and Access Management) pour vous aider à contrôler l'accès à vos ressources Google Cloud.

Pour en savoir plus sur les tags, consultez la page Présentation des tags.

Présentation des tags

Un tag est une paire clé-valeur associée à une ressource Google Cloud. Vous pouvez attribuer des rôles IAM de manière conditionnelle ou refuser l'autorisation IAM de manière conditionnelle selon qu'une ressource est associée à un tag spécifique ou non.

Les ressources héritent des valeurs de tag de leur organisation, de leurs dossiers et de leur projet parents. Par conséquent, vous pouvez utiliser des tags pour gérer l'accès à n'importe quelle ressource Google Cloud.

Voici quelques cas d'utilisation courants de la gestion des accès avec des tags :

  • Environnements de développement, de préproduction et de production. Par exemple, vous pouvez ajouter les tags environment: dev à votre environnement de développement et environment: prod à votre environnement de production.
  • Types de composants. Par exemple, vous pouvez ajouter les tags component: frontend aux ressources frontend et component: batch aux ressources pour le traitement par lot.
  • Noms de projet. Par exemple, si votre équipe travaille sur un projet avec le nom de code Atlas, vous pouvez ajouter le tag project: atlas aux ressources de développement de l'équipe.

Définitions et identifiants de tags

Avant d'associer des tags à des ressources, vous devez définir leur clé ainsi que les valeurs autorisées par le tag. Vous pouvez créer ces définitions au niveau de l'organisation ou du projet. Vous devez utiliser Resource Manager pour gérer les définitions de tags. Pour en savoir plus, consultez la page Créer et définir un nouveau tag.

Chaque clé et chaque valeur de tag ont des identifiants différents :

  • Un ID permanent, qui est unique et ne peut jamais être réutilisé. Par exemple, l'ID permanent d'une clé de tag peut être tagKeys/123456789012 et l'ID permanent d'une valeur de tag peut être tagValues/567890123456.
  • Un nom court. Le nom court de chaque clé doit être unique dans le projet ou l'organisation dans laquelle elle est définie, et le nom court de chaque valeur doit être unique pour la clé associée. Par exemple, une clé de tag peut avoir le nom court env et une valeur de tag peut avoir le nom court prod.
  • Un nom d'espace de noms, qui ajoute l'ID numérique de votre organisation ou de votre projet au nom court d'une clé de tag. Par exemple, une clé de tag créée pour une organisation peut avoir le nom d'espace de noms 123456789012/env. Pour savoir comment obtenir votre ID d'organisation, consultez la section Obtenir l'ID de ressource de votre organisation. Une clé de tag créée pour un projet peut avoir le nom d'espace de noms myproject/env. Pour savoir comment obtenir votre ID de projet, consultez Identifier des projets.

Comme expliqué sur la présente page, après avoir associé des tags à une ressource, vous pouvez écrire des conditions pour accorder l'accès sur la base de ces tags. Pour écrire une condition, vous devez choisir le type d'identifiant à utiliser dans la condition. Pour ce faire, suivez les instructions ci-dessous :

  • Pour expérimenter avec les tags, envisagez d'utiliser le nom d'espace de noms (pour les clés) et le nom court (pour les valeurs). Ces identifiants sont plus faciles à comprendre et à retenir, en particulier lorsque vous débutez.
  • Si vous gérez votre configuration de manière déclarative, à l'aide d'un outil tel que Terraform, envisagez d'utiliser le nom d'espace de noms (pour les clés) et le nom court (pour les valeurs). Vous pouvez réutiliser ces identifiants dans le temps. Cela signifie qu'un outil déclaratif peut les supprimer et les recréer sans que vos conditions n'arrêtent de fonctionner.

    Cette approche s'accompagne d'un compromis : supposons que vous supprimiez une clé ou une valeur de tag, puis que vous créiez une clé ou une valeur portant le même nom, mais avec un sens différent. Si votre condition fait référence au nom d'espace de noms ou au nom court, la condition continue de s'appliquer à la nouvelle clé ou valeur.

    Dans certains cas, ce comportement peut permettre à des comptes principaux d'accéder à des contenus auxquels vous ne souhaitez pas qu'ils aient accès.

  • Pour réduire les risques, pensez à utiliser des ID permanents qui ne pourront jamais être réutilisés.

    Voici pourquoi les ID permanents permettent de minimiser les risques : supposons que vous supprimiez une clé ou une valeur de tag, puis que vous créiez une clé ou une valeur portant le même nom, mais avec un sens différent. Si votre condition fait référence à l'ID permanent, elle ne s'applique pas à la nouvelle clé ou valeur. Par conséquent, les comptes principaux sont moins susceptibles d'obtenir l'accès à des informations auxquelles vous ne souhaitez pas qu'ils aient accès.

    L'un des inconvénients est que, lorsque vous supprimez et recréez des clés et des valeurs alors que vous souhaitez conserver l'accès des comptes principaux, vous devez également mettre à jour vos stratégies d'autorisation pour faire référence aux nouveaux ID permanents.

Accès aux ressources taguées

Vous pouvez utiliser des tags avec des conditions IAM pour accorder un rôle de manière conditionnelle, en fonction des tags associés à une ressource ou hérités. Si une condition renvoie true, l'accès est accordé. Sinon, l'accès n'est pas accordé. Pour en savoir plus, consultez la présentation des conditions IAM.

Les sections suivantes présentent des exemples d'expressions de condition qui vérifient les tags d'une ressource. La condition appelle différentes fonctions selon qu'elle vérifie l'ID permanent ou le nom court. Pour en savoir plus sur ces fonctions, consultez la page Tags de ressources.

Conditions utilisant des ID permanents

Cette condition accorde un rôle sur les ressources associées au tag tagKeys/123456789012: tagValues/567890123456 :

resource.matchTagId('tagKeys/123456789012', 'tagValues/567890123456')

Cette condition accorde un rôle sur les ressources associées à un tag avec la clé tagKeys/123456789012, quelle que soit sa valeur :

resource.hasTagKeyId('tagKeys/123456789012')

Cette condition accorde un rôle sur les ressources qui possèdent à la fois le tag tagKeys/123456789012: tagValues/567890123456 et tout tag utilisant la clé tagKeys/987654321098 :

resource.matchTagId('tagKeys/123456789012', 'tagValues/567890123456') &&
    resource.hasTagKeyId('tagKeys/987654321098')

Conditions utilisant des noms d'espaces de noms et des noms courts

Cette condition accorde un rôle sur les ressources associées au tag env: prod, qui indique que la ressource se trouve dans un environnement de production :

resource.matchTag('123456789012/env', 'prod')

Cette condition accorde un rôle sur les ressources associées à un tag avec la clé env, quelle que soit sa valeur :

resource.hasTagKey('123456789012/env')

Cette condition accorde un rôle sur les ressources qui possèdent à la fois le tag env: prod et tout tag utilisant la clé project :

resource.matchTag('123456789012/env', 'prod') &&
    resource.hasTagKey('123456789012/project')

Étape suivante