Remplacement des règles gérées

Pour personnaliser le comportement d'un ensemble de règles géré, remplacez-le lors du déploiement. Lorsque vous remplacez un ensemble de règles, vous spécifiez les modifications à exécuter en plus de la configuration par défaut.

Vous pouvez remplacer un ensemble de règles géré aux niveaux suivants :

  • Les substitutions d'ensemble de règles s'appliquent à toutes les règles de l'ensemble de règles exécuté.
  • Les substitutions de balise s'appliquent à toutes les règles avec une balise spécifique. Par exemple, utilisez une substitution de balise pour personnaliser l'ensemble de règles géré CIS de sorte que toutes les règles avec la balise wordpress soient définies sur Bloquer. Si plusieurs balises ont des substitutions et si une règle a plusieurs de ces balises, l'ordre des substitutions de balise détermine le comportement. Pour les règles balisées avec plusieurs balises remplacées, les substitutions de la dernière balise s'appliquent.
  • Les substitutions de règle s'appliquent à des règles spécifiques dans un ensemble de règles géré, référencé par leur ID de règle.

Les substitutions spécifiques sont prioritaires par rapport aux substitutions plus générales, et les substitutions de règle sont prioritaires par rapport aux substitutions de balise, qui sont prioritaires par rapport aux substitutions d'ensemble de règles.

Les substitutions d'ensemble de règles et les substitutions de balise s'appliquent aux règles existantes et futures de l'ensemble de règles géré. Si vous souhaitez remplacer uniquement les règles existantes, vous devez utiliser les substitutions de règle.

Remplacer le flux de travail (API)

Pour appliquer une substitution à un ensemble de règles géré, procédez comme suit.

  1. Répertoriez les jeux de règles disponibles en utilisant l'opération list rulesets.

  2. Liste les règles de cet ensemble de règles en utilisant l'opération get ruleset.

  3. Appelez l'opération de mise à jour d'ensemble de règles sur votre point d'entrée de phase.

  4. Spécifiez les substitutions dans le action_parameters de la règle qui exécute votre ensemble de règles géré.

    "action_parameters": {
      "id": "<RULESET_ID>",
      "overrides": {
        // ruleset overrides
        "property-to-modify": "value",
        "property-to-modify": "value",
        // tag overrides
        "categories": [
          {
            "category": "<TAG_NAME>",
            "property-to-modify": "value",
            "property-to-modify": "value"
          }
        ],
        // rule overrides
        "rules": [
          {
            "id": "<RULE_ID>",
            "property-to-modify": "value",
            "property-to-modify": "value"
          }
        ]
      }
    }
    

Vous pouvez remplacer les propriétés de règle suivantes.

  • "action"
  • "activé"

Certains ensembles de règles gérés peuvent avoir des exigences de substitution supplémentaires ou remplacer d'autres propriétés de règle.

Il n'est pas efficace d'activer toutes les règles d'un ensemble de règles géré au niveau de l'instance en utilisant une substitution. Cette modification peut affecter toutes les zones de votre instance. Certaines règles sont désactivées par défaut car elles affectent éventuellement le trafic légitime. N'activez pas ces règles entre les zones sans considération préalable.

Remplacer les ensembles de règles gérés dans la console

Pour remplacer un jeu de règles géré dans la console, procédez comme suit :

  1. Dans la console CIS, naviguez jusqu'à la section Sécurité.

  2. Sélectionnez l'onglet WAF.

  3. Cliquez sur le nom du jeu de règles que vous souhaitez remplacer.

  4. Dans le panneau latéral Configurer le déploiement, cliquez sur Parcourir les règles.

  5. Dans le panneau latéral Override CIS Managed Ruleset ruleset rules, vous pouvez

    • Sélectionnez une action pour toute règle que vous souhaitez remplacer.
    • Sélectionnez la case à cocher Statut pour activer ou désactiver une règle.
  6. Après avoir reconfiguré les règles de l'ensemble de règles, cliquez sur Continuer.

  7. Vérifiez la liste des règles à remplacer, puis cliquez sur Enregistrer.

    Cliquez sur Réinitialiser les paramètres par défaut pour restaurer les paramètres d’origine.

