

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.

# Neue Abhilfemaßnahmen hinzufügen
<a name="adding-new-remediations"></a>

Abhilfemaßnahmen können manuell hinzugefügt werden, indem die entsprechenden Playbook-Dateien aktualisiert werden, oder programmgesteuert, indem die Lösung um CDK-Konstrukte erweitert wird, je nach Ihrem bevorzugten Arbeitsablauf.

**Anmerkung**  
In den folgenden Anweisungen werden die von der Lösung installierten Ressourcen als Ausgangspunkt verwendet. Konventionell enthalten die meisten Lösungsressourcennamen **ASR and/or ** **SO0111**, um sie leicht auffinden und identifizieren zu können.

## Überblick über den manuellen Arbeitsablauf
<a name="remediation-overview"></a>

Automated Security Response auf AWS-Runbooks muss der folgenden Standardbenennung folgen:

ASR- - - {{<standard>}} {{<version>}} {{<control>}} 

 **Standard**: Die Abkürzung für den Sicherheitsstandard. Dies muss den von ASR unterstützten Standards entsprechen. Es muss „CIS“, „AFSBP“, „PCI“, „NIST“ oder „SC“ sein.

 **Version**: Die Version des Standards. Auch dies muss mit der von ASR unterstützten Version und der Version in den Ergebnisdaten übereinstimmen.

 **Kontrolle**: Die Kontroll-ID des Steuerelements, das repariert werden soll. Dies muss mit den Ergebnisdaten übereinstimmen.

1. Erstellen Sie ein Runbook in dem/den Mitgliedskonto (en).

1. Erstellen Sie eine IAM-Rolle in den Mitgliedskonten.

1. (Optional) Erstellen Sie eine Regel zur automatischen Problembehebung im Administratorkonto.

### Schritt 1. Erstellen Sie ein Runbook in dem/den Mitgliedskonto (en)
<a name="step-1-create-a-runbook-in-the-member-accounts"></a>

