

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éez des règles AWS Config personnalisées à l'aide AWS CloudFormation Guard de politiques
<a name="create-aws-config-custom-rules-by-using-aws-cloudformation-guard-policies"></a>

*Andrew Lok, Nicole Brown, Kailash Havildar et Tanya Howell, Amazon Web Services*

## Résumé
<a name="create-aws-config-custom-rules-by-using-aws-cloudformation-guard-policies-summary"></a>

[AWS Config](https://docs.aws.amazon.com/config/latest/developerguide/WhatIsConfig.html)les règles vous aident à évaluer vos AWS ressources et l'état de leur configuration cible. Il existe deux types de AWS Config règles : les règles gérées et les règles personnalisées. Vous pouvez créer des règles personnalisées avec AWS Lambda des fonctions ou avec [AWS CloudFormation Guard](https://github.com/aws-cloudformation/cloudformation-guard)(GitHub), une policy-as-code langue.

Les règles créées avec Guard fournissent un contrôle plus granulaire que les règles gérées, et elles sont généralement plus faciles à configurer que les règles Lambda entièrement personnalisées. Cette approche permet aux ingénieurs et aux architectes de créer des règles sans avoir besoin de connaître Python, NodeJS ou Java, qui sont nécessaires pour déployer des règles personnalisées via Lambda.

Ce modèle fournit des modèles pratiques, des exemples de code et des approches de déploiement pour vous aider à adopter des règles personnalisées avec Guard. En utilisant ce modèle, un administrateur peut AWS Config créer des règles de conformité personnalisées dotées d'attributs d'[éléments de configuration](https://docs.aws.amazon.com/config/latest/developerguide/config-concepts.html#config-items). Par exemple, les développeurs peuvent utiliser les politiques Guard sur les éléments de AWS Config configuration afin de surveiller en permanence l'état des AWS ressources déployées AWS et non déployées, de détecter les violations des règles et de lancer automatiquement des mesures correctives.

**Objectifs**

Après avoir lu ce modèle, vous devriez être capable de :
+ Découvrez comment le code de politique de Guard interagit avec le AWS Config service.
+ Déployez *le scénario 1*, qui est une règle AWS Config personnalisée qui utilise la syntaxe Guard pour valider la conformité des volumes chiffrés. [Cette règle vérifie que le lecteur est en cours d'utilisation et que le type de lecteur est gp3.](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/general-purpose.html#gp3-ebs-volume-type)
+ Déployez *le scénario 2*, qui est une règle AWS Config personnalisée qui utilise la syntaxe Guard pour valider la GuardDuty conformité d'Amazon. Cette règle vérifie que la protection Amazon [Simple Storage Service (Amazon S3) et la protection Amazon Elastic Kubernetes Service (Amazon EKS)](https://docs.aws.amazon.com/guardduty/latest/ug/s3-protection.html) [sont activées sur](https://docs.aws.amazon.com/guardduty/latest/ug/kubernetes-protection.html) les GuardDuty enregistreurs.

## Conditions préalables et limitations
<a name="create-aws-config-custom-rules-by-using-aws-cloudformation-guard-policies-prereqs"></a>

**Conditions préalables**
+ Un actif Compte AWS
+ AWS Config, [configurez](https://docs.aws.amazon.com/config/latest/developerguide/getting-started.html) dans votre Compte AWS

**Limites**
+ Les règles personnalisées de Guard ne peuvent interroger que des paires clé-valeur dans un enregistrement JSON d'élément de configuration cible

## Architecture
<a name="create-aws-config-custom-rules-by-using-aws-cloudformation-guard-policies-architecture"></a>

Vous appliquez la syntaxe Guard à une AWS Config règle en tant que politique personnalisée. AWS Config capture le JSON hiérarchique de chacune des ressources spécifiées. Le JSON de l'élément de AWS Config configuration contient des paires clé-valeur. Ces attributs sont utilisés dans la syntaxe Guard en tant que variables assignées à leur valeur correspondante. 

Vous trouverez ci-dessous une explication de la syntaxe Guard. Les variables de l'élément de configuration JSON sont utilisées et précédées d'un `%` caractère.

```
# declare variable
let <variable name> = <'value'>

# create rule and assign condition and policy
    rule <rule name> when 
        <CI json key> == <"CI json value"> {
            <top level CI json key>.<next level CI json key> == %<variable name>
        }
```

**Scénario 1 : volumes Amazon EBS**

Le scénario 1 déploie une règle AWS Config personnalisée qui utilise la syntaxe Guard pour valider la conformité des volumes chiffrés. Cette règle vérifie que le lecteur est en cours d'utilisation et que le type de lecteur est gp3.

Voici un exemple d'élément de AWS Config configuration pour le scénario 1. Cet élément de configuration comporte trois paires clé-valeur qui sont utilisées comme variables dans la politique Guard : `volumestatus``volumeencryptionstatus`, et. `volumetype` De plus, la `resourceType` clé est utilisée comme filtre dans la politique Guard.

```
{
  "version": "1.3",
  "accountId": "111111111111",
  "configurationItemCaptureTime": "2023-01-15T19:04:45.402Z",
  "configurationItemStatus": "ResourceDiscovered",
  "configurationStateId": "4444444444444",
  "configurationItemMD5Hash": "",
  "arn": "arn:aws:ec2:us-west-2:111111111111:volume/vol-222222222222",
  "resourceType": "AWS::EC2::Volume",
  "resourceId": "vol-222222222222",
  "awsRegion": "us-west-2",
  "availabilityZone": "us-west-2b",
  "resourceCreationTime": "2023-01-15T19:03:22.247Z",
  "tags": {},
  "relatedEvents": [],
  "relationships": [
    {
      "resourceType": "AWS::EC2::Instance",
      "resourceId": "i-33333333333333333",
      "relationshipName": "Is attached to Instance"
    }
  ],
  "configuration": {
    "attachments": [
      {
        "attachTime": "2023-01-15T19:03:22.000Z",
        "device": "/dev/xvda",
        "instanceId": "i-33333333333333333",
        "state": "attached",
        "volumeId": "vol-222222222222",
        "deleteOnTermination": true,
        "associatedResource": null,
        "instanceOwningService": null
      }
    ],
    "availabilityZone": "us-west-2b",
    "createTime": "2023-01-15T19:03:22.247Z",
    "encrypted": false,
    "kmsKeyId": null,
    "outpostArn": null,
    "size": 8,
    "snapshotId": "snap-55555555555555555",
    "state": "in-use",
    "volumeId": "vol-222222222222",
    "iops": 100,
    "tags": [],
    "volumeType": "gp2",
    "fastRestored": null,
    "multiAttachEnabled": false,
    "throughput": null,
    "sseType": null
  },
  "supplementaryConfiguration": {}
}
```

Voici un exemple d'utilisation de la syntaxe Guard pour définir les variables et les règles du scénario 1. Dans l'exemple suivant :
+ Les trois premières lignes définissent les variables à l'aide de la `let` commande.  On leur attribue un nom et une valeur dérivés des attributs de l'élément de configuration.
+ Le bloc de `compliancecheck` règles ajoute une dépendance conditionnelle « when » qui recherche une paire `resourceType` clé-valeur correspondante. `AWS::EC2::Volume` Si une correspondance est trouvée, la règle passe en revue le reste des attributs JSON et recherche des correspondances dans les trois conditions suivantes : `state``encrypted`, et`volumeType`.

```
let volumestatus = 'available'
let volumetype = 'gp3'
let volumeencryptionstatus = true

    rule compliancecheck when 
        resourceType == "AWS::EC2::Volume" {
            configuration.state == %volumestatus
            configuration.encrypted == %volumeencryptionstatus
            configuration.volumeType == %volumetype
        }
```

Pour connaître la politique personnalisée complète de Guard qui implémente cette règle personnalisée, consultez [awsconfig-guard-cft.yaml](https://github.com/aws-samples/aws-config-custom-rule-cloudformation-guard/blob/main/awsconfig-guard-cft.yaml) ou [awsconfig-guard-tf-ec2vol.json](https://github.com/aws-samples/aws-config-custom-rule-cloudformation-guard/blob/main/awsconfig-guard-tf-ec2vol.json) dans le référentiel de code. GitHub Pour le code HashiCorp Terraform qui déploie cette politique personnalisée dans Guard, voir [awsconfig-guard-tf-example.json](https://github.com/aws-samples/aws-config-custom-rule-cloudformation-guard/blob/main/awsconfig-guard-tf-example.json) dans le référentiel de code.

**Scénario 2 : GuardDuty conformité**

Le scénario 2 déploie une règle AWS Config personnalisée qui utilise la syntaxe Guard pour valider la GuardDuty conformité d'Amazon. Cette règle vérifie que Amazon S3 Protection et Amazon EKS Protection sont activées sur les GuardDuty enregistreurs. Il vérifie également que les GuardDuty résultats sont publiés toutes les 15 minutes. Ce scénario pourrait être déployé dans l'ensemble Comptes AWS et Régions AWS au sein d'une organisation (in AWS Organizations).

Voici un exemple d'élément de AWS Config configuration pour le scénario 2. Cet élément de configuration comporte trois paires clé-valeur qui sont utilisées comme variables dans la politique Guard : `FindingPublishingFrequency``S3Logs`, et. `Kubernetes` La `resourceType` clé est également utilisée comme filtre dans la politique.

```
{
  "version": "1.3",
  "accountId": "111111111111",
  "configurationItemCaptureTime": "2023-11-27T13:34:28.888Z",
  "configurationItemStatus": "OK",
  "configurationStateId": "7777777777777",
  "configurationItemMD5Hash": "",
  "arn": "arn:aws:guardduty:us-west-2:111111111111:detector/66666666666666666666666666666666",
  "resourceType": "AWS::GuardDuty::Detector",
  "resourceId": "66666666666666666666666666666666",
  "resourceName": "66666666666666666666666666666666",
  "awsRegion": "us-west-2",
  "availabilityZone": "Regional",
  "resourceCreationTime": "2020-02-17T02:48:04.511Z",
  "tags": {},
  "relatedEvents": [],
  "relationships": [],
  "configuration": {
    "Enable": true,
    "FindingPublishingFrequency": "FIFTEEN_MINUTES",
    "DataSources": {
      "S3Logs": {
        "Enable": true
      },
      "Kubernetes": {
        "AuditLogs": {
          "Enable": true
        }
      }
    },
    
    "Id": "66666666666666666666666666666666",
    "Tags": []
  },
  "supplementaryConfiguration": {
    "CreatedAt": "2020-02-17T02:48:04.511Z"
  }
}
```

Voici un exemple d'utilisation de la syntaxe Guard pour définir les variables et les règles du scénario 2. Dans l'exemple suivant :
+ Les trois premières lignes définissent les variables à l'aide de la `let` commande.  On leur attribue un nom et une valeur dérivés des attributs de l'élément de configuration.
+ Le bloc de `compliancecheck` règles ajoute une dépendance conditionnelle « when » qui recherche une paire `resourceType` clé-valeur correspondante. `AWS::GuardDuty::Detector` Si une correspondance est trouvée, la règle passe en revue le reste des attributs JSON et recherche des correspondances dans les trois conditions suivantes : `S3Logs.Enable``Kubernetes.AuditLogs.Enable`, et`FindingPublishingFrequency`.

```
let s3protection = true
let kubernetesprotection = true
let publishfrequency = 'FIFTEEN_MINUTES'

    rule compliancecheck when 
        resourceType == "AWS::GuardDuty::Detector" {
            configuration.DataSources.S3Logs.Enable == %s3protection
            configuration.DataSources.Kubernetes.AuditLogs.Enable == %kubernetesprotection
            configuration.FindingPublishingFrequency == %publishfrequency
        }
```

Pour la politique personnalisée complète de Guard qui implémente cette règle personnalisée, voir [awsconfig-guard-cft-gd.yaml](https://github.com/aws-samples/aws-config-custom-rule-cloudformation-guard/blob/main/awsconfig-guard-cft-gd.yaml) dans le référentiel de GitHub code. Pour le code HashiCorp Terraform qui déploie cette politique personnalisée dans Guard, voir [awsconfig-guard-tf-gd.json](https://github.com/aws-samples/aws-config-custom-rule-cloudformation-guard/blob/main/awsconfig-guard-tf-gd.json) dans le référentiel de code.

## Outils
<a name="create-aws-config-custom-rules-by-using-aws-cloudformation-guard-policies-tools"></a>

**Services AWS**
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)vous aide à configurer les AWS ressources, à les approvisionner rapidement et de manière cohérente, et à les gérer tout au long de leur cycle de vie dans toutes Comptes AWS les régions.
+ [AWS Config](https://docs.aws.amazon.com/config/latest/developerguide/WhatIsConfig.html)fournit une vue détaillée des ressources de votre ordinateur Compte AWS et de la façon dont elles sont configurées. Il vous aide à identifier la façon dont les ressources sont liées les unes aux autres et comment leurs configurations ont évolué au fil du temps.

**Autres outils**
+ [HashiCorp Terraform](https://www.terraform.io/docs) est un outil d'infrastructure en tant que code (IaC) qui vous aide à utiliser le code pour provisionner et gérer l'infrastructure et les ressources du cloud.

**Référentiel de code**

Le code de ce modèle est disponible dans le AWS CloudFormation Guard référentiel GitHub [AWS Config with](https://github.com/aws-samples/aws-config-custom-rule-cloudformation-guard/tree/main). Ce référentiel de code contient des exemples pour les deux scénarios décrits dans ce modèle.

## Épopées
<a name="create-aws-config-custom-rules-by-using-aws-cloudformation-guard-policies-epics"></a>

### Création de règles AWS Config personnalisées
<a name="creating-cc-custom-rules"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| (Facultatif) Sélectionnez des paires clé-valeur pour la règle. | Procédez comme suit si vous définissez une politique de garde personnalisée. Si vous utilisez l'un des exemples de politiques pour le scénario 1 ou 2, ignorez ces étapes.[See the AWS documentation website for more details](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/create-aws-config-custom-rules-by-using-aws-cloudformation-guard-policies.html) | Administrateur AWS, ingénieur en sécurité | 
| Créez la règle personnalisée. | À l'aide des paires clé-valeur que vous avez identifiées précédemment ou à l'aide de l'un des exemples de politiques Guard fournis, suivez les instructions de la section [Création de règles de politique AWS Config personnalisées](https://docs.aws.amazon.com/config/latest/developerguide/evaluate-config_develop-rules_cfn-guard.html#create-cfn-guard-rule-console) pour créer une règle personnalisée. | Administrateur AWS, ingénieur en sécurité | 
| Validez la règle personnalisée. | Procédez de l'une des manières suivantes pour valider la règle Guard personnalisée :[See the AWS documentation website for more details](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/create-aws-config-custom-rules-by-using-aws-cloudformation-guard-policies.html) | Administrateur AWS, ingénieur en sécurité | 

## Résolution des problèmes
<a name="create-aws-config-custom-rules-by-using-aws-cloudformation-guard-policies-troubleshooting"></a>


| Problème | Solution | 
| --- | --- | 
| Testez la politique Guard en dehors de AWS Config | Les tests unitaires peuvent être effectués sur votre appareil local ou dans un environnement de développement intégré (IDE), tel qu'un AWS Cloud9 IDE. Pour effectuer un test unitaire, procédez comme suit :[See the AWS documentation website for more details](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/create-aws-config-custom-rules-by-using-aws-cloudformation-guard-policies.html) | 
| Déboguer une règle AWS Config personnalisée | Dans votre politique Guard, remplacez la `EnableDebugLogDelivery` valeur par`true`. La valeur par défaut est `false`. Les messages du journal sont stockés sur Amazon CloudWatch. | 

## Ressources connexes
<a name="create-aws-config-custom-rules-by-using-aws-cloudformation-guard-policies-resources"></a>

**AWS documentation**
+ [Création de règles de politique AWS Config personnalisées](https://docs.aws.amazon.com/config/latest/developerguide/evaluate-config_develop-rules_cfn-guard.html) (AWS Config documentation)
+ [AWS CloudFormation Guard Règles de rédaction](https://docs.aws.amazon.com/cfn-guard/latest/ug/writing-rules.html) (documentation Guard)

**AWS articles de blog et ateliers**
+ [Présentation de la AWS CloudFormation Guard version 2.0](https://aws.amazon.com/blogs/mt/introducing-aws-cloudformation-guard-2-0/) (article de AWS blog)

**Autres ressources**
+ [AWS CloudFormation Guard](https://github.com/aws-cloudformation/cloudformation-guard) (GitHub)
+ [AWS CloudFormation Guard Documentation de la CLI](https://github.com/aws-cloudformation/cloudformation-guard#guard-cli) (GitHub)