Amazon CloudWatch Events
ユーザーガイド

AWS アカウント間のイベントの送受信

他の AWS アカウントとの間でイベントを送受信するように AWS アカウントを設定できます。これは、アカウントが同じ組織に属している、パートナーである組織に属している、または同様の関係を持っている場合に役立ちます。

イベントを送受信するようにアカウントを設定する場合は、イベントの送信先または受信元の AWS アカウントを指定できます。AWS Organizations 機能を使用する場合は、組織を指定し、その組織内のすべてのアカウントにアクセス許可を付与できます。詳細については、『AWS Organizations ユーザーガイド』の「AWS Organizations とは」を参照してください。

全体の手順は次のとおりです。

  • ​受信側アカウントで、指定した AWS アカウント、組織、またはすべての AWS アカウントが受取側アカウントにイベントを送信できるように、デフォルトのイベントバスに対するアクセス許可を編集します。

  • 送信側アカウントで、受信側アカウントのデフォルトのイベントバスをターゲットとする 1 つ以上のルールを設定します。

    送信側アカウントが、アクセス許可を持つ AWS 組織に属するため、イベントを送信するアクセス許可を持っている場合、送信側アカウントには、受信側アカウントにイベントを送信するためのポリシーが適用された IAM ロールも必要です。AWS マネジメントコンソール を使用して受信側アカウントをターゲットとするルールを作成する場合、このロールは自動的に作成されます。AWS CLI を使用する場合は、このロールを手動で作成する必要があります。

  • 受信側アカウントで、送信側アカウントからのイベントに一致する 1 つ以上のルールを設定します。

受信側アカウントがデフォルトのイベントバスにアクセス権限を追加する AWS リージョンは、送信側アカウントが受信側アカウントにイベントを送信するためのルールを作成するリージョンと同じである必要があります。

1 つのアカウントから別のアカウントに送信されたイベントは、カスタムイベントとして送信側アカウントに課金されます。受信側アカウントには課金されません。詳細については、Amazon CloudWatch 料金表をご覧ください。

受信側アカウントで、送信側アカウントから受信したイベントを第三のアカウントに送信するルールが設定されていても、それらのイベントは第三のアカウントには送信されません。

AWS アカウントで他の AWS アカウントからイベントを受信できるようにする

他のアカウントまたは組織からイベントを受信するには、まずアカウントのデフォルトのイベントバスに対するアクセス許可を編集する必要があります。デフォルトのイベントバスは、AWS のサービス、他の承認された AWS アカウント、および PutEvents コールからイベントを受け入れることができます。

他の AWS アカウントにアクセス許可を付与するように、デフォルトのイベントバスに対するアクセス許可を編集するときは、アカウント ID または組織 ID でアカウントを指定できます。または、すべての AWS アカウントからイベントを受信する選択ができます。

警告

すべての AWS アカウントからイベントを受信することを選択した場合、他のアカウントから受信するイベントにのみ一致するルールを慎重に作成してください。より安全なルールを作成するには、各ルールのイベントパターンに、Account フィールドと、イベントの受信元の 1 つ以上のアカウントのアカウント ID が必ず含まれるようにします。アカウントフィールドが含まれているイベントパターンを使用するルールは、他のアカウントから送信されたイベントと一致しません。詳細については、「CloudWatch イベント のイベントパターン」を参照してください。

コンソールを使用して、アカウントで他の AWS アカウントからイベントを受信できるようにするには

  1. https://console.aws.amazon.com/cloudwatch/にある CloudWatch コンソールを開きます。

  2. ナビゲーションペインで、[Event Buses]、[Add Permission] を選択します。

  3. [AWS アカウント] または [Organization (組織)] を選択します。

    [AWS アカウント] を選択した場合は、イベントの受信元 AWS アカウントの 12 桁のアカウント ID を入力します。他のすべての AWS アカウントからイベントを受信するには、[Everybody(*)] を選択します。

    [Organization (組織)] を選択した場合は、[自分の組織] を選択して、現在のアカウントが属する組織内のすべてのアカウントにアクセス許可を付与します。または、[Another organization (別の組織)] を選択し、その組織の組織 ID を入力します。組織 ID を入力するときは、o- プレフィックスを含める必要があります。

  4. [Add] を選択します。

  5. これらの手順を繰り返して、他のアカウントや組織を追加できます。