1. Melden Sie sich bei der [AWS Systems Manager Manager-Konsole](https://console.aws.amazon.com/systems-manager/home) an und erhalten Sie ein Beispiel für das gefundene JSON.

1. Erstellen Sie ein Automatisierungs-Runbook, das den Befund behebt. Verwenden Sie auf der Registerkarte **„Mein Eigentum**“ eines der `ASR-` Dokumente auf der Registerkarte „**Dokumente**“ als Ausgangspunkt.

1. Die AWS Step Functions im Administratorkonto führen Ihr Runbook aus. Ihr Runbook muss die Behebungsrolle angeben, damit sie beim Aufrufen des Runbooks übergeben wird.

### Schritt 2. Erstellen Sie eine IAM-Rolle in den Mitgliedskonten
<a name="step-2-create-iam-role-in-the-member-accounts"></a>

1. Melden Sie sich bei der [AWS Identity and Access Management-Konsole](https://console.aws.amazon.com/iam/home) an.

1. Rufen Sie ein Beispiel aus den IAM **SO0111-Rollen** ab und erstellen Sie eine neue Rolle. Der Rollenname muss mit SO0111-Remediate- - - beginnen. {{<standard>}} {{<version>}} {{<control>}} Wenn Sie zum Beispiel CIS v1.2.0 Control 5.6 hinzufügen, muss die Rolle `SO0111-Remediate-CIS-1.2.0-5.6`

1. Erstellen Sie anhand des Beispiels eine Rolle mit einem angemessenen Gültigkeitsbereich, die nur die für die Problembehebung erforderlichen API-Aufrufe zulässt.

Zu diesem Zeitpunkt ist Ihre Problembehebung aktiv und kann über die benutzerdefinierte ASR-Aktion in AWS Security Hub automatisiert behoben werden.

### Schritt 3: (Optional) Erstellen Sie eine automatische Behebungsregel im Administratorkonto
<a name="step-3-create-an-automatio-remediation-rule-in-the-admin-account"></a>

Automatische (nicht „automatisierte“) Behebung ist die sofortige Ausführung der Behebung, sobald das Ergebnis bei AWS Security Hub eingegangen ist. Wägen Sie die Risiken sorgfältig ab, bevor Sie diese Option verwenden.

1. Eine Beispielregel für denselben Sicherheitsstandard finden Sie unter CloudWatch Ereignisse. Der Benennungsstandard für Regeln lautet`standard_control_*AutoTrigger*`.

1. Kopieren Sie das zu verwendende Ereignismuster aus dem Beispiel.

1. Ändern Sie den `GeneratorId` Wert so, dass er mit dem `GeneratorId` in Ihrem Finding JSON übereinstimmt.

1. Speichern und aktivieren Sie die Regel.

## Überblick über den CDK-Workflow
<a name="cdk-remediation-overview"></a>

Zusammenfassend werden die folgenden Dateien im ASR-Repo geändert oder hinzugefügt. In diesem Beispiel wurde den SC- und AFSBP-Playbooks eine neue Problembehebung für ElastiCache .2 hinzugefügt.

**Anmerkung**  
Alle neuen Behebungen sollten dem SC-Playbook hinzugefügt werden, da es alle in ASR verfügbaren Behebungen konsolidiert. Wenn Sie beabsichtigen, nur einen bestimmten Satz von Playbooks (z. B. AFSBP) bereitzustellen, können Sie entweder: (1) die Behebung **nur** Ihren beabsichtigten Playbooks hinzufügen oder (2) die Behebung zusätzlich zum SC-Playbook allen Playbooks hinzufügen, für die sie im entsprechenden Security Hub Hub-Standard existiert. Die zweite Option wird aus Gründen der Flexibilität empfohlen.

In diesem Beispiel ist ElastiCache .2 in den folgenden Security Hub Hub-Standards enthalten:
+ AFSBP
+ NIST.800-53.R5 SI-2
+ NIST.800-53,R5 SI-2 (2)
+ NIST.800-53.R5 SI-2 (4)
+ NIST.800-53.R5 SI-2 (5)
+ PCI-DSS v4.0.1/6.3.3

Da ASR standardmäßig nur Playbooks für AFSBP und NIST.800-53 implementiert, werden wir diese neue Lösung zusätzlich zu SC zu diesen Playbooks hinzufügen.

 **Modifizieren Sie** 
+ source/lib/remediation-runbook-stack.ts
+ source/playbooks/AFSBP/lib/[Standardname] \_remediations.ts
+ source/playbooks/NIST80053/lib/control\_runbooks-construct.ts
+ source/playbooks/NIST80053/lib/[Standardname] \_remediations.ts
+ source/playbooks/SC/lib/control\_runbooks-construct.ts
+ source/playbooks/SC/lib/sc\_Remediations.ts
+ source/test/regex\_registry.ts

 **Addition** 
+ source/playbooks/SC/ssmdocs/SC\_ .2.ts ElastiCache
+ source/playbooks/SC/ssmdocs/descriptions/ElastiCache.2.md
+ source/remediation\_runbooks/EnableElastiCacheVersionUpgrades.yaml

**Anmerkung**  
Der für das Runbook gewählte Name kann eine beliebige Zeichenfolge sein, sofern er mit den übrigen vorgenommenen Änderungen übereinstimmt.
+ source/playbooks/NIST80053/ssmdocs/NIST80053\_ .2.ts ElastiCache
+ source/playbooks/AFSBP/ssmdocs/AFSBP\_ ElastiCache .2.yaml

 **Schritte der Entwicklung** 

1. Erstellen Sie das Remediation Runbook.

1. Erstellen Sie die Control Runbooks.

1. Integrieren Sie jedes Control Runbook in ein Playbook.

1. Erstellen Sie die IAM-Rolle für die Problembehebung und integrieren Sie das Wiederherstellungs-Runbook

1. Unit-Tests aktualisieren

### Schritt 1: Erstellen Sie das Remediation Runbook
<a name="step-1-create-the-remediation-runbook"></a>

Dies ist das SSM-Dokument, das zur Behebung von Ressourcen verwendet wird. Es muss den `AutomationAssumeRole` Parameter enthalten, bei dem es sich um die IAM-Rolle mit den Berechtigungen zur Ausführung der Problembehebung handelt. Sehen Sie sich die vorhandene Datei `source/remediation_runbooks/EnableElastiCacheVersionUpgrades.yaml` als Referenz an, wenn Sie neue Reparatur-Runbooks erstellen.

Alle neuen Runbooks sollten dem Verzeichnis hinzugefügt werden. `source/remediation_runbooks/`

### Schritt 2: Erstellen Sie die Control Runbooks
<a name="step-2-create-the-control-runbook"></a>

Ein Kontroll-Runbook ist ein Playbook-spezifisches Runbook, das die Ergebnisdaten aus dem angegebenen Standard analysiert und das entsprechende Remediation Runbook ausführt. Da wir den SC-, AFSBP- und NIST8 0053-Playbooks die ElastiCache 2.2-Problembehebung hinzufügen, müssen wir für jedes Playbook ein neues Kontroll-Runbook erstellen. Die folgenden Dateien werden erstellt:
+ source/playbooks/SC/ssmdocs/SC\_ ElastiCache .2.ts
+ source/playbooks/NIST80053/ssmdocs/NIST80053\_ .2.ts ElastiCache
+ source/playbooks/AFSBP/ssmdocs/AFSBP\_ ElastiCache .2.yaml

**Example**  
<PLAYBOOK\_NAME><CONTROL.ID>Die Benennung dieser Dateien ist wichtig und muss dem Format \_ .ts/yaml folgen

Einige Playbooks in ASR unterstützen IaC-Steuerungs-Runbooks TypeScript, während andere in rohem YAML geschrieben werden müssen. Verweisen Sie als Beispiele auf die vorhandenen Abhilfemaßnahmen im jeweiligen Playbook. In diesem Beispiel werden wir uns mit dem SC-Playbook befassen, das IaC verwendet.

Im SC-Playbook sollte Ihr neues Kontroll-Runbook eine Klasse exportieren, die den Namen Ihres ControlRunbookDocument Behebungs-Runbooks erweitert und diesem entspricht. Schauen Sie sich das folgende Beispiel an:

```
export class EnableElastiCacheVersionUpgrades extends ControlRunbookDocument {
  constructor(scope: Construct, id: string, props: ControlRunbookProps) {
    super(scope, id, {
      ...props,
      securityControlId: 'ElastiCache.2',
      remediationName: 'EnableElastiCacheVersionUpgrades',
      scope: RemediationScope.REGIONAL,
      resourceIdRegex: <Regex>,
      resourceIdName: 'ClusterId',
      updateDescription: new StringFormat('Automatic minor version upgrades enabled for cluster %s.', [
        StringVariable.of(`ParseInput.ClusterId`),
      ]),
    });
  }
}
```
+  `securityControlId`ist die Kontroll-ID für die Korrektur, die Sie hinzufügen, so wie sie in der [Ansicht der konsolidierten Kontrollen in Security Hub](https://docs.aws.amazon.com/securityhub/latest/userguide/asff-changes-consolidation.html#securityhub-findings-format-changes-ids-titles) definiert ist.
+  `remediationName`ist der Name, den Sie für Ihr Behebungs-Runbook gewählt haben.
+  `scope`ist der Umfang der Ressource, die Sie korrigieren, und gibt an, ob sie global oder in einer bestimmten Region vorhanden ist.
+  `resourceIdRegex`ist der reguläre Ausdruck, der verwendet wird, um die Ressourcen-ID zu erfassen, die Sie als Parameter an das Reparatur-Runbook übergeben möchten. Es sollte nur eine Gruppe erfasst werden, alle anderen Gruppen sollten nicht erfasst werden. Wenn Sie den gesamten ARN übergeben möchten, lassen Sie dieses Feld weg.
+  `resourceIdName`ist der Name, den Sie für die Ressourcen-ID festlegen möchten`resourceIdRegex`, mit der Sie erfasst wurden. Dieser Name sollte mit dem Namen des Ressourcen-ID-Parameters in Ihrem Behebungs-Runbook übereinstimmen.
+  `updateDescription`ist die Zeichenfolge, die Sie dem Abschnitt „Notizen“ des Ergebnisses in Security Hub zuweisen möchten, sobald die Behebung erfolgreich ist.

Sie müssen auch eine aufgerufene Funktion exportieren`createControlRunbook`, die eine neue Instanz Ihrer Klasse zurückgibt. Für ElastiCache .2 sieht das so aus:

```
export function createControlRunbook(scope: Construct, id: string, props: PlaybookProps): ControlRunbookDocument {
  return new EnableElastiCacheVersionUpgrades(scope, id, { ...props, controlId: 'ElastiCache.2' });
}
```

wo `controlId` ist die Kontroll-ID, wie sie im Sicherheitsstandard definiert ist, der dem Playbook zugeordnet ist, unter dem Sie arbeiten.

Wenn das Security Hub-Steuerelement über Parameter verfügt, die Sie an Ihr Behebungs-Runbook übergeben möchten, können Sie sie übergeben, indem Sie Überschreibungen zu den folgenden Methoden hinzufügen: -`getExtraSteps`: definiert Standardwerte für jeden Parameter, der für das Steuerelement in Security Hub implementiert ist

**Anmerkung**  
Jedem Parameter von Security Hub muss ein Standardwert zugewiesen werden.
+  `getInputParamsStepOutput`: definiert die Ausgaben für den GetInputParams Schritt des Kontroll-Runbooks
+ Jede Ausgabe hat ein `name``outputType`, und`selector`. Der `selector` sollte derselbe Selektor sein, der bei der `getExtraSteps` Methodenüberschreibung verwendet wurde.
+  `getRemediationParams`: definiert die Parameter, die an das Behebungs-Runbook übergeben und aus den Ausgaben der Schritte abgerufen werden. GetInputParams 

Um ein Beispiel anzuzeigen, navigieren Sie zu der Datei. `source/playbooks/SC/ssmdocs/SC_DynamoDB.1.ts`

### Schritt 3: Integrieren Sie jedes Control Runbook in ein Playbook
<a name="step-3-integrate-each-control-runbook-with-a-playbook"></a>

Für jedes Kontroll-Runbook, das im vorherigen Schritt erstellt wurde, müssen Sie es jetzt in die Infrastrukturdefinitionen im zugehörigen Playbook integrieren. Gehen Sie für jedes Kontroll-Runbook wie folgt vor.

**Wichtig**  
Wenn Sie das Kontroll-Runbook mit rohem YAML anstelle von Typoskript-IaC erstellt haben, fahren Sie mit dem nächsten Abschnitt fort.

Unter `/<playbook_name>/control_runbooks-construct.ts` Importieren Sie Ihre neu erstellte Kontroll-Runbook-Datei wie folgt:

```
import * as elasticache_2 from '../ssmdocs/SC_ElastiCache.2';
```

Gehen Sie als Nächstes zum Array für

```
const controlRunbooksRecord: Record<string, any>
```

Und fügen Sie einen neuen Eintrag hinzu, der die Kontroll-ID (Playbook-spezifisch) der von Ihnen erstellten `createControlRunbook` Methode zuordnet:

```
'ElastiCache.2': elasticache_2.createControlRunbook,
```

Fügen Sie die Playbook-spezifische Kontroll-ID wie folgt zur Liste der Korrekturen hinzu: ` <playbook_name>\_remediations.ts`

```
{ control: 'ElastiCache.2', versionAdded: '2.3.0' },
```

Das `versionAdded` Feld sollte die neueste Version der Lösung sein. Wenn das Hinzufügen der Korrektur gegen die Größenbeschränkung der Vorlage verstößt, erhöhen Sie den. `versionAdded` Sie können die Anzahl der Behebungen, die in jedem Playbook-Mitgliedsstapel enthalten sind, anpassen. `solution_env.sh`

### Schritt 4: Erstellen Sie die IAM-Rolle für die Problembehebung und integrieren Sie das Runbook
<a name="step-4-create-the-remediation-iam-role-integrate-remediation-runbook"></a>

Jede Problembehebung hat ihre eigene IAM-Rolle mit benutzerdefinierten Berechtigungen, die zur Ausführung des Wiederherstellungs-Runbooks erforderlich sind. Darüber hinaus muss die `RunbookFactory.createRemediationRunbook` Methode aufgerufen werden, um das in Schritt 1 erstellte Behebungs-Runbook zu den Vorlagen der Lösung hinzuzufügen. CloudFormation 

In der `remediation-runook-stack.ts` hat jede Korrektur ihren eigenen Codeblock in der Klasse. `RemediationRunbookStack` Der folgende Codeblock zeigt die Erstellung einer neuen IAM-Rolle und die Standardisierungs-Runbook-Integration für die 2.2-Behebung: ElastiCache

```
    //-----------------------
    // EnableElastiCacheVersionUpgrades
    //
    {
      const remediationName = 'EnableElastiCacheVersionUpgrades'; // should match the name of your remediation runbook
      const inlinePolicy = new Policy(props.roleStack, `ASR-Remediation-Policy-${remediationName}`);

      const remediationPolicy = new PolicyStatement();
      remediationPolicy.addActions('elasticache:ModifyCacheCluster');
      remediationPolicy.effect = Effect.ALLOW;
      remediationPolicy.addResources(`arn:${this.partition}:elasticache:*:${this.account}:cluster:*`);
      inlinePolicy.addStatements(remediationPolicy);

      new SsmRole(props.roleStack, 'RemediationRole ' + remediationName, { // creates the remediation IAM role
        solutionId: props.solutionId,
        ssmDocName: remediationName,
        remediationPolicy: inlinePolicy,
        remediationRoleName: `${remediationRoleNameBase}${remediationName}`,
      });

      RunbookFactory.createRemediationRunbook(this, 'ASR ' + remediationName, { // adds the remediation runbook to the solution's cloudformation templates
        ssmDocName: remediationName,
        ssmDocPath: ssmdocs,
        ssmDocFileName: `${remediationName}.yaml`,
        scriptPath: `${ssmdocs}/scripts`,
        solutionVersion: props.solutionVersion,
        solutionDistBucket: props.solutionDistBucket,
        solutionId: props.solutionId,
        namespace: namespace,
      });
    }
```

### Schritt 5: Unit-Tests aktualisieren
<a name="step-5-update-unit-tests"></a>

Wir empfehlen, die Komponententests zu aktualisieren und auszuführen, nachdem eine neue Problembehebung hinzugefügt wurde.

Zunächst müssen Sie der `source/test/regex_registry.ts` Datei alle neuen regulären Ausdrücke (die noch nicht hinzugefügt wurden) hinzufügen. Diese Datei erzwingt Tests für jeden neuen regulären Ausdruck, der in den Runbooks der Lösung enthalten ist. Sehen Sie sich die `addElastiCacheClusterTestCases` Funktion als Beispiel an, mit der reguläre Ausdrücke getestet werden, die bei ElastiCache Problembehebungen verwendet werden.

Schließlich müssen Sie die Snapshots für jeden Stapel aktualisieren. Snapshots sind versionsgesteuerte CloudFormation Vorlagendefinitionen, die verwendet werden, um Änderungen an der ASR-Infrastruktur nachzuverfolgen. Sie können diese Snapshot-Dateien aktualisieren, indem Sie den folgenden Befehl im Verzeichnis ausführen: `deployment`

```
./run-unit-tests.sh update
```

Jetzt sind Sie bereit, Ihre neue Problembehebung einzusetzen\! Im Abschnitt **Build and Deploy** weiter unten finden Sie Anweisungen zum Erstellen und Bereitstellen der Lösung mit Ihren neuen Änderungen.