Senden und Empfangen von Ereignissen zwischen AWS-Konten - Amazon CloudWatch Events

Senden und Empfangen von Ereignissen zwischen AWS-Konten

Anmerkung

Amazon EventBridge ist die bevorzugte Methode zum Verwalten Ihrer Ereignisse. CloudWatch Events und EventBridge liegen der gleiche Service und die gleiche API zugrunde, EventBridge bietet jedoch mehr Funktionen. Änderungen, die Sie in CloudWatch oder EventBridge vornehmen, werden in jeder Konsole angezeigt. Weitere Informationen finden Sie unter Amazon EventBridge.

Sie können Ihr AWS-Konto so einrichten, dass es Ereignisse an andere AWS-Kontos sendet oder Ereignisse von anderen Kontos empfängt. Dies kann nützlich sein, wenn die Konten derselben Organisation gehören oder Organisationen, die Partner sind oder eine ähnliche Beziehung haben.

Wenn Sie Ihr Konto so eingerichtet haben, dass es Ereignisse sendet bzw. empfängt, können Sie angeben, welche einzelnen AWS-Konten von ihren Konten Ereignisse empfangen oder senden können. Wenn Sie die AWS Organizations-Funktion verwenden, können Sie eine Organisation angeben und Zugriff auf alle Konten in dieser Organisation gewähren. Weitere Informationen finden Sie unter Was ist AWS Organizations? im AWS Organizations-Benutzerhandbuch.

Der gesamte Ablauf ist folgendermaßen:

  • Bearbeiten Sie im Empfänger-Konto auf dem Standard-Ereignisbus die Berechtigungen, sodass die angegebenen AWS-Konten, ein Unternehmen oder alle AWS-Konten Ereignisse an das Empfängerkonto senden können.

  • Richten Sie auf dem Sender-Konto eine oder mehrere Regeln ein, die den Standard-Ereignisbus des Empfängers als Ziel haben.

    Wenn das Senderkonto über Berechtigungen zum Senden von Ereignissen verfügt, weil es Teil einer AWSOrganisation ist, die über Berechtigungen verfügt, muss das Senderkonto auch über eine IAM-Rolle mit Richtlinien verfügen, die es ihm ermöglichen, Ereignisse an das Empfängerkonto zu senden. Wenn Sie die AWS Management Console verwenden, um die Regel zu erstellen, die das Empfänger-Konto betrifft, geschieht dies automatisch. Wenn Sie stattdessen die AWS CLI verwenden möchten, müssen Sie die Rolle manuell erstellen.

  • Richten Sie auf dem Empfänger-Konto eine oder mehrere Regeln ein, die mit Ereignissen übereinstimmen, die vom Senderkonto kommen.

Die AWS Region, in der vom Empfängerkonto Berechtigungen für den Standard-Ereignisbus hinzufügt werden, muss dieselbe Region sein, in der das Senderkonto die Regel zum Senden von Ereignissen an das Empfängerkonto erstellt.

Ereignisse, die von einem Konto zu einem anderen gesendet werden, werden dem sendenden Konto als benutzerdefinierte Ereignisse in Rechnung gestellt. Das empfangende Konto wird nicht belastet. Weitere Informationen hierzu finden Sie unter Amazon CloudWatch – Preise.

Falls ein Empfänger-Konto eine Regel festlegt, dass Ereignisse, die von einem Sender-Konto empfangen wurden, zu einem dritten Konto gesendet werden, werden diese Ereignisse jedoch nicht an das dritte Konto weitergeleitet.

Aktivieren Ihres AWS-Kontos, um Ereignisse aus anderen AWS-Konten zu empfangen

Zum Empfang bestimmter Ereignisse von anderen Konten bzw. Organisationen, müssen Sie zuerst die Berechtigungen auf dem Standard-Ereignisbus des Kontos bearbeiten. Der Standard-Ereignisbus nimmt Ereignisse von AWSDiensten, anderen autorisierten AWSKonten und PutEventsAnrufen entgegen.

