Wie erstelle ich eine EventBridge-Regel, die den Eingangstransformator verwendet, um eine Amazon-SNS-Benachrichtigung für Menschen lesbar zu machen?

Lesedauer: 7 Minute
0

Ich möchte eine Amazon-EventBridge-Regel erstellen, um eine benutzerdefinierte Amazon Simple Notification Service (Amazon SNS)-Benachrichtigung zu initiieren, die für Menschen lesbar ist.

Kurzbeschreibung

Um Amazon-SNS-Ereignisbenachrichtigungen für Menschen lesbar zu machen, verwenden Sie den Eingangstransformator in EventBridge. Der Eingangstransformator kann Text aus einem Ereignis anpassen, bevor er an das Ziel einer EventBridge-Regel gesendet wird. Ein vollständiges Tutorial finden Sie unter Tutorial: Den Eingangstransformator verwenden, um Weiterleitungen von EventBridge an das Ereignisziel anzupassen

Sie können beispielsweise ein SNS-Thema als Ziel konfigurieren, um benutzerdefinierten Ereignistext vom Eingangstransformator zu empfangen. Sie können auch eine EventBridge-Regel erstellen, die den API-Aufrufen im Zusammenhang mit Sicherheitsgruppen entspricht, die von AWS CloudTrail erfasst werden. Die Regel ist mit einem Ereignismuster konfiguriert, das zu den entsprechenden API-Aufrufen passt.

Die folgende Lösung enthält zwei Beispielereignisse, mit denen Sie Ihre eigene EventBridge-Regel erstellen können, um eine Amazon-SNS-Benachrichtigung für Menschen lesbar zu machen.

Behebung

Beispielereignis für die Änderung des Amazon-EC2-Status

Im folgenden Beispiel wird ein SNS-Thema als Ziel konfiguriert, das benutzerdefinierten Ereignistext vom Eingangstransformator empfängt. In diesem Beispiel handelt es sich bei dem Ereignis um eine Statusänderung von Amazon Elastic Compute Cloud (Amazon EC2).

Im Folgenden finden Sie ein Beispielereignis, das im JSON-Format auf dem EventBridge Event Bus veröffentlicht wurde:

{  
    "version": "0",  
    "id": "2ad63080-2526-d42c-4983-123456789",  
    "detail-type": "EC2 Instance State-change Notification",  
    "source": "aws.ec2",  
    "account": "0123456789",  
    "time": "2023-05-17T16:30:32Z",  
    "region": "us-east-1",  
    "resources": [  
        "arn:aws:ec2:us-east-1:0123456789:instance/i-12345abcdefg"  
    ],  
    "detail": {  
        "instance-id": "i-12345abcdefg",  
        "state": "running"  
    }  
}

Der Eingangstransformator besteht aus zwei Abschnitten:

  • Eingabepfad: Hier definieren Sie Variablen, die einen JSON-Pfad verwenden, um auf Werte in der ursprünglichen Ereignisquelle zu verweisen.
  • **Vorlage:**Eine Vorlage für die Informationen, die Sie an Ihr Ziel weitergeben möchten.

Eingabepfad

Informationen zum Erstellen eines Eingabepfads finden Sie unter Beispiele für Eingangstransformationen. Verwenden Sie für dieses Beispiel den folgenden Eingabepfad:

{  
"timestamp": "$.time",  
"instance": "$.detail.instance-id",  
"state": "$.detail.state"  
}

Vorlagen

Verwenden Sie für dieses Beispiel die folgenden Vorlagen:

Beispiel 1:

"Instance example-instance is in example-state state"

Beispiel 2:

"At example-timestamp, Instance example-instance changed its state to example-state. "

Die obigen Beispielvorlagen senden Nachrichten im folgenden Format an das Ziel:

Beispiel 1:

"Instance i-12345abcdefg is in running state"

Beispiel 2:

"At 2023-05-17T16:30:32Z, Instance i-12345abcdefg changed its state to running. "

EventBridge für die Verwendung des Eingangstransformators konfigurieren

Gehen Sie wie folgt vor, um EventBridge so zu konfigurieren, dass benutzerdefinierte Nachrichten an ein SNS-Thema gesendet werden:

**Hinweis:**Diese Anweisungen folgen den Schritten unter Erstellen einer Regel, die auf Ereignisse reagiert. Sie bieten auch spezifische Schritte zur Konfiguration des Eingangstransformators.

  1. Definieren Sie eine EventBridge-Regel für Amazon-EC2-Statusänderungsereignisse.

  2. Erstellen Sie das Ereignismuster. Wählen Sie im Abschnitt Erstellungsmethode für Methode die Option Benutzerdefiniertes Muster (JSON-Editor) aus.

  3. Geben Sie unter Ereignismuster das folgende JSON-Beispiel für Amazon-EC2-Statusänderungsereignisse ein:

{  
"source": ["aws.ec2"],  
"detail-type": ["EC2 Instance State-change Notification"]  
}
  1. Wählen Sie Weiter aus.

  2. Wählen Sie für Ziel-Typen den AWS-Service aus.

  3. Wählen Sie unter Ziel auswählen die Option SNS-Thema aus. Wählen Sie dann Ihr Thema aus der Dropdown-Liste aus.

  4. Wählen Sie für Zusätzliche Einstellungen in der Dropdownliste Zieleingabe konfigurieren die Option Eingangstransformator aus. Wählen Sie dann Eingangstransformator konfigurieren aus.

  5. Kopieren Sie im Abschnitt Zieleingangstransformator für Eingabepfad den folgenden JSON-Code und fügen Sie ihn ein:

{  
"timestamp": "$.time",  
"instance": "$.detail.instance-id",  
"state": "$.detail.state"  
}
  1. Kopieren Sie für Eingabevorlage die folgenden Zeichenkettenvorlagen und fügen Sie sie ein:
"Instance example-instance is in example-state state"  
"At example-timestamp, Instance example-instance changed its state to example-state. "
  1. Wählen Sie Bestätigen und dann Weiter aus.

  2. (Optional) Fügen Sie Ihrer Regel Tags hinzu und wählen Sie dann Weiter aus.

  3. Überprüfen Sie die Details der Regel und wählen Sie dann Regel erstellen aus.

Beispielereignis für einen API-Aufruf einer Amazon-EC2-Sicherheitsgruppe

Verwenden Sie im folgenden Beispielereignis CreateSecurityGroup in einer Virtual Private Cloud (VPC), um eine Sicherheitsgruppe zu erstellen. AWS CloudTrail erfasst das Ereignis und das Ereignis wird in Amazon CloudWatch im folgenden JSON-Format veröffentlicht:

{
    "version": "0",
    "id": "41dff147-cfbc-492a-9a98-9dd00d082417",
    "detail-type": "AWS API Call via CloudTrail",
    "source": "aws.ec2",
    "account": "123456789012",
    "time": "2017-07-14T16:36:23Z",
    "region": "us-east-1",
    "resources": [],
    "detail": {
        "eventVersion": "1.05",
        "userIdentity": {
            "type": "Root",
            "principalId": "123456789012",
            "arn": "arn:aws:iam::123456789012:root",
            "accountId": "123456789012",
            "accessKeyId": "ASIAIRP4G1234567891Q",
            "userName": "iamuser",
            "sessionContext": {
                "attributes": {
                    "mfaAuthenticated": "false",
                    "creationDate": "2017-07-14T16:27:38Z"
                }
            }
        },
        "eventTime": "2017-07-14T16:36:23Z",
        "eventSource": "ec2.amazonaws.com",
        "eventName": "CreateSecurityGroup",
        "awsRegion": "us-east-1",
        "sourceIPAddress": "72.21.196.64",
        "userAgent": "console.ec2.amazonaws.com",
        "requestParameters": {
            "groupName": "test",
            "groupDescription": "test",
            "vpcId": "vpc-54a4232d"
        },
        "responseElements": {
            "_return": true,
            "groupId": "sg-82d531f3"
        },
        "requestID": "a4609e55-69ac-4a2d-8057-843dc8b4658b",
        "eventID": "7774b898-59c1-48a5-9c41-af1bcaa04612",
        "eventType": "AwsApiCall"
    }
}

Beispiel für die Erstellung einer benutzerdefinierten, für Menschen lesbaren Benachrichtigung

