Neue Abhilfemaßnahmen hinzufügen - Automatisierte Sicherheitsreaktion auf AWS

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

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

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).

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

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

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

  1. Melden Sie sich bei der AWS Systems Manager Manager-Konsole an und erhalten Sie ein Beispiel für das gefundene JSON.

  2. Erstellen Sie ein Automatisierungs-Runbook, das den Befund behebt. Verwenden Sie auf der Registerkarte Mein Eigentum alle ASR- Dokumente auf der Registerkarte Dokumente als Ausgangspunkt.

  3. 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

  1. Melden Sie sich bei der AWS Identity and Access Management-Konsole an.

  2. 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 beispielsweise CIS v1.2.0 Control 5.6 hinzufügen, muss die Rolle wie folgt lauten. SO0111-Remediate-CIS-1.2.0-5.6

  3. 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

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 lautetstandard_control_*AutoTrigger*.

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

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

  4. Speichern und aktivieren Sie die Regel.

Überblick über den CDK-Workflow

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.

  2. Erstellen Sie die Control Runbooks.

  3. Integrieren Sie jedes Control Runbook in ein Playbook.

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

  5. Unit-Tests aktualisieren

Schritt 1: Erstellen Sie das Remediation Runbook

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

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

<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`),
      ]),
    });
  }
}
  • securityControlIdist die Kontroll-ID für die Korrektur, die Sie hinzufügen, so wie sie in der Ansicht der konsolidierten Kontrollen in Security Hub definiert ist.

  • remediationNameist der Name, den Sie für Ihr Behebungs-Runbook gewählt haben.

  • scopeist der Umfang der Ressource, die Sie korrigieren, und gibt an, ob sie global oder in einer bestimmten Region vorhanden ist.

  • resourceIdRegexist 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.

  • resourceIdNameist der Name, den Sie für die Ressourcen-ID festlegen möchtenresourceIdRegex, mit der Sie erfasst wurden. Dieser Name sollte mit dem Namen des Ressourcen-ID-Parameters in Ihrem Behebungs-Runbook übereinstimmen.

  • updateDescriptionist 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 exportierencreateControlRunbook, 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 Parameter enthält, 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 nameoutputType, undselector. 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

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

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

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.