Wenn Sie die Berechtigungen für Ihren Standard-Ereignisbus bearbeiten, um die Berechtigung auch anderen AWS-Konten zu gewähren, können Sie Konten nach Konto-ID bzw. Organisations-ID angeben. Sie können sich entscheiden, Ereignisse aus allen AWS-Konten zu empfangen.

Warnung

Wenn Sie Ereignisse aus allen AWS-Konten empfangen möchten, achten Sie darauf, Regeln zu erstellen, die nur mit den Ereignissen übereinstimmen, die Sie von anderen Benutzern erhalten. Um sicherere Regeln zu erstellen, achten Sie darauf, dass das Ereignismuster für jede Regel ein Account-Feld mit den Konto-IDs eines oder mehrerer Konten enthält, von denen Ereignisse empfangen werden sollen. Regeln mit einem Ereignismuster, das das Feld „Account-(Konto)“ enthält, stimmen nicht mit Ereignissen überein, die von Konten gesendet wurden, die nicht im Feld Account aufgelistet werden. Weitere Informationen finden Sie unter Ereignisse in CloudWatch Events.

Aktivieren Ihres Kontos, um mithilfe der Konsole Ereignisse aus anderen AWS-Konten zu empfangen
  1. Öffnen Sie die CloudWatch-Konsole unter https://console.aws.amazon.com/cloudwatch/.

  2. Wählen Sie im Navigationsbereich Event Buses und Add Permission aus.

  3. Wählen Sie AWS-Konto oder Organisation aus.

    Wenn Sie AWS-Konto auswählen, geben Sie die 12-stellige AWS-Konto-ID des Kontos ein, von dem Sie Ereignisse empfangen. Oder wählen Sie AWSEverybody(*) aus, um Ereignisse von allen anderen -Konten zu empfangen.

    Wenn Sie Organisation auswählen, wählen Sie Meine Organisation aus, um allen Konten in der Organisation, zu der das aktuelle Konto gehört, Berechtigungen zu erteilen. Alternativ wählen Sie Another organization (Andere Organisation) aus, und geben die Organisations-ID dieser Organisation ein. Sie müssen das Präfix "o-" einschließen, wenn Sie die Organisations-ID angeben.

  4. Wählen Sie Add (Hinzufügen) aus.

  5. Zum Hinzufügen weiterer Konten bzw. Organisationen wiederholen Sie diese Schritte.

Aktivieren Ihres Kontos, um mithilfe der AWS Ereignisse aus anderen AWS CLI-Konten zu empfangen
  1. Um ein bestimmtes AWS-Konto zu aktivieren, sodass es Ereignisse senden kann, führen Sie den folgenden Befehl aus:

    aws events put-permission --action events:PutEvents --statement-id MySid --principal SenderAccountID

    Um einer AWS-Organisation zu ermöglichen, Ereignisse zu senden, führen Sie den folgenden Befehl aus:

    aws events put-permission --action events:PutEvents --statement-id MySid --principal \* --condition '{"Type" : "StringEquals", "Key": "aws:PrincipalOrgID", "Value": "SenderOrganizationID"}'

    Um alle anderen AWS-Konten zu aktivieren, sodass sie Ereignisse senden können, führen Sie den folgenden Befehl aus:

    aws events put-permission --action events:PutEvents --statement-id MySid --principal \*

    Sie können aws events put-permission mehrere Male ausführen, um sowohl einzelnen AWS-Konten als auch Organisationen Berechtigungen zu erteilen, aber Sie können kein Einzelkonto und eine Organisation in einem Befehl angeben.

  2. Nachdem Sie Berechtigungen für Ihren Standard-Ereignisbus eingerichtet haben, können Sie optional den Befehl describe-event-bus zum Überprüfen der Berechtigungen verwenden:

    aws events describe-event-bus

Senden von Ereignissen an ein anderes AWS-Konto

Wenn Sie Ereignisse an ein anderes Konto senden möchten, konfigurieren Sie eine CloudWatch Events-Regel, die den Standardereignisbus eines anderen AWS-Kontos zum Ziel hat. Die Standard-Ereignibus des empfangenden Kontos muss auch so konfiguriert werden, dass er die Ereignisse von Ihrem Konto empfangen kann.

