

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.

# Création de règles de politique AWS Config personnalisées
<a name="evaluate-config_develop-rules_cfn-guard"></a>

Vous pouvez créer des règles de politique AWS Config personnalisées à partir de l' AWS Config API AWS Management Console AWS CLI, ou.

## Ajouter AWS Config des règles de politique personnalisées
<a name="config-custom-policy-rules-add"></a>

------
#### [ Using the console ]

1. Connectez-vous à la AWS Config console AWS Management Console et ouvrez-la à la [https://console.aws.amazon.com/config/maison](https://console.aws.amazon.com/config/home).

1. Dans le AWS Management Console menu, vérifiez que le sélecteur de région est défini sur une AWS région qui prend en charge les AWS Config règles. Pour obtenir la liste des régions prises en charge, consultez [Régions et points de terminaison AWS Config](https://docs.aws.amazon.com/general/latest/gr/awsconfig.html) dans le *Référence générale d'Amazon Web Services*. 

1. Dans le volet de navigation de gauche, choisissez **Règles**. 

1. Sur la page **Règles**, choisissez **Ajouter une règle**. 

1. Sur la page **Spécifier le type de règle**, choisissez **Créer une règle personnalisée à l'aide de Guard**.

1. Sur la page **Configurer une règle**, créez la règle en réalisant les étapes suivantes :

   1. Saisissez un nom unique dans le champ **Nom de la règle**.

   1. Saisissez une description de la règle dans le champ **Description**.

   1. Pour la **version d'exécution de Guard**, choisissez le système d'exécution pour votre règle de politique AWS Config personnalisée.

   1. Vous pouvez renseigner le **Contenu de la règle** avec la politique Guard personnalisée correspondant à votre règle. 

   1. Pour le **mode d'évaluation**, choisissez à quel moment du processus de création et de gestion des ressources vous AWS Config souhaitez évaluer vos ressources. Selon la règle, AWS Config vous pouvez évaluer vos configurations de ressources avant qu'une ressource ne soit provisionnée, après qu'une ressource ait été provisionnée, ou les deux.

      1. Choisissez **Activer l'évaluation proactive** pour évaluer les paramètres de configuration de vos ressources avant leur déploiement.

         Après avoir activé l'évaluation proactive, vous pouvez utiliser l'[StartResourceEvaluation](https://docs.aws.amazon.com/config/latest/APIReference/API_StartResourceEvaluation.html)API et l'[GetResourceEvaluationSummary](https://docs.aws.amazon.com/config/latest/APIReference/API_GetResourceEvaluationSummary.html)API pour vérifier si les ressources que vous spécifiez dans ces commandes seront signalées comme NON CONFORMES par les règles proactives de votre compte dans votre région.

          Pour plus d'informations sur l'utilisation de ces commandes, consultez la section [Évaluation de vos ressources à l'aide de AWS Config règles](https://docs.aws.amazon.com/config/latest/developerguide/evaluating-your-resources.html#evaluating-your-resources-proactive). Pour obtenir la liste des règles gérées qui prennent en charge l'évaluation proactive, consultez la section [Liste des règles AWS Config gérées par mode d'évaluation](https://docs.aws.amazon.com/config/latest/developerguide/managed-rules-by-evaluation-mode.html).

      1. Choisissez **Activer l'évaluation détective** pour évaluer les paramètres de configuration de vos ressources existantes.

         À des fins d'évaluation préventive, les règles de politique AWS Config personnalisée sont initiées par les **modifications de configuration**. Cette option sera présélectionnée.
         +  **Ressources** : lorsqu'une ressource qui correspond au type de ressource spécifié, ou au type plus à l'identifiant, est créée, modifiée ou supprimée.
         +  **Balises** : lorsqu'une ressource portant la balise spécifiée est créée, modifiée ou supprimée.
         +  **Toutes les modifications** : lorsqu'une ressource enregistrée par AWS Config est créée, modifiée ou supprimée.

         AWS Config exécute l'évaluation lorsqu'il détecte une modification apportée à une ressource correspondant au champ d'application de la règle. Vous pouvez utiliser la portée afin de limiter les ressources qui déclenchent des évaluations. Dans le cas contraire, les évaluations sont lancées en cas de modification d'une ressource post-provisionnée.

   1. Vous pouvez personnaliser les valeurs des clés fournies dans le champ **Paramètres**, si votre règle comprend des paramètres. Un paramètre est un attribut que vos ressources doivent respecter pour pouvoir être considérées conformes à la règle.

1. Sur la page **Réviser et créer**, passez en revue toutes vos sélections avant d'ajouter la règle à votre Compte AWS.

1. Lorsque vous avez vérifié vos règles, choisissez **Ajouter une règle**.

------
#### [ Using the AWS CLI ]

Utilisez la commande [https://docs.aws.amazon.com/cli/latest/reference/configservice/put-config-rule.html](https://docs.aws.amazon.com/cli/latest/reference/configservice/put-config-rule.html).

Le champ `Owner` doit présenter la valeur `CUSTOM_POLICY`. Les champs supplémentaires suivants sont obligatoires pour les règles de politique AWS Config personnalisée :
+ `Runtime`: le système d'exécution de vos règles de politique AWS Config personnalisée.
+ `PolicyText` : la définition de la politique contenant la logique de vos règles de politiques AWS Config personnalisées.
+ `EnableDebugLogDelivery`: expression booléenne permettant d'activer la journalisation du débogage pour votre règle de politique AWS Config personnalisée. La valeur par défaut est `false`.

------
#### [ Using the API Reference ]

Utilisez l'action [PutConfigRule](https://docs.aws.amazon.com/config/latest/APIReference/API_PutConfigRule.html).

Le champ `Owner` doit présenter la valeur `CUSTOM_POLICY`. Les champs supplémentaires suivants sont obligatoires pour les règles de politique AWS Config personnalisée :
+ `Runtime`: le système d'exécution de vos règles de politique AWS Config personnalisée.
+ `PolicyText` : la définition de la politique contenant la logique de vos règles de politiques AWS Config personnalisées.
+ `EnableDebugLogDelivery`: expression booléenne permettant d'activer la journalisation du débogage pour votre règle de politique AWS Config personnalisée. La valeur par défaut est `false`.

------

## Rédaction du contenu des règles pour les règles de politique AWS Config personnalisées
<a name="config-custom-policy-rules"></a>

Avec les règles de politique AWS Config personnalisées, vous pouvez utiliser le langage spécifique au domaine (DSL) de AWS CloudFormation Guard pour évaluer les configurations des ressources. Cette rubrique fournit des modèles et des bonnes pratiques pour la rédaction de règles de politique personnalisées.

Pour plus d'informations sur la façon d'écrire des règles avec Guard, consultez la section [Writing Guard](https://docs.aws.amazon.com/cfn-guard/latest/ug/writing-rules.html) dans le AWS CloudFormation guide de l'utilisateur de [AWS CloudFormation Guard et les modes de fonctionnement de Guard 2.0](https://github.com/aws-cloudformation/cloudformation-guard/tree/main/guard) dans le GitHub référentiel Guard.

### Structure des règles de base
<a name="config-custom-policy-rules-structure"></a>

Utilisez le format de base suivant pour créer des règles :

```
# Basic rule format
rule <rule_name> when
    resourceType == "<AWS::Service::Resource>" {
    # Evaluation clauses
}

# Example with filtering
let resources_of_type = Resources.*[ Type == 'AWS::Service::Resource' ]
rule check_resources when %resources_of_type !empty {
    %resources_of_type.configuration.property == expected_value
}
```

### Composants clés
<a name="config-custom-policy-rules-components"></a>

configuration  
Contient le contenu de la configuration des ressources.

supplementaryConfiguration  
Contient du contenu supplémentaire pour la configuration des ressources. AWS Config renvoie ce champ pour certains types de ressources afin de compléter les informations renvoyées pour le champ de configuration.

resourceType  
AWS type de ressource en cours d'évaluation.

resourceId  
L'ID de la ressource (par exemple,`sg-xxxxxx`).

accountId  
L' Compte AWS identifiant à 12 chiffres associé à la ressource.

### Schémas courants
<a name="config-custom-policy-rules-patterns"></a>

------
#### [ Status checks ]

```
let allowed_status = ['ACTIVE', 'RUNNING']
rule check_resource_status when
    resourceType == "AWS::Service::Resource" {
    configuration.status IN %allowed_status
}
```

------
#### [ Required properties ]

```
rule check_required_properties when
    resourceType == "AWS::Service::Resource" {
    configuration.propertyName exists
    configuration.propertyName is_string  # or is_list, is_struct
}
```

------
#### [ Query blocks ]

```
configuration.Properties {
    property1 exists
    property2 is_string
    property3 IN [allowed_value1, allowed_value2]
}
```

------
#### [ Conditional evaluation ]

```
when configuration.feature_enabled == true {
    configuration.feature_settings exists
    configuration.feature_settings is_struct
}
```

------
#### [ Custom messages ]

```
rule check_compliance when
    resourceType == "AWS::Service::Resource" {
    configuration.property == expected_value <<Custom error message explaining the requirement>>
}}
```

------

### Fonctionnalités avancées
<a name="config-custom-policy-rules-advanced"></a>

------
#### [ Range checks ]

```
rule check_numeric_limits {
    # Inclusive range (lower_limit <= value <= upper_limit)
    configuration.value IN r[minimum_value, maximum_value]  

    # Exclusive range (lower_limit < value < upper_limit)
    configuration.value IN r(exclusive_min, exclusive_max)  

    # Left inclusive, right exclusive (lower_limit <= value < upper_limit)
    configuration.value IN r[minimum_value, exclusive_max)

    # Left exclusive, right inclusive (lower_limit < value <= upper_limit)
    configuration.value IN r(exclusive_min, maximum_value]
}
```

------
#### [ Combining conditions ]

```
# AND conditions (implicit through new lines)
condition_1
condition_2

# OR conditions (explicit)
condition_3 OR
condition_4
```

------
#### [ Chaining rules ]

```
rule check_prerequisites {
    configuration.required_setting exists
}

rule check_details when check_prerequisites {
    configuration.required_setting == expected_value
}
```

------

### Bonnes pratiques
<a name="config-custom-policy-rules-best-practices"></a>
+ Utilisez des variables avec des `let` instructions pour une meilleure lisibilité.
+ Regroupez les vérifications associées à l'aide de blocs de règles nommés.
+ Incluez des commentaires descriptifs.
+ Utilisez les opérateurs appropriés (`exists`,`is_string`,`is_list`).
+ Utilisez des modèles regex avec une correspondance insensible aux majuscules et minuscules.

### Exemple : dynamodb-pitr-enabled
<a name="config-custom-policy-rules-example"></a>

L'exemple suivant montre la définition de politique pour une version de règle de politique AWS Config personnalisée de la règle AWS Config gérée[dynamodb-pitr-enabled](dynamodb-pitr-enabled.md). Cette règle vérifie si la restauration est activée pour les tables Point-in-Time DynamoDB.

```
# Check if DynamoDB tables have Point-in-Time Recovery enabled
let status = ['ACTIVE']

rule tableisactive when
    resourceType == "AWS::DynamoDB::Table" {
    configuration.tableStatus == %status
}

rule checkcompliance when
    resourceType == "AWS::DynamoDB::Table"
    tableisactive {
    let pitr = supplementaryConfiguration.ContinuousBackupsDescription.pointInTimeRecoveryDescription.pointInTimeRecoveryStatus
    %pitr == "ENABLED" <<DynamoDB tables must have Point-in-Time Recovery enabled>>
}
```