AWS WAFcommandes - AWS Control Tower

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

AWS WAFcommandes

[CT.WAF.PR.1] Exiger que toute règle AWS WAF globale comporte une condition

Ce contrôle vérifie si une règle AWS WAF Classic globale contient des conditions.

  • Objectif de contrôle : limiter l'accès au réseau

  • Mise en œuvre : règle de AWS CloudFormation garde

  • Comportement de contrôle : proactif

  • Types de ressources : AWS::WAF::Rule

  • AWS CloudFormationrègle de garde : CT.WAF.PR.1spécification des règles

Détails et exemples

Explication

Une règle globale WAF peut contenir plusieurs conditions. Les conditions d'une règle permettent d'inspecter le trafic et de prendre une action définie (autoriser, bloquer ou compter). Sans aucune condition, le trafic passe sans inspection. Une règle globale WAF sans conditions, mais dont le nom ou le tag suggère d'autoriser, de bloquer ou de compter, peut laisser supposer à tort que l'une de ces actions est en train de se produire.

Remédiation en cas de défaillance des règles

Fournissez une ou plusieurs conditions de AWS WAF règle au sein de la Predicates propriété.

Les exemples suivants montrent comment implémenter cette correction.

AWS WAF ClassicRègle globale - Exemple

AWS WAF Classicrègle globale configurée avec un prédicat de correspondance IP. L'exemple est présenté en JSON et en YAML.

Exemple JSON

{ "WAFRule": { "Type": "AWS::WAF::Rule", "Properties": { "Name": "SampleWAFRule", "MetricName": "SampleWAFRuleMetric", "Predicates": [ { "DataId": { "Ref": "IPSet" }, "Negated": false, "Type": "IPMatch" } ] } } }

Exemple YAML

WAFRule: Type: AWS::WAF::Rule Properties: Name: SampleWAFRule MetricName: SampleWAFRuleMetric Predicates: - DataId: !Ref 'IPSet' Negated: false Type: IPMatch

CT.WAF.PR.1spécification des règles

# ################################### ## Rule Specification ## ##################################### # # Rule Identifier: # waf_global_rule_not_empty_check # # Description: # This control checks whether an AWS WAF Classic global rule contains any conditions. # # Reports on: # AWS::WAF::Rule # # Evaluates: # AWS CloudFormation, AWS CloudFormation Hook # # Rule Parameters: # None # # Scenarios: # Scenario: 1 # Given: The input document is an AWS CloudFormation or AWS CloudFormation hook document # And: The input document does not contain any WAF Classic global rule resources # Then: SKIP # Scenario: 2 # Given: The input document is an AWS CloudFormation or AWS CloudFormation hook document # And: The input document contains a WAF Classic global rule resource # And: 'Predicates' has not been provided # Then: FAIL # Scenario: 3 # Given: The input document is an AWS CloudFormation or AWS CloudFormation hook document # And: The input document contains a WAF Classic global rule resource # And: 'Predicates' has been provided as an empty list # Then: FAIL # Scenario: 4 # Given: The input document is an AWS CloudFormation or AWS CloudFormation hook document # And: The input document contains a WAF Classic global rule resource # And: 'Predicates' has been provided as a non-empty list # Then: PASS # # Constants # let WAF_GLOBAL_RULE_TYPE = "AWS::WAF::Rule" let INPUT_DOCUMENT = this # # Assignments # let waf_global_rules = Resources.*[ Type == %WAF_GLOBAL_RULE_TYPE ] # # Primary Rules # rule waf_global_rule_not_empty_check when is_cfn_template(%INPUT_DOCUMENT) %waf_global_rules not empty { check(%waf_global_rules.Properties) << [CT.WAF.PR.1]: Require any AWS WAF global rule to have a condition [FIX]: Provide one or more AWS WAF rule conditions within the 'Predicates' property. >> } rule waf_global_rule_not_empty_check when is_cfn_hook(%INPUT_DOCUMENT, %WAF_GLOBAL_RULE_TYPE) { check(%INPUT_DOCUMENT.%WAF_GLOBAL_RULE_TYPE.resourceProperties) << [CT.WAF.PR.1]: Require any AWS WAF global rule to have a condition [FIX]: Provide one or more AWS WAF rule conditions within the 'Predicates' property. >> } # # Parameterized Rules # rule check(waf_global_rule) { %waf_global_rule { # Scenario 2, 3 and 4 Predicates exists Predicates is_list Predicates not empty } } # # Utility Rules # rule is_cfn_template(doc) { %doc { AWSTemplateFormatVersion exists or Resources exists } } rule is_cfn_hook(doc, RESOURCE_TYPE) { %doc.%RESOURCE_TYPE.resourceProperties exists }