So senden Sie Ereignisse von Ihrem Konto mithilfe der Konsole zu einem anderen AWS-Konto
  1. Öffnen Sie die CloudWatch-Konsole unter https://console.aws.amazon.com/cloudwatch/.

  2. Wählen Sie im Navigationsbereich Events und die Option Create Rule aus.

  3. Wählen Sie für Ereignisquelle die Option Ereignismuster und dann den Servicenamen und die Ereignistypen aus, die Sie an das andere Konto senden möchten.

  4. Wählen Sie Add Target aus.

  5. Wählen Sie für Ziel, die Option Ereignisbus in einem anderen AWS -Konto aus. Geben Sie dann für Konto-ID die 12-stellige Konto-ID des AWS-Kontos ein, an das die Ereignisse gesendet werden sollen.

  6. Eine IAM-Rolle ist erforderlich, wenn dieses Sender-Konto über Berechtigungen zum Senden von Ereignissen verfügt, da das Empfänger-Konto Berechtigungen für eine gesamte Organisation erteilt.

    • Um automatisch eine IAM-Rolle zu erstellen, wählen Sie Create a new role for this specific resource (Eine neue Rolle für diese spezifische Ressource erstellen).

    • Alternativ wählen Sie Vorhandene Rolle verwenden aus. Dies muss eine Rolle sein, die bereits über die erforderlichen Berechtigungen zum Aufrufen des Builds verfügt. CloudWatch Events gewährt der ausgewählten Rolle keine zusätzlichen Berechtigungen.

  7. Wählen Sie am unteren Rand der Seite Configure Details aus.

  8. Geben Sie einen Namen und eine Beschreibung für die Regel ein und wählen Sie Create Rule aus.

So senden Sie Ereignisse mithilfe der AWS zu einem anderen AWS CLI-Konto
  1. Wenn das Sender-Konto über Berechtigungen zum Senden von Ereignissen verfügt, da es Teil einer AWS-Organisation ist, der das Empfänger-Konto Berechtigungen erteilt hat, muss das Sender-Konto ebenso über eine Rolle mit Richtlinien verfügen, die ihm das Senden von Ereignissen an das Empfängerkonto ermöglichen. In diesem Schritt wird erläutert, wie Sie diese Rolle erstellen.

    Falls dem Sender-Konto die Berechtigung zum Senden von Ereignissen anhand seiner AWS-Konto-ID und nicht durch eine Organisation erteilt wurde, ist dieser Schritt optional. Sie können Schritt 2 überspringen.

    1. Falls dem Sender-Konto Berechtigungen durch eine Organisation erteilt wurden, erstellen Sie die erforderliche IAM-Rolle. Erstellen Sie zuerst eine Datei mit dem Namen assume-role-policy-document.json und dem folgenden Inhalt:

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "events.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
    2. Zum Erstellen der Rolle verwenden Sie den folgenden Befehl:

      $ aws iam create-role \ --profile sender \ --role-name event-delivery-role \ --assume-role-policy-document file://assume-role-policy-document.json
    3. Erstellen Sie eine Datei mit dem Namen permission-policy.json und dem folgenden Inhalt:

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "events:PutEvents" ], "Resource": [ "arn:aws:events:us-east-1:${receiver_account_id}:event-bus/default" ] } ] }
    4. Geben Sie den folgenden Befehl aus, um der Rolle diese Richtlinie anzufügen:

      $ aws iam put-role-policy \ --profile sender \ --role-name event-delivery-role \ --policy-name EventBusDeliveryRolePolicy --policy-document file://permission-policy.json
  2. Verwenden Sie den Befehl put-rule, um eine Regel zu erstellen, die dem Ereignistyp entspricht, der zum anderen Konto gesendet werden soll.

  3. Fügen Sie den Standard-Ereignisbus des anderen Kontos als Ziel der Regel hinzu.

    Wenn dem Sender-Konto anhand seiner Konto-ID Berechtigungen zum Senden von Ereignissen erteilt wurden, müssen Sie keine Rolle angeben. Führen Sie den folgenden Befehl aus:

    aws events put-targets --rule NameOfRuleMatchingEventsToSend --targets "Id"="MyId","Arn"="arn:aws:events:region:$ReceiverAccountID:event-bus/default"

    Wenn dem Sender-Konto durch seine Organisation Berechtigungen zum Senden von Ereignissen erteilt wurden, geben Sie eine Rolle an, wie im folgenden Beispiel:

    aws events put-targets --rule NameOfRuleMatchingEventsToSend --targets "Id"="MyId","Arn"="arn:aws:events:region:$ReceiverAccountID:event-bus/default","RoleArn"="arn:aws:iam:${sender_account_id}:role/event-delivery-role"

