EventBridge と Amazon SNS を使用して EC2 Linux インスタンスに設定されたセキュリティグループへの変更をモニタリングするにはどうすればよいですか。

最終更新日: 2022 年 1 月 6 日

Amazon Elastic Compute Cloud (Amazon EC2) Linux インスタンス用にセキュリティグループを設定しています。Amazon EventBridge と Amazon Simple Notification Service (Amazon SNS) を使用して、セキュリティグループに対する変更をモニタリングするにはどうすればよいですか?

簡単な説明

セキュリティグループを変更するための API コールが行われたときにトリガーする EventBridge ルールを作成します。その後、ルールに一致するイベントについての Amazon SNS 通知を設定します。

解決方法

Amazon SNS トピックを作成してサブスクライブする

1.    Amazon SNS コンソールを開きます。

2.    SNS ダッシュボードで、[Topics] (トピック)、[Create Topic] (トピックの作成) の順に選択します。

3.    トピックの名前 (例: my-topic) を入力します。

4.    [トピックの作成] を選択します。

5.    トピックの Amazon リソースネーム (ARN) を書き留めます (例: arn:aws:sns:us-east-1:123123123123:my-topic)。

6.    [サブスクリプションの作成] を選択します。

7.    [Topic ARN] (トピック ARN) で、ステップ 5 で書き留めておいた ARN を入力します。

8.    [Protocol] (プロトコル) で、[Email] (E メール) を選択します。

9.    [Endpoint] (エンドポイント) で、通知を受け取る E メールアドレスを入力し、[Create subscription] (サブスクリプションの作成) を選択します。

サブスクリプションを確認する E メールが届きます。サブスクリプションを確認すると、SNS トピックがトリガーされたときに該当のメールアドレス宛てに通知が送信されます。

EventBridge コンソールを使用して、イベントに対してトリガーする EventBridge ルールを作成する

1.    [EventBridge コンソール] を開きます。

2.    [Create rule] (ルールを作成) を選択します。

3.    ルールの [Name] (名前) を入力します。必要に応じて [Description] (説明) を入力できます。

4.    [Define pattern] (パターン定義) で、[Event pattern] (イベントパターン) を選択します。

5.    [Pre-defined pattern by service] (サービスごとの事前定義パターン) を選択します。

6.    [Service provider] (サービスプロバイダー) で、[AWS] を選択します。

7.    [Service name] (サービス名) で、[EC2] を選択します。

8.    [Event Type] (イベントタイプ) で、[AWS API Call via CloudTrail] (CloudTrail 経由での AWS API コール) を選択します。

9.    [Specific Operation] (特定のオペレーション) を選択し、次の API コールをテキストボックスに 1 つずつコピーして貼り付けます。追加するたびに [Add] (追加) を選択します。これらの API コールは、セキュリティグループルールを追加または削除するために使用されます。

AuthorizeSecurityGroupIngress
AuthorizeSecurityGroupEgress
RevokeSecurityGroupIngress
RevokeSecurityGroupEgress

これらの設定から、次のイベントパターンが作成されます。

{
  "source": [
    "aws.ec2"
  ],
  "detail-type": [
    "AWS API Call via CloudTrail"
  ],
  "detail": {
    "eventSource": [
      "ec2.amazonaws.com"
    ],
    "eventName": [
      "AuthorizeSecurityGroupIngress",
      "AuthorizeSecurityGroupEgress",
      "RevokeSecurityGroupIngress",
      "RevokeSecurityGroupEgress"
    ]
  }
}

10.    [Select targets] (ターゲットを選択) で、[Target] (ターゲット) ドロップダウンリストから [SNS topic] (SNS トピック) を選択します。

11.    [Topic] (トピック) で、以前に作成したトピックを入力します。

注: デフォルトでは、[Configure input] (インプットの設定) で [Matched event] (一致したイベント) が選択されています。[Matched event] (一致したイベント) は、イベントの JSON 出力全体を SNS トピックに渡します。JSON 出力全体を渡さない場合は、[Input transformer] (インプットトランスフォーマー) を選択してイベント情報をフィルタリングします。JSON 出力全体をターゲットに送信するのではなく、インプットトランスフォーマーを使用して、イベントからテキストをカスタマイズして読みやすいメッセージを作成します。たとえば、[パスの入力] に次の key-value ペアを使用できます。

{"name":"$.detail.requestParameters.groupId","source":"$.detail.eventName","time":"$.time","value":"$.detail"}

[Input Template] (テンプレートの入力) で、メッセージに表示するテキストと変数を入力します。

"A <source> API call was made against the security group <name> on <time> with the below details"
" <value> "

インプットトランスフォーマーのオプションの使用に関する詳細については、チュートリアル: EventBridge がイベントターゲットに渡すものを Input Transformer を使用してカスタマイズするを参照してください。

12.    [Create] (作成) を選択します。