

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Crea regole AWS Config personalizzate utilizzando AWS CloudFormation Guard le politiche
<a name="create-aws-config-custom-rules-by-using-aws-cloudformation-guard-policies"></a>

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

## Riepilogo
<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)le regole ti aiutano a valutare le tue risorse e il loro stato di configurazione di destinazione. AWS Esistono due tipi di AWS Config regole: gestite e personalizzate. È possibile creare regole personalizzate con AWS Lambda funzioni o con [AWS CloudFormation Guard](https://github.com/aws-cloudformation/cloudformation-guard)(GitHub), un policy-as-code linguaggio.

Le regole create con Guard forniscono un controllo più granulare rispetto alle regole gestite e in genere sono più facili da configurare rispetto alle regole Lambda completamente personalizzate. Questo approccio offre a ingegneri e architetti la possibilità di creare regole senza dover conoscere Python, NodeJS o Java, necessari per implementare regole personalizzate tramite Lambda.

Questo modello fornisce modelli utilizzabili, esempi di codice e approcci di implementazione per aiutarti ad adottare regole personalizzate con Guard. Utilizzando questo modello, un amministratore può utilizzarlo AWS Config per creare regole di conformità personalizzate con attributi degli [elementi di configurazione](https://docs.aws.amazon.com/config/latest/developerguide/config-concepts.html#config-items). Ad esempio, gli sviluppatori possono utilizzare le policy di Guard rispetto agli elementi di AWS Config configurazione per monitorare continuamente lo stato delle AWS risorse distribuite AWS e non, rilevare le violazioni delle regole e avviare automaticamente la correzione.

**Obiettivi**

Dopo aver letto questo schema, dovresti essere in grado di:
+ Scopri come il codice di policy di Guard interagisce con il AWS Config servizio.
+ Implementa *lo Scenario 1*, che è una regola AWS Config personalizzata che utilizza la sintassi Guard per convalidare la conformità per i volumi crittografati. [Questa regola verifica che l'unità sia in uso e verifica che il tipo di unità sia gp3.](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/general-purpose.html#gp3-ebs-volume-type)
+ Implementa *lo Scenario 2*, una regola AWS Config personalizzata che utilizza la sintassi Guard per convalidare la conformità di Amazon GuardDuty . Questa regola verifica che GuardDuty i registratori abbiano la protezione [Amazon Simple Storage Service (Amazon S3) e la protezione Amazon [Elastic Kubernetes Service (Amazon EKS](https://docs.aws.amazon.com/guardduty/latest/ug/kubernetes-protection.html))](https://docs.aws.amazon.com/guardduty/latest/ug/s3-protection.html) abilitate.

## Prerequisiti e limitazioni
<a name="create-aws-config-custom-rules-by-using-aws-cloudformation-guard-policies-prereqs"></a>

**Prerequisiti**
+ Un attivo Account AWS
+ AWS Config, [configuralo](https://docs.aws.amazon.com/config/latest/developerguide/getting-started.html) nel tuo Account AWS

**Limitazioni**
+ Le regole personalizzate di Guard sono in grado di interrogare solo le coppie chiave-valore in un record JSON dell'elemento di configurazione di destinazione

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

Si applica la sintassi Guard a una AWS Config regola come politica personalizzata. AWS Config acquisisce il codice JSON gerarchico di ciascuna delle risorse specificate. Il JSON dell'elemento di AWS Config configurazione contiene coppie chiave-valore. Questi attributi vengono utilizzati nella sintassi Guard come variabili assegnate al valore corrispondente. 

Di seguito è riportata una spiegazione della sintassi Guard. Le variabili dell'elemento di configurazione JSON vengono utilizzate e precedute da un carattere. `%`

```
# 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>
        }
```

**Scenario 1: volumi Amazon EBS**

Lo scenario 1 implementa una regola AWS Config personalizzata che utilizza la sintassi Guard per convalidare la conformità dei volumi crittografati. Questa regola verifica che l'unità sia in uso e verifica che il tipo di unità sia gp3.

Di seguito è riportato un esempio di elemento di AWS Config configurazione per lo scenario 1. In questo elemento di configurazione sono presenti tre coppie chiave-valore utilizzate come variabili nella policy Guard:`volumestatus`,`volumeencryptionstatus`, e. `volumetype` Inoltre, la `resourceType` chiave viene utilizzata come filtro nella policy 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": {}
}
```

Di seguito è riportato un esempio di utilizzo della sintassi Guard per definire le variabili e le regole nello scenario 1. Nel seguente esempio:
+ Le prime tre righe definiscono le variabili utilizzando il `let` comando.  A esse viene assegnato un nome e un valore derivati dagli attributi dell'elemento di configurazione.
+ Il blocco di `compliancecheck` regole aggiunge una dipendenza condizionale quando cerca una coppia `resourceType` chiave-valore corrispondente. `AWS::EC2::Volume` Se viene trovata una corrispondenza, la regola passa attraverso il resto degli attributi JSON e cerca le corrispondenze nelle tre condizioni seguenti:,, e. `state` `encrypted` `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
        }
```

[Per la politica personalizzata completa di Guard che implementa questa regola personalizzata, consulta [awsconfig-guard-cft.yaml o awsconfig-guard-tf-ec 2vol.json](https://github.com/aws-samples/aws-config-custom-rule-cloudformation-guard/blob/main/awsconfig-guard-cft.yaml) nel repository del codice.](https://github.com/aws-samples/aws-config-custom-rule-cloudformation-guard/blob/main/awsconfig-guard-tf-ec2vol.json) GitHub [Per il codice HashiCorp Terraform che implementa questa politica personalizzata in Guard, consulta .json nel repository del codice. awsconfig-guard-tf-example](https://github.com/aws-samples/aws-config-custom-rule-cloudformation-guard/blob/main/awsconfig-guard-tf-example.json)

** GuardDuty Scenario 2: conformità**

Lo scenario 2 implementa una regola AWS Config personalizzata che utilizza la sintassi Guard per convalidare la conformità di Amazon GuardDuty . Questa regola verifica che nei GuardDuty registratori siano abilitati Amazon S3 Protection e Amazon EKS Protection. Verifica inoltre che i GuardDuty risultati vengano pubblicati ogni 15 minuti. Questo scenario potrebbe essere implementato in tutti Account AWS e Regioni AWS in un'organizzazione (in AWS Organizations).

Di seguito è riportato un esempio di elemento di AWS Config configurazione per lo scenario 2. In questo elemento di configurazione sono presenti tre coppie chiave-valore utilizzate come variabili nella policy Guard:`FindingPublishingFrequency`,`S3Logs`, e. `Kubernetes` Inoltre, la `resourceType` chiave viene utilizzata come filtro nella politica.

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

Di seguito è riportato un esempio di utilizzo della sintassi Guard per definire le variabili e le regole nello scenario 2. Nel seguente esempio:
+ Le prime tre righe definiscono le variabili utilizzando il `let` comando.  A esse viene assegnato un nome e un valore derivati dagli attributi dell'elemento di configurazione.
+ Il blocco di `compliancecheck` regole aggiunge una dipendenza condizionale quando cerca una coppia `resourceType` chiave-valore corrispondente. `AWS::GuardDuty::Detector` Se viene trovata una corrispondenza, la regola passa attraverso il resto degli attributi JSON e cerca le corrispondenze nelle tre condizioni seguenti:,, e. `S3Logs.Enable` `Kubernetes.AuditLogs.Enable` `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
        }
```

Per la politica personalizzata completa di Guard che implementa questa regola personalizzata, consulta [awsconfig-guard-cft-gd.yaml](https://github.com/aws-samples/aws-config-custom-rule-cloudformation-guard/blob/main/awsconfig-guard-cft-gd.yaml) nel repository del codice. GitHub [Per il codice HashiCorp Terraform che implementa questa politica personalizzata in Guard, consulta .json nel repository del codice. awsconfig-guard-tf-gd](https://github.com/aws-samples/aws-config-custom-rule-cloudformation-guard/blob/main/awsconfig-guard-tf-gd.json)

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

**Servizi AWS**
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)ti aiuta a configurare AWS le risorse, fornirle in modo rapido e coerente e gestirle durante il loro ciclo di vita in tutte le regioni. Account AWS 
+ [AWS Config](https://docs.aws.amazon.com/config/latest/developerguide/WhatIsConfig.html)fornisce una visione dettagliata delle risorse disponibili Account AWS e di come sono configurate. Ti aiuta a identificare in che modo le risorse sono correlate tra loro e in che modo le loro configurazioni sono cambiate nel tempo.

**Altri strumenti**
+ [HashiCorp Terraform](https://www.terraform.io/docs) è uno strumento Infrastructure as Code (IaC) che consente di utilizzare il codice per fornire e gestire l'infrastruttura e le risorse cloud.

**Archivio di codici**

Il codice per questo pattern è disponibile nel AWS CloudFormation Guard repository GitHub [AWS Config with](https://github.com/aws-samples/aws-config-custom-rule-cloudformation-guard/tree/main). Questo archivio di codice contiene esempi per entrambi gli scenari descritti in questo modello.

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

### Creazione di AWS Config regole personalizzate
<a name="creating-cc-custom-rules"></a>


| Operazione | Description | Competenze richieste | 
| --- | --- | --- | 
| (Facoltativo) Seleziona le coppie chiave-valore per la regola. | Completa questi passaggi se stai definendo una politica Guard personalizzata. Se stai utilizzando una delle politiche di esempio per lo scenario 1 o 2, salta questi passaggi.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/create-aws-config-custom-rules-by-using-aws-cloudformation-guard-policies.html) | Amministratore AWS, ingegnere della sicurezza | 
| Crea la regola personalizzata. | Utilizzando le coppie chiave-valore identificate in precedenza o utilizzando una delle politiche Guard di esempio fornite, segui le istruzioni in [Creazione di regole di policy AWS Config personalizzate](https://docs.aws.amazon.com/config/latest/developerguide/evaluate-config_develop-rules_cfn-guard.html#create-cfn-guard-rule-console) per creare una regola personalizzata. | Amministratore AWS, ingegnere della sicurezza | 
| Convalida la regola personalizzata. | Effettua una delle seguenti operazioni per convalidare la regola Guard personalizzata:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/create-aws-config-custom-rules-by-using-aws-cloudformation-guard-policies.html) | Amministratore AWS, ingegnere della sicurezza | 

## risoluzione dei problemi
<a name="create-aws-config-custom-rules-by-using-aws-cloudformation-guard-policies-troubleshooting"></a>


| Problema | Soluzione | 
| --- | --- | 
| Prova la policy di Guard al di fuori di AWS Config | I test unitari possono essere eseguiti sul dispositivo locale o in un ambiente di sviluppo integrato (IDE), come un AWS Cloud9 IDE. Per eseguire il test unitario, procedi come segue:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/patterns/create-aws-config-custom-rules-by-using-aws-cloudformation-guard-policies.html) | 
| Esegui il debug di una regola personalizzata AWS Config  | Nella tua politica Guard, modifica il `EnableDebugLogDelivery` valore in`true`. Il valore predefinito è `false`. I messaggi di registro vengono archiviati in Amazon CloudWatch. | 

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

**AWS documentazione**
+ [Creazione di regole di policy AWS Config personalizzate](https://docs.aws.amazon.com/config/latest/developerguide/evaluate-config_develop-rules_cfn-guard.html) (AWS Config documentazione)
+ [AWS CloudFormation Guard Regole di scrittura](https://docs.aws.amazon.com/cfn-guard/latest/ug/writing-rules.html) (documentazione di Guard)

**AWS post di blog e workshop**
+ [Presentazione della AWS CloudFormation Guard versione 2.0](https://aws.amazon.com/blogs/mt/introducing-aws-cloudformation-guard-2-0/) (post AWS sul blog)

**Altre risorse**
+ [AWS CloudFormation Guard](https://github.com/aws-cloudformation/cloudformation-guard) (GitHub)
+ [AWS CloudFormation Guard Documentazione CLI](https://github.com/aws-cloudformation/cloudformation-guard#guard-cli) () GitHub