Exemples de modèles CT.WAF.PR.1

Vous pouvez consulter des exemples d'artefacts de test PASS et FAIL pour les contrôles proactifs de l'AWS Control Tower.

Exemple PASS - Utilisez ce modèle pour vérifier la conformité de la création d'une ressource.

Resources: IPSetDenylist: Type: AWS::WAF::IPSet Properties: Name: IPSet for deny listed IP addresses IPSetDescriptors: - Type: IPV4 Value: 192.0.2.44/32 WafGlobalRule: Type: AWS::WAF::Rule Properties: Name: ExampleWAFRule MetricName: ExampleWAFRuleMetric Predicates: - DataId: Ref: IPSetDenylist Negated: false Type: "IPMatch"

Exemple d'échec : utilisez ce modèle pour vérifier que le contrôle empêche la création de ressources non conformes.

Resources: WafGlobalRule: Type: AWS::WAF::Rule Properties: Name: ExampleWAFRule MetricName: ExampleWAFRuleMetric

[CT.WAF.PR.2] Exiger que toute ACL Web AWS WAF globale ait une règle ou un groupe de règles

Ce contrôle vérifie si une ACL Web AWS WAF Classic globale contient des règles WAF ou des groupes de règles.

  • Objectif de contrôle : limiter l'accès au réseau

  • Mise en œuvre : règle de AWS CloudFormation garde

  • Comportement de contrôle : proactif

  • Types de ressources : AWS::WAF::WebACL

  • AWS CloudFormationrègle de garde : CT.WAF.PR.2spécification des règles

Détails et exemples

Explication

Une ACL Web globale WAF peut contenir un ensemble de règles et de groupes de règles qui inspectent et contrôlent les requêtes Web. Si une ACL Web est vide, le trafic Web peut passer sans être détecté ou traité par WAF en fonction de l'action par défaut.

Remédiation en cas de défaillance des règles

Fournissez une ou plusieurs AWS WAF règles au sein de la Rules propriété.

Les exemples suivants montrent comment implémenter cette correction.

AWS WAF ClassicACL Web globale - Exemple

AWS WAF ClassicACL Web globale configurée avec une règle pour bloquer les demandes en fonction d'une correspondance d'adresses IP. L'exemple est présenté en JSON et en YAML.

Exemple JSON

{ "WafGlobalWebAcl": { "Type": "AWS::WAF::WebACL", "Properties": { "Name": "SampleWebACL", "DefaultAction": { "Type": "ALLOW" }, "MetricName": "SampleWebACLMetric", "Rules": [ { "Action": { "Type": "BLOCK" }, "Priority": 1, "RuleId": { "Ref": "IPSetRule" } } ] } } }

Exemple YAML

WafGlobalWebAcl: Type: AWS::WAF::WebACL Properties: Name: SampleWebACL DefaultAction: Type: ALLOW MetricName: SampleWebACLMetric Rules: - Action: Type: BLOCK Priority: 1 RuleId: !Ref 'IPSetRule'

CT.WAF.PR.2spécification des règles

