Tags et contrôle d'accès

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

Présentation des tags

Un tag est une paire clé/valeur associée à une organisation, un dossier ou un projet. Vous pouvez accorder des rôles IAM sous certaines conditions selon que votre ressource dispose ou non d'un tag spécifique.

Les autres 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.

Utilisations courantes des tags

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.

Tags et hiérarchie des ressources

Dans Google Cloud, les ressources font partie d'une hiérarchie, et les ressources de niveau inférieur peuvent hériter des propriétés des ressources de niveau supérieur. Les tags sont l'une des propriétés que les ressources peuvent hériter. Par exemple, si vous associez un tag à une organisation, les dossiers, les projets et les ressources spécifiques à cette organisation héritent de ce tag.

Pour éviter que les ressources n'héritent d'une valeur de tag, associez un autre tag à un dossier ou à un projet en utilisant la même clé mais une valeur différente de celle du tag de l'organisation ou du dossier de niveau supérieur. En effet, chaque tag d'une organisation ou d'un dossier fournit une valeur par défaut, et chaque tag associé à une ressource de niveau inférieur, tel qu'un dossier ou un projet, remplace la valeur par défaut.

Par exemple, supposons que vous appliquez le tag environment: dev à un dossier et que le dossier contienne deux dossiers enfants nommés team-a et team-b. Vous pouvez également appliquer un tag différent, environment: test, au dossier team-b. Par conséquent, les ressources du dossier team-a héritent du tag environment: dev, et celles du dossier team-b héritent du tag environment: test :

Si vous supprimez le tag environment: test du dossier team-b, ce dossier et ses ressources hériteront du tag environment: dev.

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. Ces définitions sont liées à votre organisation. 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 au sein de votre organisation, 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 au nom court d'une clé de tag. Par exemple, une clé de tag peut avoir le nom d'espace de noms 123456789012/env. Découvrez comment obtenir l'ID de votre organisation.

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 membres 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 membres 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 membres, vous devez également mettre à jour vos stratégies IAM 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 associées au tag tagKeys/123456789012: tagValues/567890123456 ou à 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 associées au tag env: prod. Elle attribue également un rôle sur les ressources associées à n'importe quel tag utilisant la clé project :

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

Étape suivante