Les tags permettent d'autoriser ou de refuser des règles de manière conditionnelle selon qu'une ressource possède un tag spécifique ou non. Vous pouvez utiliser des tags et l'application conditionnelle des règles d'administration pour fournir un contrôle centralisé des ressources de votre hiérarchie.
Avant de commencer
Pour en savoir plus sur les tags et leur fonctionnement, consultez la page Présentation des tags.
Pour obtenir des instructions détaillées sur l'utilisation des tags, consultez la page Créer et gérer des tags.
Rôles requis
Pour obtenir les autorisations nécessaires pour gérer des règles d'administration, demandez à votre administrateur de vous accorder le rôle IAM Administrateur des règles d'administration (roles/orgpolicy.policyAdmin) dans l'organisation.
Pour en savoir plus sur l'attribution de rôles, consultez Gérer l'accès aux projets, aux dossiers et aux organisations.
Vous pouvez également obtenir les autorisations requises avec des rôles personnalisés ou d'autres rôles prédéfinis.
Vous pouvez déléguer l'administration des règles d'administration d'administration en ajoutant des conditions IAM à la liaison de rôle "Administrateur des règles d'administration". Pour contrôler les ressources sur lesquelles un compte principal peut gérer les règles d'administration, vous pouvez rendre l'association de rôle conditionnelle à un tag spécifique. Pour en savoir plus, consultez Utiliser des contraintes.
Définir une règle d'administration avec des tags
Pour utiliser des tags afin de déterminer où une règle d'administration doit prendre effet, vous devez spécifier une condition dans le fichier YAML de règle d'administration. Vous pouvez définir la condition pour qu'elle corresponde à une paire clé/valeur de tag spécifique, ce qui nécessite la définition d'une valeur de tag spécifique pour que la règle d'administration soit appliquée.
Vous pouvez également définir la condition pour qu'elle corresponde à une clé de tag. Cela vous permet d'activer ou de désactiver l'application de la contrainte à toutes les ressources associées à cette clé de tag, quelle que soit la valeur de tag associée.
La plupart des règles d'administration sont évaluées et appliquées lorsqu'une ressource est créée ou mise à jour. Les tags obligatoires peuvent être utilisés pour régir les ressources à mesure qu'elles sont créées.
Exemple de règle de liste
L'exemple suivant montre comment définir une règle d'administration qui applique l'ancienne contrainte gérée gcp.resourceLocations. Cette règle d'administration utilise des valeurs conditionnelles et inconditionnelles définies dans le même fichier de règle.
Console
Pour définir la règle d'administration, procédez comme suit :
Dans la console Google Cloud , accédez à la page Règles d'administration.
Dans le sélecteur de projets, choisissez le projet pour lequel vous souhaitez définir la règle d'administration.
Sur la page Règles d'administration, sélectionnez une contrainte dans la liste. La page Détails de la règle associée à cette contrainte s'affiche.
Pour mettre à jour la règle d'administration pour cette ressource, cliquez sur Gérer la règle.
Sur la page Modifier la stratégie, sélectionnez Ignorer la règle parente.
Sous Application des règles, sélectionnez une option d'application :
Pour fusionner et évaluer vos règles d'administration ensemble, sélectionnez Fusionner avec le parent. Pour en savoir plus sur l'héritage et la hiérarchie des ressources, consultez la page Comprendre le processus d'évaluation hiérarchique.
Pour remplacer les règles héritées d'une ressource parente, sélectionnez Remplacer.
Cliquez sur Add rule (Ajouter une règle).
Sous Valeurs de règlement, indiquez si cette règle d'administration doit autoriser toutes les valeurs, refuser toutes les valeurs ou spécifier un ensemble personnalisé de valeurs.
- Les valeurs spécifiques acceptées par la règle dépendent du service auquel la règle s'applique. Pour obtenir la liste des contraintes et des valeurs acceptées, consultez la page Contraintes liées aux règles d'administration.
Pour rendre la règle d'administration conditionnelle sur un tag, cliquez sur Ajouter une condition.
Dans le champ Titre, saisissez un nom pour la condition.
Dans le champ Description, saisissez une description pour votre condition. La description fournit du contexte sur les tags requis ainsi que sur leur impact sur les ressources.
Vous pouvez utiliser le Créateur de conditions pour créer une condition nécessitant un tag particulier pour que la contrainte soit prise en compte.
Dans la zone Type de condition, sélectionnez Tag.
Sélectionnez l'opérateur correspondant à votre condition.
Pour mettre en correspondance un tag entier, utilisez l'opérateur has value avec le nom d'espace de noms du tag, ou l'opérateur has value ID avec les ID de clé et de valeur du tag.
Pour ne mettre en correspondance que la clé de tag, utilisez l'opérateur has key avec le nom d'espace de noms de la clé de tag, ou l'opérateur has key ID avec l'ID de la clé de tag.
Vous pouvez créer plusieurs conditions en cliquant sur Ajouter. Si vous ajoutez une autre condition, vous pouvez définir la logique conditionnelle pour qu'elle exige que toutes les conditions soient satisfaites en activant Et. Vous pouvez définir la logique conditionnelle pour exiger qu'au moins une des conditions soit satisfaite en activant Or.
Vous pouvez supprimer une expression en cliquant sur le grand X à droite des champs de condition.
Lorsque vous avez terminé de modifier vos conditions, cliquez sur Enregistrer.
L'éditeur de conditions peut être utilisé pour créer une expression conditionnelle par programmation. Il affiche également un rendu automatisé de votre ensemble de conditions actuel.
L'expression conditionnelle doit inclure entre 1 et 10 sous-expressions, jointes par les opérateurs
||ou&&. Chaque sous-expression doit être l'une des fonctions suivantes :"resource.matchTag('KEY_NAME', 'VALUE_SHORT_NAME')"Remplacez les éléments suivants :
KEY_NAMEpar le nom avec espace de noms de la clé de tag. Exemple :123456789012/envVALUE_SHORT_NAMEpar le nom abrégé de la valeur du tag. Exemple :prod
Par exemple :
resource.matchTag('123456789012/environment, 'prod')"resource.matchTagId('KEY_ID', 'VALUE_ID')"Remplacez les éléments suivants :
KEY_IDpar l'ID permanent de la clé de tag. Exemple :tagKeys/123456789012VALUE_IDpar l'ID permanent de la valeur du tag. Exemple :tagValues/567890123456
Par exemple :
resource.matchTagId('tagKeys/123456789012', 'tagValues/567890123456')"resource.hasTagKey('KEY_NAME')"Remplacez
KEY_NAMEpar le nom avec espace de noms de la clé de tag. Exemple :123456789012/envPar exemple :
resource.matchTag('123456789012/environment, 'prod')"resource.hasTagKeyId('KEY_ID')"Remplacez
KEY_IDpar l'ID permanent de la clé de tag. Exemple :tagKeys/123456789012Par exemple :
resource.matchTagId('tagKeys/123456789012')
- Vous pouvez utiliser l'éditeur de conditions pour appliquer l'opérateur logique
!. Par exemple, la requête!resource.matchTag('ORGANIZATION_ID/location', 'us-west1')applique la contrainte de règle d'administration à toute ressource ne comportant pas le tagus-west1.
Pour appliquer la règle, cliquez sur Définir la règle.
gcloud
Pour définir la règle d'administration, créez un fichier YAML pour la stocker :
name: RESOURCE_TYPE/RESOURCE_ID/policies/gcp.resourceLocations
spec:
rules:
# As there is no condition specified, this allowedValue is enforced unconditionally.
- values:
allowedValues:
- us-east1-locations
# This condition applies to the values block.
- condition:
expression: "resource.matchTag('ORGANIZATION_ID/location', 'us-west1')"
values:
allowedValues:
- us-west1-locations
Vous pouvez faire correspondre un tag entier à la condition à l'aide de l'opérateur resource.matchTag avec le nom du tag incluant l'espace de noms.
Pour ne mettre en correspondance que la clé de tag, utilisez l'opérateur resource.hasTagKey avec le nom d'espace de noms de la clé de tag. Pour mettre en correspondance n'importe quelle valeur de tag pour une clé de tag donnée, utilisez l'opérateur resource.hasTagKeyID avec l'ID de clé de tag.
Exécutez la commande set-policy :
gcloud org-policies set-policy POLICY_PATH
Remplacez les éléments suivants :
POLICY_PATH: chemin d'accès complet au fichier YAML de votre règle d'administrationRESOURCE_TYPE:organizations,foldersouprojectsRESOURCE_ID: ID de l'organisation, ID du dossier, ID du projet ou numéro du projet, selon le type de ressource spécifié dansRESOURCE_TYPEORGANIZATION_ID: organisation parente de votre clé de tag.
Pour cette règle d'administration, la contrainte gérée héritée gcp.resourceLocations est appliquée à la ressource et à toutes ses ressources enfants, avec le champ allowedValues défini sur us-east1-locations uniquement. La contrainte gérée héritée gcp.resourceLocations est appliquée à toutes les ressources associées au tag location: us-west1, avec le champ allowedValues défini sur us-east1-locations et us-west1-locations.
De cette manière, les ensembles de valeurs conditionnels et inconditionnels peuvent être appliqués pour une contrainte dans une seule règle d'administration.
Exemple de règle booléenne
L'exemple suivant montre comment définir une règle d'administration qui applique l'ancienne contrainte gérée compute.disableSerialPortAccess. Cette règle d'administration spécifie que tous les ports série sont accessibles aux ressources, mais utilise une condition pour limiter l'accès au port série uniquement aux ressources portant le tag correspondant.
Console
Pour définir la règle d'administration, procédez comme suit :
Dans la console Google Cloud , accédez à la page Règles d'administration.
Dans le sélecteur de projets, choisissez le projet pour lequel vous souhaitez définir la règle d'administration.
Sélectionnez une contrainte dans la liste de la page Règles d'administration. La page Détails de la règle associée à cette contrainte doit s'afficher.
Pour mettre à jour la règle d'administration pour cette ressource, cliquez sur Gérer la règle.
Sur la page Modifier la stratégie, sélectionnez Ignorer la règle parente.
Cliquez sur Ajouter une règle.
Sous Application, indiquez si l'application de cette règle d'administration doit être activée ou désactivée.
Pour rendre la règle d'administration conditionnelle sur un tag, cliquez sur Ajouter une condition. Notez que si vous ajoutez une règle conditionnelle à une règle d'administration, vous ne devez ajouter qu'une seule règle inconditionnelle, sinon la règle ne pourra pas être enregistrée.
Dans le champ Titre, saisissez un nom pour la condition.
Dans le champ Description, saisissez une description pour votre condition. La description fournit du contexte sur les tags requis ainsi que sur leur impact sur les ressources.
Vous pouvez utiliser le Créateur de conditions pour créer une condition nécessitant un tag particulier pour que la contrainte soit prise en compte.
Dans la zone Type de condition, sélectionnez Tag.
Sélectionnez l'opérateur correspondant à votre condition.
Pour mettre en correspondance un tag entier, utilisez l'opérateur has value avec le nom d'espace de noms du tag, ou l'opérateur has value ID avec les ID de clé et de valeur du tag.
Pour ne mettre en correspondance que la clé de tag, utilisez l'opérateur has key avec le nom d'espace de noms de la clé de tag, ou l'opérateur has key ID avec l'ID de la clé de tag.
Vous pouvez créer plusieurs conditions en cliquant sur Ajouter. Si vous ajoutez une autre condition, vous pouvez définir la logique conditionnelle pour qu'elle exige que toutes les conditions soient satisfaites en activant Et. Vous pouvez définir la logique conditionnelle pour exiger qu'au moins une des conditions soit satisfaite en activant Or.
Vous pouvez supprimer une expression en cliquant sur le grand X à droite des champs de condition.
Lorsque vous avez terminé de modifier vos conditions, cliquez sur Enregistrer.
Une règle d'administration avec une condition appliquée ne doit comporter qu'une seule règle inconditionnelle. Cliquez sur Ajouter une règle, et indiquez si l'application de cette règle d'administration doit être activée ou désactivée par défaut.
L'éditeur de conditions peut être utilisé pour créer une expression conditionnelle par programmation. Il affiche également un rendu automatisé de votre ensemble de conditions actuel.
L'expression conditionnelle doit inclure entre 1 et 10 sous-expressions, jointes par les opérateurs
||ou&&. Chaque sous-expression doit être l'une des formes suivantes :"resource.matchTag('KEY_NAME', 'VALUE_SHORT_NAME')"Remplacez les éléments suivants :
KEY_NAMEpar le nom avec espace de noms de la clé de tag. Exemple :123456789012/envVALUE_SHORT_NAMEpar le nom abrégé de la valeur du tag. Exemple :prod
"resource.matchTagId('KEY_ID', 'VALUE_ID')"Remplacez les éléments suivants :
KEY_IDpar l'ID permanent de la clé de tag. Exemple :tagKeys/123456789012VALUE_IDpar l'ID permanent de la valeur du tag. Exemple :tagValues/567890123456
- Vous pouvez utiliser l'éditeur de conditions pour appliquer l'opérateur logique
!. Par exemple, la requête!resource.matchTag('ORGANIZATION_ID/location', 'us-west1')applique la contrainte de règle d'administration à toute ressource ne comportant pas le tagus-west1.
Pour terminer et appliquer la règle d'administration, cliquez sur Enregistrer.
gcloud
Pour définir la règle d'administration, créez un fichier YAML pour la stocker :
name: RESOURCE_TYPE/RESOURCE_ID/policies/gcp.disableSerialPortAccess
spec:
rules:
- condition:
expression: "resource.matchTag('ORGANIZATION_ID/disableSerialAccess', 'yes')"
enforce: true
- enforce: false
Vous pouvez faire correspondre un tag entier à la condition à l'aide de l'opérateur resource.matchTag avec le nom du tag incluant l'espace de noms.
Pour ne mettre en correspondance que la clé de tag, utilisez l'opérateur resource.hasTagKey avec le nom d'espace de noms de la clé de tag. Pour mettre en correspondance n'importe quelle valeur de tag pour une clé de tag donnée, utilisez l'opérateur resource.hasTagKeyID avec l'ID de clé de tag.
Exécutez la commande set-policy :
gcloud org-policies set-policy POLICY_PATH
Remplacez les éléments suivants :
POLICY_PATH: chemin d'accès complet au fichier YAML de votre règle d'administrationRESOURCE_TYPE:organizations,foldersouprojectsRESOURCE_ID: ID de votre organisation, ID de dossier, ID de projet ou numéro de projetORGANIZATION_ID: organisation parente de votre clé de tag.
Pour cette règle d'administration, la contrainte gérée ancienne gcp.disableSerialPortAccess est appliquée à la ressource et à toutes ses ressources enfants. Toutes les ressources qui comportent le tag disableSerialAccess: yes sont refusées par la règle d'administration. La contrainte gérée héritée n'est pas appliquée à une ressource qui n'est pas associée au tag disableSerialAccess: yes.
Ajouter des règles conditionnelles à la règle d'administration
Vous pouvez utiliser des tags pour ajouter des règles de contrainte à des ressources de manière conditionnelle en fonction des tags qui leur sont associés. Vous pouvez ajouter plusieurs conditions au sein de la même règle d'administration, ce qui vous permet de contrôler avec précision les ressources auxquelles vous souhaitez appliquer la règle d'administration.
CEM (Common Expression Language) est le langage d'expression utilisé pour spécifier des expressions conditionnelles. Une expression conditionnelle se compose d'une ou plusieurs instructions qui sont combinées à l'aide d'opérateurs logiques (&&, || ou !). Pour en savoir plus, consultez la spécification CEL et sa définition de langage.
Envisagez de définir une règle d'administration permettant de limiter l'emplacement de création des ressources en fonction des tags appliqués à ces ressources. Pour ce faire, créez une règle d'administration qui applique l'ancienne contrainte gérée gcp.resourceLocations et utilisez des conditions pour limiter son application à certaines ressources.
Commencez par créer un fichier temporaire, /tmp/policy.yaml, pour contenir votre règle d'administration :
name: organizations/ORGANIZATION_ID/policies/gcp.resourceLocations
spec:
rules:
- condition:
expression: "resource.matchTag('ORGANIZATION_ID/location', 'us-east')"
values:
allowedValues:
- in:us-east1-locations
- condition:
expression: "resource.matchTag('ORGANIZATION_ID/location', 'us-west')"
values:
allowedValues:
- in:us-west1-locations
- values:
deniedValues:
- in:asia-south1-locations
Remplacez ORGANIZATION_ID par l'organisation parente de votre clé de tag.
Dans cet exemple, toute ressource associée au tag location: us-east sera limitée aux emplacements du groupe de valeurs us-east1-locations. Toute ressource associée au tag location: us-west sera limitée aux emplacements du groupe de valeurs us-west1-locations. Toutes les ressources de l'organisation seront bloquées dans les emplacements du groupe de valeurs asia-south1-locations.
Ensuite, définissez la règle à l'aide de la commande set-policy :
gcloud org-policies set-policy /tmp/policy.yaml
Restreindre les ressources sans tag
Vous pouvez utiliser des tags et des règles d'administration conditionnelles pour restreindre les ressources qui n'utilisent pas un tag spécifique. Si vous définissez une règle d'administration sur une ressource qui limite les services et la subordonne à la présence d'un tag, aucune ressource enfant issue de cette ressource ne peut être utilisée, sauf si elle a été taguée. De cette façon, les ressources doivent être configurées conformément à votre plan de gouvernance avant de pouvoir être utilisées.
Pour restreindre les ressources d'organisation, de dossier ou de projet non taguées, vous pouvez utiliser l'opérateur logique ! dans une requête conditionnelle lorsque vous créez votre règle d'administration.
Par exemple, pour autoriser l'utilisation de sqladmin.googleapis.com uniquement dans les projets comportant le tag sqladmin=enabled, vous pouvez créer une règle d'administration qui refuse sqladmin.googleapis.com dans les projets ne comportant pas le tag sqladmin=enabled.
Créez un tag qui permet d'identifier si les règles de gouvernance appropriées ont été appliquées aux ressources. Par exemple, vous pouvez créer un tag avec la clé
sqlAdminet la valeurenabledpour indiquer que cette ressource doit autoriser l'utilisation de l'API Cloud SQL Admin. Exemple :
Cliquez sur le nom de la balise nouvellement créée. Vous aurez besoin du nom avec espace de noms de la clé de tag, listé sous Chemin d'accès de la clé de tag, lors des prochaines étapes pour créer une condition.
Créez une règle d'administration Restreindre l'utilisation des services de ressources au niveau de votre ressource d'organisation pour refuser l'accès à l'API Cloud SQL Admin. Exemple :

Ajoutez une condition à la règle d'administration ci-dessus, en précisant que la règle est appliquée si le tag de gouvernance n'est pas présent. L'opérateur logique NOT n'étant pas pris en charge par le générateur de conditions, cette condition doit être créée dans l'éditeur de conditions. Exemple :

!resource.matchTag("012345678901/sqlAdmin", "enabled")
Désormais, le tag sqlAdmin=enabled doit être associé à un projet ou hérité par un projet avant que vos développeurs puissent utiliser l'API Cloud SQL Admin avec ce projet.
Appliquer des tags obligatoires sur les ressources
Vous pouvez appliquer des tags obligatoires aux ressources à l'aide d'une règle d'administration personnalisée. Lorsque vous appliquez des tags obligatoires, vous ne pouvez créer que des ressources conformes aux règles de taggage de votre organisation. Autrement dit, les ressources sont associées aux valeurs de tag pour les clés de tag obligatoires spécifiées dans la règle. Pour en savoir plus, consultez Configurer une contrainte personnalisée pour appliquer des tags.
Héritage des règles d'administration
Les contraintes avec des règles de liste activées à l'aide de tags fusionnent avec la règle d'administration existante, conformément aux règles normales d'héritage. Ces règles conditionnelles ne s'appliquent que si la condition est définie sur "true".
Les contraintes avec des règles booléennes activées à l'aide de tags remplacent la règle d'administration existante. De plus, étant donné que les règles booléennes ne peuvent avoir que deux états, "true" ou "false", toutes les instructions conditionnelles doivent être le contraire de l'instruction sans condition afin d'éviter que plusieurs tags n'entrent en conflit les uns avec les autres.
Par exemple, considérons une règle d'administration qui applique l'ancienne contrainte gérée disableSerialPortAccess. La valeur inconditionnelle, qui est la valeur utilisée si aucune condition ne la remplace, est définie sur "true". Par conséquent, toute autre instruction conditionnelle pour cette règle doit être définie sur "false" pour ne pas créer de conflit.
Étapes suivantes
Pour en savoir plus sur l'utilisation des tags, consultez la page Créer et gérer des tags.
Pour en savoir plus sur la création et la gestion des contraintes de règles d'administration, consultez la section Utiliser des contraintes.