# ################################### ## Rule Specification ## ##################################### # # Rule Identifier: # waf_global_webacl_not_empty_check # # Description: # This control checks whether an AWS WAF Classic global web ACL contains any WAF rules or rule groups. # # Reports on: # AWS::WAF::WebACL # # Evaluates: # AWS CloudFormation, AWS CloudFormation hook # # Rule Parameters: # None # # Scenarios: # Scenario: 1 # Given: The input document is an AWS CloudFormation or AWS CloudFormation hook document # And: The input document does not contain any AWS WAF Classic global web ACL resources # Then: SKIP # Scenario: 2 # Given: The input document is an AWS CloudFormation or AWS CloudFormation hook document # And: The input document contains an AWS WAF Classic global web ACL resource # And: 'Rules' has not been provided # Then: FAIL # Scenario: 3 # Given: The input document is an AWS CloudFormation or AWS CloudFormation hook document # And: The input document contains an AWS WAF Classic global web ACL resource # And: 'Rules' has been provided as an empty list # Then: FAIL # Scenario: 4 # Given: The input document is an AWS CloudFormation or AWS CloudFormation hook document # And: The input document contains an AWS WAF Classic global web ACL resource # And: 'Rules' has been provided as a non-empty list # Then: PASS # # Constants # let WAF_GLOBAL_WEB_ACL_TYPE = "AWS::WAF::WebACL" let INPUT_DOCUMENT = this # # Assignments # let waf_global_web_acls = Resources.*[ Type == %WAF_GLOBAL_WEB_ACL_TYPE ] # # Primary Rules # rule waf_global_webacl_not_empty_check when is_cfn_template(%INPUT_DOCUMENT) %waf_global_web_acls not empty { check(%waf_global_web_acls.Properties) << [CT.WAF.PR.2]: Require any AWS WAF global web ACL to have a rule or rule group [FIX]: Provide one or more AWS WAF rules within the 'Rules' property. >> } rule waf_global_webacl_not_empty_check when is_cfn_hook(%INPUT_DOCUMENT, %WAF_GLOBAL_WEB_ACL_TYPE) { check(%INPUT_DOCUMENT.%WAF_GLOBAL_WEB_ACL_TYPE.resourceProperties) << [CT.WAF.PR.2]: Require any AWS WAF global web ACL to have a rule or rule group [FIX]: Provide one or more AWS WAF rules within the 'Rules' property. >> } # # Parameterized Rules # rule check(waf_global_web_acl) { %waf_global_web_acl { # Scenario 2, 3 and 4 Rules exists Rules is_list Rules not empty } } # # Utility Rules # rule is_cfn_template(doc) { %doc { AWSTemplateFormatVersion exists or Resources exists } } rule is_cfn_hook(doc, RESOURCE_TYPE) { %doc.%RESOURCE_TYPE.resourceProperties exists }

CT.WAF.PR.2exemples de modèles

Vous pouvez consulter des exemples d'artefacts de test PASS et FAIL pour les contrôles proactifs de l'AWS Control Tower.

Exemple PASS - Utilisez ce modèle pour vérifier la conformité de la création d'une ressource.

Resources: IPSetDenylist: Type: "AWS::WAF::IPSet" Properties: Name: "IPSet for deny listed IP addresses" IPSetDescriptors: - Type: "IPV4" Value: "192.0.2.44/32" IPSetRule: Type: AWS::WAF::Rule Properties: Name: ExampleIPSetRule MetricName: ExampleIPSetRuleMetric Predicates: - DataId: Ref: IPSetDenylist Negated: false Type: IPMatch WafGlobalWebAcl: Type: AWS::WAF::WebACL Properties: Name: ExampleWebACL DefaultAction: Type: ALLOW MetricName: ExampleWebACLMetric Rules: - Action: Type: BLOCK Priority: 1 RuleId: Ref: IPSetRule

Exemple d'échec : utilisez ce modèle pour vérifier que le contrôle empêche la création de ressources non conformes.

Resources: WafGlobalWebAcl: Type: AWS::WAF::WebACL Properties: Name: ExampleWebACL DefaultAction: Type: ALLOW MetricName: ExampleWebACLMetric