Schreiben von Regeln, die mit Ereignissen von einem anderen AWS-Konto übereinstimmen

Wenn Ihr Konto für den Empfang von Ereignissen von anderen AWS-Konten verfügen, können Sie Regeln schreiben, die mit diesen Ereignissen übereinstimmen. Legen Sie das Ereignismuster der Regel so fest, dass es mit den Ereignissen, die Sie vom anderen Konto empfangen, übereinstimmt.

Wenn Sie nicht im Ereignismuster einer Regel account angeben, lösen alle neuen und vorhandenen Regeln Ihres Kontos, die mit Ereignissen, die Sie von anderen Konten erhalten, übereinstimmen, auf Grundlage dieser Ereignisse aus. Wenn Sie Ereignisse von einem anderen Konto empfangen und Sie möchten, dass eine Regel von diesem Ereignismuster nur dann ausgelöst wird, wenn es von Ihrem eigenen Konto generiert wurde, dann müssen Sie dem Ereignismuster der Regel account hinzufügen und Ihre eigene Konto-ID angeben.

Wenn Sie Ihr AWS-Konto so einrichten, dass es Ereignisse aus allen AWS-Konten akzeptiert, sollten Sie account jeder CloudWatch Events-Regel in Ihrem Konto hinzufügen. Dadurch wird verhindert, dass Regeln in Ihrem Konto von Ereignisse unbekannter AWS-Konten ausgelöst werden. Wenn Sie in der Regel das Feld account festlegen, können Sie Konto-IDs von mehr als einem AWS-Konto in dem Feld angeben.

Geben Sie im Feld AWS der Regel nicht "*" an, wenn eine Regel bei einem entsprechenden Ereignis über jedes beliebige account-Konto ausgelöst werden soll, dem Sie entsprechende Berechtigungen erteilt haben. Da "*" niemals im Feld account eines Ereignisses erscheint, würden in diesem Fall keine Ereignisse gefunden werden. Lassen Sie stattdessen das Feld account in der Regel weg.

So schreiben Sie eine Regel, die mit Ereignissen anderer Konten, die die Konsole verwenden, übereinstimmt
  1. Öffnen Sie die CloudWatch-Konsole unter https://console.aws.amazon.com/cloudwatch/.

  2. Wählen Sie im Navigationsbereich Events und die Option Create Rule aus.

  3. Wählen Sie für Event Source die Option Event Pattern aus und dann den Servicenamen und die Ereignistypen, mit denen die Regel übereinstimmen soll.

  4. Wählen Sie neben Event Pattern Preview die Option Edit.

  5. Fügen Sie im Bearbeitungsfenster eine Account-Zeile hinzu, in der Sie angeben, welche AWS-Konten, die dieses Ereignis senden, mit der Regel übereinstimmen sollen. Wenn das Bearbeitungsfenster z. B. ursprünglich Folgendes zeigt:

    { "source": [ "aws.ec2" ], "detail-type": [ "EBS Volume Notification" ] }

    Fügen Sie Folgendes hinzu, damit die Regel mit den EBS-Volume-Benachrichtigungen übereinstimmt, die durch die AWS-Konten 123456789012 und 111122223333 verschickt werden:

    { "account": [ "123456789012","111122223333" ], "source": [ "aws.ec2" ], "detail-type": [ "EBS Volume Notification" ] }
  6. Nach der Bearbeitung der Ereignismuster wählen Sie Save.

  7. Beenden Sie die Regel wie üblich, indem Sie ein oder mehrere Ziele in Ihrem Konto einrichten.

