Définir une règle d'administration avec des tags

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.

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.

La plupart des règles d'administration sont évaluées et appliquées lors de la création ou de la mise à jour d'une ressource. Il n'est pas possible d'associer un tag à une ressource avant qu'elle ne soit créée. Par conséquent, les règles d'administration conditionnelles ne peuvent pas évaluer les tags d'une ressource au moment de sa création, mais uniquement sur les tags hérités des ressources parentes.

Les tags sont évalués pour les ressources d'organisation, de dossier et de projet. La plupart des ressources situées sous les projets situés sous les projets dans la hiérarchie des ressources ne sont pas évaluées par les règles d'administration, à quelques exceptions près, telles que les services Cloud Run. Pour en savoir plus sur les contraintes liées aux règles d'administration, consultez la page Contraintes liées aux règles d'administration.

Exemple de règle de liste

L'exemple suivant montre comment définir un fichier de règle d'administration qui applique la contrainte 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 :

  1. Dans la console Google Cloud, accédez à la page Règles d'administration.

    Accéder à la page Règles d'administration

  2. Dans le sélecteur de projet, choisissez le projet pour lequel vous souhaitez définir la règle d'administration.

  3. Sur la page Règles d'administration, sélectionnez une contrainte dans la liste. La page Détails de la règle correspondant à cette contrainte s'affiche.

  4. Pour mettre à jour la règle d'administration pour cette ressource, cliquez sur Gérer la règle.

  5. Sur la page Modifier la règle, sélectionnez Remplacer la règle parente.

  6. 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.

  7. Cliquez sur Add rule (Ajouter une règle).

  8. 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.

  9. Pour rendre la règle d'administration conditionnelle sur un tag, cliquez sur Ajouter une condition.

    1. Dans le champ Titre, saisissez un nom pour la condition.

    2. 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.

    3. 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.

      1. Dans la zone Type de condition, sélectionnez Balise.

      2. Sélectionnez l'opérateur correspondant à votre condition. Pour mettre en correspondance un tag entier, utilisez l'opérateur matches. Pour mettre en correspondance une clé de tag et une valeur de tag, utilisez l'opérateur matches ID.

      3. Si vous avez sélectionné l'opérateur matches, saisissez la valeur de l'espace de noms du tag. Si vous avez sélectionné l'opérateur matches ID, saisissez les ID de clé et de valeur.

      4. 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.

      5. Vous pouvez supprimer une expression en cliquant sur le grand X à droite des champs de condition.

      6. Lorsque vous avez terminé de modifier vos conditions, cliquez sur Enregistrer.

      La figure suivante montre un exemple de configuration d'une règle d'administration incluant des conditions.

      Exemple d'interface utilisateur des conditions de règles d'administration.

    4. 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.

      1. 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 tag us-west1.
  10. Pour appliquer la règle, cliquez sur Définir la règle.

gcloud

Pour définir la règle d'administration, exécutez la commande suivante :

gcloud org-policies set-policy POLICY_PATH

POLICY_PATH est le chemin d'accès complet au fichier JSON de votre règle d'administration, qui doit ressembler à ceci :

{
  "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"]
        }
      }
    ]
  }
}

Où :

  • RESOURCE_TYPE est organizations, folders ou projects.

  • RESOURCE_ID correspond à l'ID de l'organisation, à l'ID du dossier, à l'ID du projet ou au numéro du projet, en fonction du type de ressource spécifié dans RESOURCE_TYPE.

  • ORGANIZATION_ID est l'organisation parente de votre clé de tag.

Pour la règle d'administration ci-dessus, la contrainte 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 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 un fichier de règle d'administration qui applique la contrainte 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 :

  1. Dans la console Google Cloud, accédez à la page Règles d'administration.

    Accéder à la page Règles d'administration

  2. Dans le sélecteur de projet, choisissez le projet pour lequel vous souhaitez définir la règle d'administration.

  3. 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.

  4. Pour mettre à jour la règle d'administration pour cette ressource, cliquez sur Gérer la règle.

  5. Sur la page Modifier la règle, sélectionnez Remplacer la règle parente.

  6. Cliquez sur Ajouter une règle.

  7. Sous Application, indiquez si l'application de cette règle d'administration doit être activée ou désactivée.

  8. 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 non conditionnelle, sinon la règle ne pourra pas être enregistrée.

    1. Dans le champ Titre, saisissez un nom pour la condition.

    2. 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.

    3. 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.

      1. Dans la zone Type de condition, sélectionnez Balise.

      2. Sélectionnez l'opérateur correspondant à votre condition. Pour mettre en correspondance un tag entier, utilisez l'opérateur matches. Pour mettre en correspondance une clé de tag et une valeur de tag, utilisez l'opérateur matches ID.

      3. Si vous avez sélectionné l'opérateur matches, saisissez la valeur de l'espace de noms du tag. Si vous avez sélectionné l'opérateur matches ID, saisissez les ID de clé et de valeur.

      4. 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.

      5. Vous pouvez supprimer une expression en cliquant sur le grand X à droite des champs de condition.

      6. Lorsque vous avez terminé de modifier vos conditions, cliquez sur Enregistrer.

      7. Une règle d'administration pour laquelle une condition est appliquée ne doit comporter qu'une seule règle non conditionnelle. 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.

      La figure suivante montre un exemple de configuration d'une règle d'administration incluant des conditions.

      Exemple d'interface utilisateur des conditions de règles d'administration.

    4. 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.

      1. 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 tag us-west1.
  9. Pour terminer et appliquer la règle d'administration, cliquez sur Enregistrer.

