

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Erstellen Sie AWS Config benutzerdefinierte Regeln mithilfe von AWS CloudFormation Guard Richtlinien
<a name="create-aws-config-custom-rules-by-using-aws-cloudformation-guard-policies"></a>

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

## Zusammenfassung
<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)Regeln helfen Ihnen bei der Bewertung Ihrer AWS Ressourcen und ihres Zielkonfigurationsstatus. Es gibt zwei Arten von AWS Config Regeln: verwaltete und benutzerdefinierte Regeln. Sie können benutzerdefinierte Regeln mit AWS Lambda Funktionen oder mit [AWS CloudFormation Guard](https://github.com/aws-cloudformation/cloudformation-guard)(GitHub), einer policy-as-code Sprache, erstellen.

Mit Guard erstellte Regeln bieten eine detailliertere Steuerung als verwaltete Regeln und sind in der Regel einfacher zu konfigurieren als vollständig benutzerdefinierte Lambda-Regeln. Dieser Ansatz bietet Ingenieuren und Architekten die Möglichkeit, Regeln zu erstellen, ohne Python, NodeJS oder Java kennen zu müssen, die für die Bereitstellung benutzerdefinierter Regeln über Lambda erforderlich sind.

Dieses Muster bietet praktikable Vorlagen, Codebeispiele und Bereitstellungsansätze, die Sie bei der Einführung benutzerdefinierter Regeln mit Guard unterstützen. Mithilfe dieses Musters kann ein Administrator benutzerdefinierte Compliance-Regeln mit Attributen für [Konfigurationselemente](https://docs.aws.amazon.com/config/latest/developerguide/config-concepts.html#config-items) erstellen. AWS Config Entwickler können beispielsweise Guard-Richtlinien für AWS Config Konfigurationselemente verwenden, um den Status bereitgestellter AWS und nicht vorhandener AWS Ressourcen kontinuierlich zu überwachen, Regelverstöße zu erkennen und automatisch Abhilfemaßnahmen einzuleiten.

**Ziele**

Nachdem Sie dieses Muster gelesen haben, sollten Sie in der Lage sein:
+ Verstehen Sie, wie der Guard-Richtliniencode mit dem AWS Config Service interagiert.
+ Stellen Sie *Szenario 1* bereit. Dabei handelt es sich um eine AWS Config benutzerdefinierte Regel, die die Guard-Syntax verwendet, um die Konformität für verschlüsselte Volumes zu überprüfen. [Diese Regel überprüft, ob das Laufwerk verwendet wird, und stellt sicher, dass der Laufwerkstyp gp3 ist.](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/general-purpose.html#gp3-ebs-volume-type)
+ Stellen Sie *Szenario 2* bereit. Dabei handelt es sich um eine AWS Config benutzerdefinierte Regel, die die Guard-Syntax verwendet, um die GuardDuty Amazon-Konformität zu überprüfen. Diese Regel überprüft, ob bei GuardDuty Rekordern [Amazon Simple Storage Service (Amazon S3) Protection und Amazon](https://docs.aws.amazon.com/guardduty/latest/ug/s3-protection.html) [Elastic Kubernetes Service (Amazon EKS](https://docs.aws.amazon.com/guardduty/latest/ug/kubernetes-protection.html)) Protection aktiviert sind.

## Voraussetzungen und Einschränkungen
<a name="create-aws-config-custom-rules-by-using-aws-cloudformation-guard-policies-prereqs"></a>

**Voraussetzungen**
+ Ein aktiver AWS-Konto
+ AWS Config, [eingerichtet](https://docs.aws.amazon.com/config/latest/developerguide/getting-started.html) in Ihrem AWS-Konto

**Einschränkungen**
+ Benutzerdefinierte Guard-Regeln können nur Schlüssel-Wert-Paare in einem JSON-Datensatz für ein Zielkonfigurationselement abfragen

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

Sie wenden die Guard-Syntax als benutzerdefinierte Richtlinie auf eine AWS Config Regel an. AWS Config erfasst die hierarchische JSON-Datei jeder der angegebenen Ressourcen. Das JSON des AWS Config Konfigurationselements enthält Schlüssel-Wert-Paare. Diese Attribute werden in der Guard-Syntax als Variablen verwendet, die ihrem entsprechenden Wert zugewiesen werden. 

Im Folgenden wird die Guard-Syntax erklärt. Die Variablen aus dem Konfigurationselement JSON werden verwendet und ihnen wird ein `%` Zeichen vorangestellt.

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

**Szenario 1: Amazon EBS-Volumes**

Szenario 1 stellt eine AWS Config benutzerdefinierte Regel bereit, die die Guard-Syntax verwendet, um die Konformität für verschlüsselte Volumes zu überprüfen. Diese Regel überprüft, ob das Laufwerk verwendet wird, und stellt sicher, dass der Laufwerkstyp gp3 ist.

Das Folgende ist ein Beispiel für ein AWS Config Konfigurationselement für Szenario 1. Dieses Konfigurationselement enthält drei Schlüssel-Wert-Paare, die als Variablen in der Guard-Richtlinie verwendet werden: `volumestatus``volumeencryptionstatus`, und. `volumetype` Außerdem wird der `resourceType` Schlüssel in der Guard-Richtlinie als Filter verwendet.

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

Das Folgende ist ein Beispiel für die Verwendung der Guard-Syntax zur Definition der Variablen und Regeln in Szenario 1. Beachten Sie im folgenden Beispiel Folgendes:
+ Die ersten drei Zeilen definieren die Variablen mithilfe des `let` Befehls.  Ihnen wird ein Name und ein Wert zugewiesen, die von den Attributen des Konfigurationselements abgeleitet sind.
+ Der `compliancecheck` Regelblock fügt eine Abhängigkeit vom Typ when hinzu, die nach einem übereinstimmenden `resourceType` Schlüssel-Wert-Paar sucht. `AWS::EC2::Volume` Wenn eine Übereinstimmung gefunden wird, durchsucht die Regel die restlichen JSON-Attribute und sucht unter den folgenden drei Bedingungen nach Übereinstimmungen: `state``encrypted`, und. `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
        }
```

Die vollständige benutzerdefinierte Guard-Richtlinie, die diese benutzerdefinierte Regel implementiert, finden Sie unter [awsconfig-guard-cft.yaml](https://github.com/aws-samples/aws-config-custom-rule-cloudformation-guard/blob/main/awsconfig-guard-cft.yaml) oder [awsconfig-guard-tf-ec2vol.json](https://github.com/aws-samples/aws-config-custom-rule-cloudformation-guard/blob/main/awsconfig-guard-tf-ec2vol.json) im Code-Repository. GitHub HashiCorp [Terraform-Code, der diese benutzerdefinierte Richtlinie in Guard bereitstellt, finden Sie unter .json im Code-Repository. awsconfig-guard-tf-example](https://github.com/aws-samples/aws-config-custom-rule-cloudformation-guard/blob/main/awsconfig-guard-tf-example.json)

**Szenario 2: Einhaltung GuardDuty **

Szenario 2 stellt eine AWS Config benutzerdefinierte Regel bereit, die die Guard-Syntax verwendet, um die GuardDuty Amazon-Konformität zu überprüfen. Diese Regel überprüft, ob bei GuardDuty Rekordern Amazon S3 S3-Schutz und Amazon EKS-Schutz aktiviert sind. Außerdem wird überprüft, ob die GuardDuty Ergebnisse alle 15 Minuten veröffentlicht werden. Dieses Szenario könnte überall AWS-Konten und AWS-Regionen in einer Organisation (in AWS Organizations) eingesetzt werden.

Das Folgende ist ein Beispiel für ein AWS Config Konfigurationselement für Szenario 2. Dieses Konfigurationselement enthält drei Schlüssel-Wert-Paare, die als Variablen in der Guard-Richtlinie verwendet werden: `FindingPublishingFrequency``S3Logs`, und. `Kubernetes` Außerdem wird der `resourceType` Schlüssel in der Richtlinie als Filter verwendet.

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

Im Folgenden finden Sie ein Beispiel für die Verwendung der Guard-Syntax zur Definition der Variablen und Regeln in Szenario 2. Beachten Sie im folgenden Beispiel Folgendes:
+ Die ersten drei Zeilen definieren die Variablen mithilfe des `let` Befehls.  Ihnen wird ein Name und ein Wert zugewiesen, die von den Attributen des Konfigurationselements abgeleitet sind.
+ Der `compliancecheck` Regelblock fügt eine Abhängigkeit vom Typ when hinzu, die nach einem übereinstimmenden `resourceType` Schlüssel-Wert-Paar sucht. `AWS::GuardDuty::Detector` Wenn eine Übereinstimmung gefunden wird, durchsucht die Regel die restlichen JSON-Attribute und sucht unter den folgenden drei Bedingungen nach Übereinstimmungen: `S3Logs.Enable``Kubernetes.AuditLogs.Enable`, und. `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
        }
```

Die vollständige benutzerdefinierte Guard-Richtlinie, die diese benutzerdefinierte Regel implementiert, finden Sie unter [awsconfig-guard-cft-gd.yaml](https://github.com/aws-samples/aws-config-custom-rule-cloudformation-guard/blob/main/awsconfig-guard-cft-gd.yaml) im GitHub Code-Repository. HashiCorp Terraform-Code, der diese benutzerdefinierte Richtlinie in Guard bereitstellt, finden Sie unter [awsconfig-guard-tf-gd.json](https://github.com/aws-samples/aws-config-custom-rule-cloudformation-guard/blob/main/awsconfig-guard-tf-gd.json) im Code-Repository.

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

**AWS-Services**
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)hilft Ihnen dabei, AWS Ressourcen einzurichten, sie schnell und konsistent bereitzustellen und sie während ihres gesamten Lebenszyklus regionsübergreifend zu verwalten. AWS-Konten 
+ [AWS Config](https://docs.aws.amazon.com/config/latest/developerguide/WhatIsConfig.html)bietet einen detaillierten Überblick über die Ressourcen in Ihrem System AWS-Konto und deren Konfiguration. Es hilft Ihnen zu erkennen, wie Ressourcen miteinander zusammenhängen und wie sich ihre Konfigurationen im Laufe der Zeit geändert haben.

**Andere Tools**
+ [HashiCorp Terraform](https://www.terraform.io/docs) ist ein Infrastructure-as-Code-Tool (IaC), mit dem Sie mithilfe von Code Cloud-Infrastruktur und -Ressourcen bereitstellen und verwalten können.

**Code-Repository**

Der Code für dieses Muster ist im AWS CloudFormation Guard Repository GitHub [AWS Config with](https://github.com/aws-samples/aws-config-custom-rule-cloudformation-guard/tree/main) verfügbar. Dieses Code-Repository enthält Beispiele für beide in diesem Muster beschriebenen Szenarien.

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

### AWS Config Benutzerdefinierte Regeln erstellen
<a name="creating-cc-custom-rules"></a>


| Aufgabe | Description | Erforderliche Fähigkeiten | 
| --- | --- | --- | 
| (Optional) Wählen Sie Schlüssel-Wert-Paare für die Regel aus. | Gehen Sie wie folgt vor, wenn Sie eine benutzerdefinierte Guard-Richtlinie definieren. Wenn Sie eine der Beispielrichtlinien für Szenario 1 oder 2 verwenden, überspringen Sie diese Schritte.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/create-aws-config-custom-rules-by-using-aws-cloudformation-guard-policies.html) | AWS-Administrator, Sicherheitsingenieur | 
| Erstellen Sie die benutzerdefinierte Regel. | Folgen Sie den Anweisungen unter Benutzerdefinierte Richtlinienregeln erstellen, um eine [AWS Config benutzerdefinierte Regel zu erstellen, indem Sie die zuvor identifizierten Schlüssel-Wert-Paare verwenden oder eine der bereitgestellten Guard-Beispielrichtlinien](https://docs.aws.amazon.com/config/latest/developerguide/evaluate-config_develop-rules_cfn-guard.html#create-cfn-guard-rule-console) verwenden. | AWS-Administrator, Sicherheitsingenieur | 
| Validieren Sie die benutzerdefinierte Regel. | Führen Sie einen der folgenden Schritte aus, um die benutzerdefinierte Guard-Regel zu validieren:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/create-aws-config-custom-rules-by-using-aws-cloudformation-guard-policies.html) | AWS-Administrator, Sicherheitsingenieur | 

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


| Problem | Lösung | 
| --- | --- | 
| Testen Sie die Guard-Richtlinie außerhalb von AWS Config | Unit-Tests können auf Ihrem lokalen Gerät oder in einer integrierten Entwicklungsumgebung (IDE), z. B. einer AWS Cloud9 IDE, durchgeführt werden. Gehen Sie wie folgt vor, um Komponententests durchzuführen:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/de_de/prescriptive-guidance/latest/patterns/create-aws-config-custom-rules-by-using-aws-cloudformation-guard-policies.html) | 
| Debuggen Sie eine AWS Config benutzerdefinierte Regel | Ändern Sie den `EnableDebugLogDelivery` Wert in Ihrer Guard-Richtlinie in`true`. Der Standardwert ist `false`. Die Protokollnachrichten werden in Amazon gespeichert CloudWatch. | 

## Zugehörige Ressourcen
<a name="create-aws-config-custom-rules-by-using-aws-cloudformation-guard-policies-resources"></a>

**AWS Dokumentation**
+ [Erstellen AWS Config benutzerdefinierter Richtlinienregeln](https://docs.aws.amazon.com/config/latest/developerguide/evaluate-config_develop-rules_cfn-guard.html) (AWS Config Dokumentation)
+ [AWS CloudFormation Guard Regeln schreiben](https://docs.aws.amazon.com/cfn-guard/latest/ug/writing-rules.html) (Guard-Dokumentation)

**AWS Blogbeiträge und Workshops**
+ [Wir stellen vor AWS CloudFormation Guard 2.0](https://aws.amazon.com/blogs/mt/introducing-aws-cloudformation-guard-2-0/) (AWS Blogbeitrag)

**Sonstige Ressourcen**
+ [AWS CloudFormation Guard](https://github.com/aws-cloudformation/cloudformation-guard) (GitHub)
+ [AWS CloudFormation Guard CLI-Dokumentation](https://github.com/aws-cloudformation/cloudformation-guard#guard-cli) (GitHub)