AWS CLI を使用して、アカウントで他の AWS アカウントからイベントを受信するには

  1. 1 つの特定の AWS アカウントでイベントの送信を有効にするには、次のコマンドを実行します。

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

    AWS 組織がイベントを送信できるようにするには、以下のコマンドを実行します。

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

    他のすべての AWS アカウントでイベントを送信を有効にするには、次のコマンドを実行します。

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

    aws events put-permission を複数回実行して、個々の AWS アカウントと組織の両方にアクセス許可を付与できますが、1 つのコマンドで個々のアカウントと組織の両方を指定することはできません。

  2. デフォルトのイベントバスに対するアクセス許可を設定したら、オプションで describe-event-bus コマンドを使用してそれらのアクセス許可を確認できます。

    aws events describe-event-bus

別の AWS アカウントへのイベントの送信

別のアカウントにイベントを送信するには、別の AWS アカウントのデフォルトのイベントバスをターゲットとする CloudWatch イベント ルールを設定できます。その受信側アカウントのデフォルトのイベントバスも、アカウントからイベントを受信するように設定する必要があります。

コンソールを使用してアカウントから別の AWS アカウントにイベントを送信するには

  1. https://console.aws.amazon.com/cloudwatch/にある CloudWatch コンソールを開きます。

  2. ナビゲーションペインで、[Events]、[Create Rule] の順に選択します。

  3. [イベントソース] で、[イベントパターン] を選択し、他のアカウントに送信するサービス名とイベントタイプを選択します。

  4. [Add Target] を選択します。

  5. [Target (ターゲット)] では、[別の AWS アカウントのイベントバス] を選択します。[アカウント ID] に、イベントの送信先 AWS アカウントの 12 桁のアカウント ID を入力します。

  6. 受信側アカウントが組織全体にアクセス許可を付与しているため、この送信側アカウントがイベントを送信するアクセス許可を持っている場合は、IAM ロールが必要です。

    • 自動的に IAM ロールを作成するには、[この特定のリソースに対して新しいロールを作成する] を選択します。

    • または、[既存のロールの使用] を選択します。ビルドを呼び出すのに十分なアクセス許可をすでに持つロールを選択します。CloudWatch イベント は、選択したロールに追加のアクセス許可を付与しません。

  7. ページの下部で、[Configure Details] を選択します。

  8. ルールの名前と説明を入力し、[Create Rule] を選択します。

AWS CLI を使用して別の AWS アカウントにイベントを送信するには

  1. 送信側アカウントが、受信側アカウントによってアクセス許可を付与される先の AWS 組織に属するため、イベントを送信するアクセス許可を持っている場合、送信側アカウントには、受信側アカウントにイベントを送信するためのポリシーが適用されたロールも必要です。この手順では、そのロールを作成する方法について説明します。

    送信者アカウントに、組織ではなく AWS アカウント ID を通じてイベントを送信するアクセス許可が付与されている場合、この手順はオプションです。ステップ 2 に進めます。

    1. 送信側アカウントに組織を通じてアクセス許可が付与されている場合は、必要な IAM ロールを作成します。まず、以下の内容で assume-role-policy-document.json というファイルを作成します。

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "events.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
    2. ロールを作成するには、以下のコマンドを入力します。

      $ aws iam create-role \ --profile sender \ --role-name event-delivery-role \ --assume-role-policy-document file://assume-role-policy-document.json
    3. 以下の内容で permission-policy.json という名前のファイルを作成します。

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "events:PutEvents" ], "Resource": [ "arn:aws:events:us-east-1:${receiver_account_id}:event-bus/default" ] } ] }
    4. このポリシーをロールにアタッチするには、以下のコマンドを入力します。

      $ aws iam put-role-policy \ --profile sender \ --role-name event-delivery-role \ --policy-name EventBusDeliveryRolePolicy --policy-document file://permission-policy.json
  2. put-rule コマンドを使用して、他のアカウントに送信するイベントタイプに一致するルールを作成します。

  3. 他のアカウントのデフォルトのイベントバスを、ルールのターゲットとして追加します。

    送信側アカウントに、アカウント ID を通じてイベントを送信するアクセス許可が付与されている場合、ロールを指定する必要はありません。次のコマンドを実行します。

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

    送信側アカウントに組織を通じてイベントを送信するアクセス許可が付与されている場合は、以下の例のようにロールを指定します。

    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"

