[アップデート] EventBridge イベントバスが CloudTrailからの read-only API アクションを監視できるようになりました

2023.11.24

以下アップデートを紹介します。

EventBridge で CloudTrailからの 読み取り専用のAPIイベント(List, Get, Describe など) を監視できるようになりました。

何が嬉しいか

CloudTrailイベントの全て一式 を EventBridge から監視できるようになりました。

もともと EventBridge には 「CloudTrail経由のAPI呼び出しイベント」 ( AWS API Call via CloudTrail ) を監視する機能がありましたが、更新APIのみでした。 つまり Create や Update, Delete などはEventBridge で監視できていましたが、 読み取り専用APIはサポート外でした。

今回のアップデートで List や Get, Describe などの 読み取り専用APIもサポートされました。

単一の読み取りイベントを監視するために、 わざわざ CloudTrail → CloudWatch Logs → CloudWatch Alarm のような構成を取る必要がなくなりました。やったね。

どうやって設定するか

「読み取り専用APIも監視する」設定はオプトインする必要があります。

具体的にはEventBridgeルールのステータスを ENABLED_WITH_ALL_CLOUDTRAIL_MANAGEMENT_EVENTS にします。 オプトインしたルールは、マネコン上では 有効 (CloudTrail 読み取り専用 MGMT イベントあり) と表示されます。

img

2023/11/24時点では、この設定はマネジメントコンソール上ではできないようです。

やってみる

Secrets Manager の特定シークレットの取得 (GetSecretValue) を検知してメール通知する仕組みを展開してみます。

以下のような CFnテンプレートを展開しました。

AWSTemplateFormatVersion: 2010-09-09
Parameters:
  Email:
    Type: String
  SecretArn:
    Type: String
Resources:
  SNSTopic:
    Type: AWS::SNS::Topic
    Properties:
      TopicName: detect-get-secret-value
  SNSTopicPolicy:
    Type: AWS::SNS::TopicPolicy
    Properties:
      PolicyDocument:
        Statement:
          - Sid: AllowServices
            Effect: Allow
            Principal:
              Service:
                - events.amazonaws.com
            Action:
                - sns:Publish
            Resource:
              - !Ref SNSTopic
      Topics:
        - !Ref SNSTopic
  SNSSubscription:
    Type: AWS::SNS::Subscription
    Properties:
      TopicArn: !Ref SNSTopic
      Endpoint: !Ref Email
      Protocol: email
  EventBridgeRule:
    Type: AWS::Events::Rule
    Properties: 
      Name: detect-get-secret-value
      State: ENABLED_WITH_ALL_CLOUDTRAIL_MANAGEMENT_EVENTS
      EventPattern: !Sub |
        {
          "source": ["aws.secretsmanager"],
          "detail-type": ["AWS API Call via CloudTrail"],
          "detail": {
            "eventSource": ["secretsmanager.amazonaws.com"],
            "eventName": ["GetSecretValue"],
            "requestParameters": {
              "secretId": [
                "${SecretArn}"
              ]
            }
          }
        }
      Targets:
        - Id: sns-topic
          Arn: !Ref SNSTopic

ハイライト部分が EventBridgeルールです。 State: ENABLED_WITH_ALL_CLOUDTRAIL_MANAGEMENT_EVENTS を指定する点に注意してください。

img

展開後に特定シークレットの値を取得しました。

img

すぐにメールが通知されました。 以下、整形したものを記載します。

{
  "version": "0",
  "id": "09c00000-9999-2222-2222-example",
  "detail-type": "AWS API Call via CloudTrail",
  "source": "aws.secretsmanager",
  "account": "111111111111",
  "time": "2023-11-24T08:29:48Z",
  "region": "ap-northeast-1",
  "resources": [],
  "detail": {
    "eventVersion": "1.08",
    "userIdentity": {
      "type": "AssumedRole",
      "principalId": "AROAEXAMPLE:cm-kawahara.masahiro",
      "arn": "arn:aws:sts::111111111111:assumed-role/cm-kawahara.masahiro/cm-kawahara.masahiro",
      "accountId": "111111111111",
      "accessKeyId": "ASIAEXAMPLE",
      "sessionContext": {
        "sessionIssuer": {
          "type": "Role",
          "principalId": "AROAEXAMPLE",
          "arn": "arn:aws:iam::111111111111:role/cm-kawahara.masahiro",
          "accountId": "111111111111",
          "userName": "cm-kawahara.masahiro"
        },
        "webIdFederationData": {},
        "attributes": {
          "creationDate": "2023-11-24T07:56:38Z",
          "mfaAuthenticated": "true"
        }
      }
    },
    "eventTime": "2023-11-24T08:29:48Z",
    "eventSource": "secretsmanager.amazonaws.com",
    "eventName": "GetSecretValue",
    "awsRegion": "ap-northeast-1",
    "sourceIPAddress": "2222:4444:bbbb:3333:aaaa:3333:5555:bbbb",
    "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36",
    "requestParameters": {
      "secretId": "arn:aws:secretsmanager:ap-northeast-1:111111111111:secret:sample/secret-wPvfcr"
    },
    "responseElements": null,
    "requestID": "620effff-2222-4444-9999-example",
    "eventID": "903caaaa-7777-4444-9999-example",
    "readOnly": true,
    "eventType": "AwsApiCall",
    "managementEvent": true,
    "recipientAccountId": "111111111111",
    "eventCategory": "Management",
    "tlsDetails": {
      "tlsVersion": "TLSv1.3",
      "cipherSuite": "TLS_AES_128_GCM_SHA256",
      "clientProvidedHostHeader": "secretsmanager.ap-northeast-1.amazonaws.com"
    },
    "sessionCredentialFromConsole": "true"
  }
}

今回は簡易的なフィルターで試しましたが、IAMロールやユーザーエージェントで絞ると、「想定外のプリンシパルからアクセスされたこと」を通知することにも活用できそうです。

おわりに

以上、EventBridgeイベントバスのアップデート紹介でした。

楽ちんに読み取りイベントを監視できるようになったのは嬉しいですね。 単一のCloudTrailイベント監視は全てEventBridgeに集約していいのではないでしょうか。

以上、参考になれば幸いです。

参考