So schreiben Sie eine Regel, die mit Ereignissen anderer AWS-Konten, die die AWS CLI verwenden, übereinstimmt
  • Verwenden Sie den put-rule-Befehl. Geben Sie im Ereignismuster der Regel im Account-Feld die anderen AWS-Konten ein, die die Regel zuordnen soll. Im folgenden Beispiel stimmt die Regel mit Statusänderungen der Amazon EC2-Instance in den AWS-Konten 123456789012 und 111122223333 überein:

    aws events put-rule --name "EC2InstanceStateChanges" --event-pattern "{\"account\":["123456789012", "111122223333"],\"source\":[\"aws.ec2\"],\"detail-type\":[\"EC2 Instance State-change Notification\"]}" --role-arn "arn:aws:iam::123456789012:role/MyRoleForThisRule"

Migration einer Sender-Empfänger-Beziehung zur Verwendung von AWS Organizations

Wenn Sie ein Senderkonto haben, dem Berechtigungen direkt für seine Konto-ID erteilt wurden, und Sie nun diese Berechtigungen widerrufen und dem Absenderkonto Zugriff gewähren möchten, indem Sie einer Organisation Berechtigungen erteilen, müssen Sie einige zusätzliche Schritte durchführen. Diese Schritte stellen sicher, dass die Ereignisse aus dem Senderkonto noch auf das Empfängerkonto gelangen können. Dies liegt daran, dass Konten, die die Berechtigung zum Senden von Ereignissen über eine Organisation erhalten, dafür auch eine IAM-Rolle nutzen müssen.

So fügen Sie die Berechtigungen hinzu, die für die Migration einer Sender-Empfänger-Beziehung erforderlich sind
  1. Erstellen Sie im Senderkonto eine IAM-Rolle mit Richtlinien, mit der sie Ereignisse an das Empfängerkonto senden kann.

    1. Erstellen Sie eine Datei mit dem Namen assume-role-policy-document.json und dem folgenden Inhalt:

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "events.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
    2. Zum Erstellen der IAM-Rolle verwenden Sie den folgenden Befehl:

      $ aws iam create-role \ --profile sender \ --role-name event-delivery-role \ --assume-role-policy-document file://assume-role-policy-document.json
    3. Erstellen Sie eine Datei mit dem Namen permission-policy.json und dem folgenden Inhalt:

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "events:PutEvents" ], "Resource": [ "arn:aws:events:us-east-1:${receiver_account_id}:event-bus/default" ] } ] }
    4. Geben Sie den folgenden Befehl aus, um der Rolle diese Richtlinie anzufügen:

      $ aws iam put-role-policy \ --profile sender \ --role-name event-delivery-role \ --policy-name EventBusDeliveryRolePolicy --policy-document file://permission-policy.json
  2. Bearbeiten Sie jede vorhandene Regel im Senderkonto, die den Standard-Ereignisbus des Empfängerkontos als Ziel hat. Bearbeiten Sie die Regel, indem Sie die Rolle, die Sie in Schritt 1 erstellt haben, zu den Zielinformationen hinzufügen. Verwenden Sie den folgenden Befehl:

    aws events put-targets --rule Rulename --targets "Id"="MyID","Arn"="arn:aws:events:region:$ReceiverAccountID:event-bus/default","RoleArn"="arn:aws:iam:${sender_account_id}:role/event-delivery-role"
  3. Führen Sie im Empfängerkonto den folgenden Befehl aus, um den Konten in der Organisation die Berechtigung zu erteilen, Ereignisse an das Empfängerkonto zu senden:

    aws events put-permission --action events:PutEvents --statement-id Sid-For-Organization --principal \* --condition '{"Type" : "StringEquals", "Key": "aws:PrincipalOrgID", "Value": "SenderOrganizationID"}'

    Optional können Sie auch die ursprünglich direkt dem Senderkonto gewährten Berechtigungen widerrufen:

    aws events remove-permission --statement-id Sid-for-SenderAccount