別の AWS アカウントからのイベントに一致するルールの作成

アカウントが他の AWS アカウントからイベントを受信するように設定されている場合、それらのイベントに一致するルールを作成できます。他のアカウントから受信するイベントに一致するルールのイベントパターンを設定します。

ルールのイベントパターンで account で指定しない限り、新しいルールと既存のルールの両方を含めて、他のアカウントから受信するイベントに一致するアカウントのすべてのルールが、それらのイベントに基づいてトリガーされます。別のアカウントからイベントを受信し、自分のアカウントから生成されたときにそのイベントパターンのみでルールがトリガーされるようにするには、account を追加し、自分のアカウント ID をルールのイベントパターンに指定する必要があります。

すべての AWS アカウントからイベントを受け入れるように AWS アカウントを設定する場合、アカウントの各 CloudWatch イベント ルールに account を追加することを強くお勧めします。これにより、アカウントのルールで、不明な AWS アカウントからのイベントによるトリガーの発生を防止できます。ルールで account フィールドを指定するときは、1 つ以上の AWS アカウントのアカウント ID をフィールドで指定できます。

アクセス許可を付与した AWS アカウントの一致するイベントに対してルールをトリガーするには、ルールの [account] フィールドに * を指定しないでください。これにより、* はイベントの account フィールドに表示されないため、どのイベントとも一致しません。代わりに、ルールから account フィールドを省略します。

コンソールを使用して、別のアカウントからのイベントに一致するルールを作成するには

  1. https://console.aws.amazon.com/cloudwatch/にある CloudWatch コンソールを開きます。

  2. ナビゲーションペインで、[Events]、[Create Rule] の順に選択します。

  3. [Event Source] で、[Event Pattern] を選択し、ルールで一致するサービス名とイベントタイプを選択します。

  4. [Event Pattern Preview] の近くにある [Edit] を選択します。

  5. 編集ウィンドウで、このイベントを送信するどの AWS アカウントがルールと一致するかを指定する Account 行を追加します。たとえば、編集ウィンドウの元の表示が次のようであるとします。

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

    EBS ボリューム通知を送信する AWS アカウント 123456789012 および 111122223333 がルールと一致するようにするには、以下の行を追加します。

    { "account": [ "123456789012","111122223333" ], "source": [ "aws.ec2" ], "detail-type": [ "EBS Volume Notification" ] }
  6. イベントパターンを編集し、[Save] を選択します。

  7. 通常どおりルールの作成を終了し、アカウントで 1 つ以上のターゲットを設定します。

AWS CLI を使用して、別の AWS アカウントからのイベントに一致するルールを作成するには

  • put-rule コマンドを実行します。ルールのイベントパターンの Account フィールドに、ルールに一致するようにする他の AWS アカウントを指定します。次の例では、ルールは AWS アカウント 123456789012 および 111122223333 の Amazon EC2 インスタンスの状態変更に一致します。

    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"