Répertorier les ensembles de règles gérés à partir de l'interface de ligne de commande

Pour répertorier tous les jeux de règles de zone à partir de l'interface de gestion, exécutez la commande suivante :

ibmcloud cis managed-waf rulesets DNS_DOMAIN_ID [-i, --instance INSTANCE] [--output FORMAT]

Options de commande

DNS_DOMAIN_ID
L'ID du domaine.
-i, --instance value
Le nom ou l'ID de l'instance.
--output value
Spécifie le format de sortie; seul JSON est pris en charge.

Règles de référencement sous un ensemble de règles de zone de l'interface de ligne de commande

Pour lister les règles d'un ensemble de règles de zone à partir de l'interface de ligne de commande, exécutez la commande suivante :

ibmcloud cis managed-waf ruleset DNS_DOMAIN_ID RULESET_ID [-i, --instance INSTANCE] [--output FORMAT]

Options de commande

DNS_DOMAIN_ID
L'ID du domaine.
RULESET_ID
L'ID du jeu de règles pour les règles à répertorier.
-i, --instance value
Le nom ou l'ID de l'instance.
--output value
Spécifie le format de sortie; seul JSON est pris en charge.

Remplacer les ensembles de règles gérés depuis l'interface de ligne de commande

Pour remplacer un ensemble de règles WAF géré à partir de l'interface de ligne de commande, exécutez la commande suivante:

ibmcloud cis managed-waf deployment-add-ruleset DNS_DOMAIN_ID RULESET_ID [--match EXPRESSION] [--enabled true|false] [--override-action ACTION] [--override-status STATUS] [--paranoia-level LEVEL] [--override-rules RULE] [-i, --instance INSTANCE] [--output FORMAT]

Options de commande

DNS_DOMAIN_ID
l'ID du domaine.
--match value
Les conditions qui doivent être remplies pour que la règle s'applique. Voir Utilisation de champs, de fonctions et d'expressions pour une liste de valeurs à faire correspondre.
--enabled value
Indique si la règle est active. La valeur par défaut est "true".
--override-action value
L'action de l'ensemble de règles de toutes les dérogations. Les valeurs valides sont "managed_challenge", "block", "js_challenge", "log", "challenge".
--paranoia-level value
Le niveau de paranoïa de l'OWASP. Les valeurs valables sont " PL1 ", " PL2 ", " PL3 ", " PL4 " et n'est disponible que pour CIS OWASP Core Ruleset.
--override-rules value
Options pour les règles des substitutions. Par exemple, --override-rules rule=RULE_ID,action=ACTION,enabled=STATUS.
-i, --instance value
Le nom ou l'ID de l'instance.
--output value
Spécifie le format de sortie; seul JSON est pris en charge.

Répertorier les ensembles de règles de zone de l'API

Pour lister tous les ensembles de règles de zone de l'API, exécutez la commande suivante :

curl -X GET \
  https://api.cis.cloud.ibm.com/v1/$CRN/zones/$ZONE_ID/rulesets \
  -H 'content-type: application/json' \
  -H 'accept: application/json' \
  -H 'x-auth-user-token: Bearer xxxxxx'

Répertorier toutes les règles d'un ensemble de règles à partir de l'API

Pour lister toutes les règles d'un ensemble de règles spécifique, exécutez la commande suivante :

curl -X GET \
  https://api.cis.cloud.ibm.com/v1/$CRN/zones/$ZONE_ID/rulesets/$RULESET_ID \
  -H 'content-type: application/json' \
  -H 'accept: application/json' \
  -H 'x-auth-user-token: Bearer xxxxxx'

Où :

  • $RULESET_ID est l'ID de l'ensemble de règles géré pour lequel les règles sont répertoriées.

