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
Erstellt von Andrew Lok (AWS), Kailash Havildar (AWS), Nicole Brown () und Tanya Howell (AWS) AWS
Übersicht
AWS ConfigRegeln 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
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 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.
Stellen Sie Szenario 2 bereit, 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 Elastic Kubernetes Service (Amazon EKS) Protection aktiviert sind.
Voraussetzungen und Einschränkungen
Voraussetzungen
Ein aktiver AWS-Konto
AWS Config, eingerichtet in Ihrem AWS-Konto
Einschränkungen
Benutzerdefinierte Guard-Regeln können nur Schlüssel-Wert-Paare in einem Datensatz mit Zielkonfigurationselementen abfragen JSON
Architektur
Sie wenden die Guard-Syntax als benutzerdefinierte Richtlinie auf eine AWS Config Regel an. AWS Config erfasst die Hierarchie JSON der einzelnen angegebenen Ressourcen. Das JSON AWS Config Konfigurationselement 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: EBS Amazon-Volumen
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 übereinstimmendenresourceType
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
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 Protection und Amazon EKS Protection 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 übereinstimmendenresourceType
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
Tools
AWS-Services
AWS CloudFormationhilft Ihnen dabei, AWS Ressourcen einzurichten, sie schnell und konsistent bereitzustellen und sie während ihres gesamten Lebenszyklus regionsübergreifend zu verwalten. AWS-Konten
AWS Configbietet einen detaillierten Überblick über die Ressourcen in Ihrem System AWS-Konto und darüber, wie sie konfiguriert sind. 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
ist ein Open-Source-Tool für Infrastruktur als Code (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
Epen
Aufgabe | Beschreibung | 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.
| AWSAdministrator, 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 verwenden. | AWSAdministrator, Sicherheitsingenieur |
Überprüfen Sie die benutzerdefinierte Regel. | Führen Sie einen der folgenden Schritte aus, um die benutzerdefinierte Guard-Regel zu validieren:
| AWSAdministrator, Sicherheitsingenieur |
Fehlerbehebung
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) durchgeführt werden, z. B. in AWS Cloud9 IDE Gehen Sie wie folgt vor, um Unit-Tests durchzuführen:
|
Debuggen Sie eine AWS Config benutzerdefinierte Regel | Ändern Sie den |
Zugehörige Ressourcen
AWS Dokumentation
Erstellen AWS Config benutzerdefinierter Richtlinienregeln (AWS Config Dokumentation)
AWS CloudFormation Guard Regeln schreiben (Guard-Dokumentation)
AWS Blogbeiträge und Workshops
Wir stellen vor AWS CloudFormation Guard 2.0
(AWS Blogbeitrag)
Sonstige Ressourcen
AWS CloudFormation Guard
(GitHub)