Verwenden Sie das folgende Beispiel, um benutzerdefinierte, für Menschen lesbare Benachrichtigungen von EventBridge im JSON-Format zu erstellen.

  1. Erstellen Sie eine EventBridge-Regel für API-Aufrufe im Zusammenhang mit Sicherheitsgruppen. Wählen Sie für Ereignismuster die Option Benutzerdefiniertes Ereignismuster erstellen aus. Ändern Sie das Beispielereignismuster für Ihren Anwendungsfall. Beachten Sie, dass die Beispielbenachrichtigung für CreateSecurityGroup gilt. Das folgende Beispielereignismuster umfasst jedoch alle API-Aufrufaktionen, die sich auf Sicherheitsgruppen beziehen:
{
  "source": [
    "aws.ec2"
  ],
  "detail-type": [
    "AWS API Call via CloudTrail"
  ],
  "detail": {
    "eventSource": [
      "ec2.amazonaws.com"
    ],
    "eventName": [
      "CreateSecurityGroup",
      "AuthorizeSecurityGroupEgress",
      "AuthorizeSecurityGroupIngress",
      "DeleteSecurityGroup",
      "RevokeSecurityGroupEgress",
      "RevokeSecurityGroupIngress",
      "DescribeStaleSecurityGroups",
      "DescribeSecurityGroups",
      "DescribeSecurityGroupReferences"
    ]
  }
}
  1. Wählen Sie für Ziel-Typen den AWS-Service aus.

  2. Wählen Sie unter Ziel auswählen die Option SNS-Thema aus. Wählen Sie dann Ihr Thema aus der Dropdown-Liste aus.

  3. Wählen Sie für Zusätzliche Einstellungen in der Dropdownliste Zieleingabe konfigurieren die Option Eingangstransformator aus. Wählen Sie dann Eingangstransformator konfigurieren aus.

  4. Fügen Sie im Abschnitt Zieleingangstransformator für Eingabepfad den folgenden JSON-Code ein. Fügen Sie alle Schlüssel-Wert-Paare hinzu, die Sie in Ihrer Benachrichtigung verwenden möchten. Ändern Sie den folgenden Beispieleingabepfad für Ihren Anwendungsfall:

{  
    "sgname": "$.detail.requestParameters.groupName",  
    "sourceip": "$.detail.sourceIPAddress",  
    "vpcid": "$.detail.requestParameters.vpcId",  
    "action": "$.detail.eventName",  
    "sgid": "$.detail.responseElements.groupId",  
    "time": "$.detail.eventTime",  
    "region": "$.detail.awsRegion",  
    "user": "$.detail.userIdentity.userName",  
    "reqid": "$.detail.requestID"  
}
  1. Fügen Sie für Eingabevorlage die folgenden Zeichenkettenvorlagen ein. Fügen Sie eine Zeichenfolge mit Platzhaltern für Werte aus Ihrem Eingabepfad ein. Diese Zeichenfolge ist der für Menschen lesbare Text Ihrer Benachrichtigung. Ändern Sie die folgende Beispieleingabevorlage für Ihren Anwendungsfall:
"User example-user  has executed API call example-action from source IP example-sourceip on security group example-sgid/example-sgname that belongs to vpc example-vpcid in region example-region at time(UTC) example-time. The Request ID is example-reqid."
  1. Wählen Sie Bestätigen und dann Weiter aus.

  2. (Optional) Fügen Sie Ihrer Regel Tags hinzu und wählen Sie dann Weiter aus.

  3. Überprüfen Sie die Details der Regel und wählen Sie dann Regel erstellen aus.

Problembehebung

Wenn Sie beim Speichern einer Vorlage mit Zeilenumbrüchen die Fehlermeldung Invalid InputTemplate erhalten, schließen Sie jede Zeile mit doppelten Anführungszeichen. Siehe folgende Beispiele:

"example-type example-arn has executed action API example-action on Security Group example-sgid located in AWS region example-region at example-time (UTC)."
"Event Details:"
"Request ID: example-requestid"
"Event ID: example-eventid"
"Event Source: example-eventsource"
"Event Type: example-eventtype"

Wenn Ihre Regel ausgeführt wird, das Ziel aber nicht aufrufen kann, konfigurieren Sie eine Warteschlange für unzustellbare Nachrichten, damit EventBridge Fehler empfängt, die sich auf den Eingangstransformator beziehen.

EventBridge unterstützt maximal 100 Variablen in Eingabepfadzuordnungen. Um mehr als 10 Variablen zu extrahieren, übergeben Sie das gesamte Ereignis an eine AWS-Lambda-Funktion. Schreiben Sie diese Funktion, um Ihre Variablen zu analysieren und einen Nachrichtentext im für die Veröffentlichung erforderlichen Format zu erstellen. Erstellen Sie dann einen Nachrichtentext im erforderlichen Format für die Veröffentlichung in Amazon SNS. Weitere Informationen finden Sie unter Wie kann ich mithilfe einer Lambda-Funktion eine Nachricht zu einem Amazon-SNS-Thema veröffentlichen?

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 4 Monaten