Remplacer un jeu de règles de point d'entrée depuis l'API

Pour mettre à jour le jeu de règles du point d'entrée à partir de l'API avec une substitution, exécutez la commande suivante :

curl -X PUT \
  https://api.cis.cloud.ibm.com/v1/$CRN/zones/$ZONE_ID/rulesets/phases/$RULESET_PHASE/entrypoint \
  -H 'content-type: application/json' \
  -H 'accept: application/json' \
  -H 'x-auth-user-token: Bearer xxxxxx' \
  -d '{"description":"Deploy managed ruleset, enabling a specific rule with log action","rules":[{"action":"execute","expression":"true","action_parameters":{"id":"<MANAGED_RULESET_ID>","overrides":{"rules":[{"id":"<RULE_ID>","enabled":true,"action":"log"}]}}}]}'

Où :

  • $RULESET_PHASE est la phase de déploiement de l'ensemble de règles. Utilisez http_request_firewall_managed pour passer outre les ensembles de règles WAF gérés.
  • -d est l'objet des attributs qui sont nécessaires pour créer le jeu de règles.
    • description définit votre propre résumé de ce qu'un ensemble de règles accomplit.
    • rules est le tableau de règles à déployer avec le jeu de règles.
      • action est l'action à effectuer par la règle. Voir les actions du jeu de règles WAF pour une description des actions disponibles.
      • action_parameters est l'objet de définition de l'objet sur lequel l'action est exécutée.
        • id est l'ID de l'ensemble de règles à exécuter. Cet ID est extrait de l'opération de liste des ensembles de règles de zone.
        • overrides est l'objet des substitutions à définir sur le jeu de règles sélectionné.
          • rules est la liste des règles qui sont remplacées par les propriétés sélectionnées.
            • id est l'ID de la règle à remplacer. Cet ID est extrait de l'opération de règles d'ensemble de règles de zone de liste.
            • enabled écrase même lorsque la règle est activée.
            • action indique l'action remplacée que la règle effectue.
      • expression est la condition sous laquelle la règle s'exécute. L'utilisation de la valeur "true" signifie que cette règle s'exécute toujours.
      • description définit votre propre récapitulatif de ce que la règle accomplit.

Lister les jeux de règles gérés avec Terraform

L'exemple suivant répertorie tous les jeux de règles gérés à l'aide de Terraform :

data "ibm_cis_rulesets" "tests" {
    cis_id    = ibm_cis.instance.id
    domain_id = data.ibm_cis_domain.cis_domain.domain_id
}

Pour plus d'informations sur les arguments et les attributs, voir ibm_cis_rulesets dans le registre Terraform.

Lister toutes les règles d'un jeu de règles géré avec Terraform

L'exemple suivant répertorie toutes les règles d'un jeu de règles géré à l'aide de Terraform :

resource "ibm_cis_ruleset" "config" {
    cis_id    = ibm_cis.instance.id
    domain_id = data.ibm_cis_domain.cis_domain.domain_id
    ruleset_id = "943c5da120114ea5831dc1edf8b6f769"
}

Pour plus d'informations sur les arguments et les attributs, voir ibm_cis_ruleset dans le registre Terraform.

Surcharger une règle avec Terraform

Cet exemple montre comment déployer l'ensemble de règles gérées CIS avec diverses dérogations. Tout d'abord, il active et bloque le trafic pour toutes les règles. Ensuite, il active et bloque le trafic pour une règle spécifique. Enfin, il active et bloque le trafic pour toutes les règles de la catégorie wordpress. Cet exemple illustre essentiellement les différentes méthodes permettant d'outrepasser les règles de déploiement (globales, spécifiques, par catégorie).

  resource "ibm_cis_ruleset_entrypoint_version" "test" {
    cis_id    = ibm_cis.instance.id
    domain_id = data.ibm_cis_domain.cis_domain.domain_id
    phase = "http_request_firewall_managed"
    rulesets {
      description = "Entrypoint ruleset for managed ruleset"
      rules {
        action =  "execute"
        description = "Deploy CIS managed ruleset"
        enabled = true
        expression = "true"
        action_parameters  {
          id = "efb7b8c949ac4650a09736fc376e9aee"
          overrides {
            action = "block"
            enabled = true
            override_rules {
              rule_id = "var.overriden_rule.id"
              enabled = true
              action = "block"
            }
            categories {
              category = "wordpress"
              enabled = true
              action = "block"
            }
          }
        }
      }
    }
  }