gcloud

Pour définir la règle d'administration, exécutez la commande suivante :

gcloud org-policies set-policy POLICY_PATH

POLICY_PATH est le chemin d'accès complet au fichier JSON de votre règle d'administration, qui doit ressembler à ceci :

{
  "name": "RESOURCE_TYPE/RESOURCE_ID/policies/gcp.disableSerialPortAccess",
  "spec": {
    "rules": [
      {
        "condition": {
          "expression": "resource.matchTag(\"ORGANIZATION_ID/disableSerialAccess\", \"yes\")"
        },
        "enforce": true
      },
      {
        "enforce": false
      }
    ]
  }
}

Où :

  • RESOURCE_TYPE est organizations, folders ou projects.

  • RESOURCE_ID correspond à l'ID de l'organisation, à l'ID du dossier, à l'ID du projet ou au numéro du projet.

  • ORGANIZATION_ID est l'organisation parente de votre clé de tag.

Pour la règle d'administration ci-dessus, la contrainte gcp.disableSerialPortAccess est appliquée à la ressource et à toutes ses ressources enfants. Toutes les ressources qui comportent le tag disableSerialAccess: yes seront refusées par la règle d'administration. La contrainte n'est pas appliquée à une ressource qui n'est pas associée au tag disableSerialAccess: yes.

Ajouter des contraintes conditionnelles à la règle d'administration

Vous pouvez utiliser des tags pour ajouter des contraintes de règle d'administration à des ressources de manière conditionnelle en fonction des tags qui sont associés aux ressources. 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 la contrainte 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

ORGANIZATION_ID est l'organisation parente de votre clé de tag.

Dans l'exemple ci-dessus, 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

Limiter les ressources sans tag

Vous pouvez utiliser des tags et des règles d'administration conditionnelles pour limiter les ressources qui n'utilisent pas un tag particulier. Si vous définissez une règle d'administration sur une ressource qui restreint les services et la conditionner à la présence d'un tag, aucune ressource enfant descendant de cette ressource ne peut être utilisée sans tag. De cette manière, les ressources doivent être configurées conformément à votre plan de gouvernance avant de pouvoir être utilisées.

Pour limiter les ressources d'organisation, de dossier ou de projet sans tag, vous pouvez utiliser l'opérateur logique ! dans une requête conditionnelle lors de la création de votre règle d'administration.

Par exemple, pour autoriser l'utilisation de sqladmin.googleapis.com uniquement dans les projets associés au tag sqladmin=enabled, vous pouvez créer une règle d'administration qui refuse sqladmin.googleapis.com sur les projets qui n'ont pas le tag sqladmin=enabled.

  1. Créez un tag qui détermine si la gouvernance appropriée a été appliquée aux ressources. Par exemple, vous pouvez créer un tag avec la clé sqlAdmin et la valeur enabled pour indiquer que cette ressource doit autoriser l'utilisation de l'API Cloud SQL Admin. Exemple :

    Créer une clé et une valeur de tag

  2. Cliquez sur le nom du tag que vous venez de créer. Dans les étapes suivantes, vous aurez besoin du nom d'espace de noms de la clé de tag, indiqué sous Chemin de la clé de tag, pour créer une condition.

  3. Créez une règle d'administration Limiter l'utilisation des services de ressources au niveau de la ressource d'organisation pour refuser l'accès à l'API Cloud SQL Admin. Exemple :

    Créer une règle d'administration pour restreindre les ressources

  4. Ajoutez une condition à la règle d'administration ci-dessus, en spécifiant que la règle est appliquée en l'absence du tag de gouvernance. L'opérateur logique NOT n'est pas compatible avec le générateur de conditions. Cette condition doit donc être intégrée dans l'éditeur de conditions. Exemple :

    Créer une règle d'administration conditionnelle

    !resource.matchTag("012345678901/sqlAdmin", "enabled")

Désormais, le tag sqlAdmin=enabled doit être associé à un projet ou hérité par celui-ci pour que vos développeurs puissent utiliser l'API Cloud SQL Admin avec ce projet.

Héritage des règles d'administration

Les contraintes liées à la liste des règles d'administration qui sont 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 booléennes liées aux règles d'administration qui sont 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 la contrainte 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.