L'exemple suivant montre comment créer un point d'entrée WAF et remplacer une règle avec Terraform :

resource "ibm_cis_ruleset_entrypoint_version" "waf_config" {
  cis_id    = ibm_cis.instance.id
  domain_id = data.ibm_cis_domain.cis_domain.domain_id
  phase = "http_request_firewall_managed"
  rulesets {
     description = "Entry Point rulesets"
  }
  lifecycle {
      ignore_changes = [
        rulesets
      ]
  }
}

 data "ibm_cis_ruleset_entrypoint_versions" "test"{
    cis_id    = ibm_cis.instance.id
    domain_id = data.ibm_cis_domain.cis_domain.domain_id
    phase = "http_request_firewall_managed"
    depends_on = [
      ibm_cis_ruleset_entrypoint_version.waf_config
    ]
  }

resource ibm_cis_ruleset_rule "rule1" {

    cis_id    = ibm_cis.instance.id
    domain_id = data.ibm_cis_domain.cis_domain.domain_id
    ruleset_id = data.ibm_cis_ruleset_entrypoint_versions.test.rulesets[0].ruleset_id

      rule {
        action = "execute"
        description = "OWASP Core RuleSet"
        enabled = true
        expression = "true"
        action_parameters {
            id = "4814384a9e5d4991b9815dcfc25d2f1f"
            overrides {
            categories {
                 category = "paranoia-level-2"
                 enabled = false
            }
            categories {
                 category = "paranoia-level-3"
                  enabled = false
            }
            categories {
                 category = "paranoia-level-4"
                 enabled = false
            }
            override_rules {
              rule_id         = "6179ae15870a4bb7b2d480d4843b323c"
              action          = "block"
              score_threshold = 60
              enabled = true
            }
            override_rules {
              rule_id         = "8ac8bc2a661e475d940980f9317f28e1"
              enabled         = true
            }
       }
   }
}
}

resource ibm_cis_ruleset_rule "rule2" {

    cis_id    = ibm_cis.instance.id
    domain_id = data.ibm_cis_domain.cis_domain.domain_id
    ruleset_id = data.ibm_cis_ruleset_entrypoint_versions.test.rulesets[0].ruleset_id

    rule {
      action = "execute"
      description = "CIS exposed credential ruleset"
      enabled = true
      expression = "true"
      action_parameters {
           id = "c2e184081120413c86c3ab7e14069605"
           overrides {
            override_rules {
              rule_id = "53f38cd8974a4cd3bc9a8a64fc731fb0"
              enabled = true
              action = "log"
            }
      }
      }
    }
}

resource ibm_cis_ruleset_rule "rule3" {

    cis_id    = ibm_cis.instance.id
    domain_id = data.ibm_cis_domain.cis_domain.domain_id
    ruleset_id = data.ibm_cis_ruleset_entrypoint_versions.test.rulesets[0].ruleset_id

      rule {
          action = "execute"
         description = "CIS Managed ruleset"
          enabled = true
          expression = "true"
          action_parameters {
              id = "efb7b8c949ac4650a09736fc376e9aee"
              overrides {
            override_rules {
              rule_id = "5de7edfa648c4d6891dc3e7f84534ffa"
              enabled = true
              action = "block"
            }
          }
         }
      }
}

Pour plus d'informations sur les arguments et les attributs, voir ibm_cis_ruleset_entrypoint_version dans le registre Terraform.