[アップデート] AWS Audit Manager の一部イベントが EventBridge に統合されたので、CloudTrail 経由との使い分けを考えてみた

2023.08.21

いわさです。

先日のアップデートで AWS Audit Manager のいくつかのイベントが EventBridge に統合されました。

ユースケースとしてはアセスメントのコントロールのレビューステータスが変更された場合に管理者へ通知を送信するなどが想定されています。
これまで Audit Manager でイベント通知を行ったことが無かったので今回のアップデートの検証を兼ねて、AWS API Call via CloudTrailでイベントを拾うパターンと併せて試してみました。

確認

どういったイベントデータが送信されるのかを確認するために、次のような広めのルールを設定しました。

{
  "source": ["aws.auditmanager"]
}

アセスメントの作成

まずは、アセスメントを作成してみます。

イベントが 2 つ発生しています。
ひとつは detail-type がAWS API Call via CloudTrailのもの、もうひとつは detail-type がAssessment Createdのものでした。
CloudTrail と、直接 EventBridge に統合された Audit Manager のイベントで重複しているので覚えておきましょう。
ただし、イベントデータの内容はちょっと違ってます。

次は CloudTrail 経由のイベントデータです。

{
    "version": "0",
    "id": "6f2552ed-afd8-15f4-363b-b49ec2b067ca",
    "detail-type": "AWS API Call via CloudTrail",
    "source": "aws.auditmanager",
    "account": "123456789012",
    "time": "2023-08-20T21:45:01Z",
    "region": "ap-northeast-1",
    "resources": [],
    "detail": {
        "eventVersion": "1.08",
        "userIdentity": { ... }
        },
        "eventTime": "2023-08-20T21:45:01Z",
        "eventSource": "auditmanager.amazonaws.com",
        "eventName": "CreateAssessment",
        "awsRegion": "ap-northeast-1",
        "sourceIPAddress": "203.0.113.1",
        "requestParameters": {
            "frameworkId": "2ad0cca9-a1bf-3b4a-9769-ef78c51902ba",
            "assessmentReportsDestination": {
                "destination": "***",
                "destinationType": "S3"
            },
            "scope": {
                "awsServices": [
                    {
                        "serviceName": "iam"
                    },
                    {
                        "serviceName": "ec2"
                    },
                    {
                        "serviceName": "cloudtrail"
                    }
                ],
                "awsAccounts": "***"
            },
            "roles": "***",
            "name": "hoge0821assesment1",
            "description": "***",
            "tags": "***"
        },
        "responseElements": {
            "assessment": {
                "arn": "arn:aws:auditmanager:ap-northeast-1:123456789012:assessment/740987ca-2c0c-4e50-9862-0676956ce5e4",
                "awsAccount": "***",
                "framework": "***",
                "metadata": "***",
                "tags": "***"
            }
        },
        "requestID": "f40ad296-eecb-4909-b37b-13e286028025",
        "eventID": "8b9c42ec-4167-49ed-a0d1-a1c421127a82",
        "readOnly": false,
        "eventType": "AwsApiCall",
        "managementEvent": true,
        "recipientAccountId": "123456789012",
        "eventCategory": "Management"
    }
}

次は EventBridge へ直接送信された Audit Manager イベントデータです。

{
    "version": "0",
    "id": "ba4f5923-20eb-7bf3-5968-2568da794de1",
    "detail-type": "Assessment Created",
    "source": "aws.auditmanager",
    "account": "123456789012",
    "time": "2023-08-20T21:45:19Z",
    "region": "ap-northeast-1",
    "resources": [
        "arn:aws:auditmanager:ap-northeast-1:123456789012:assessment/740987ca-2c0c-4e50-9862-0676956ce5e4"
    ],
    "detail": {
        "eventID": "82495703-42b4-3caa-924c-c538775042aa",
        "author": "arn:aws:sts::123456789012:assumed-role/cm-iwasa.takahito/cm-iwasa.takahito",
        "assessmentTenantId": "123456789012",
        "assessmentName": "hoge0821assesment1",
        "eventTime": 1692567901761,
        "eventName": "CREATE",
        "eventType": "ASSESSMENT",
        "assessmentID": "740987ca-2c0c-4e50-9862-0676956ce5e4"
    }
}

どちらもイベントが作成されたことを示した内容ですが、前者は実際に API リクエストに使った情報が大量に含まれており、後者はアセスメント作成イベントに必要な最小限のデータだけが表示されています。

どちらを使うのが良いのかはちょっとまだよくわからないですね。

カスタムコントロールの作成

続いて、カスタムコントロールを作成します。
アセスメントはいくつかのコントロールで構成されており、基本的には AWS 組み込みのコントロールを使うことができるのですが、ユーザーが独自にカスタムしたコントロールを用意して自前でフレームワークを用意することも出来ます。

カスタムコントロールを新しく作成してみましょう。

この時のイベントデータですが、CloudTrail 経由のイベントデータのみ送信されていました。

{
    "version": "0",
    "id": "bd3f18ae-d97c-751a-dc8f-6fbc3fc0625a",
    "detail-type": "AWS API Call via CloudTrail",
    "source": "aws.auditmanager",
    "account": "123456789012",
    "time": "2023-08-20T21:50:37Z",
    "region": "ap-northeast-1",
    "resources": [],
    "detail": {
        "eventVersion": "1.08",
        "userIdentity": { ... }
        },
        "eventTime": "2023-08-20T21:50:37Z",
        "eventSource": "auditmanager.amazonaws.com",
        "eventName": "CreateControl",
        "awsRegion": "ap-northeast-1",
        "sourceIPAddress": "203.0.113.1",
        "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36",
        "requestParameters": {
            "actionPlanInstructions": "***",
            "name": "hoge0821customctl",
            "controlMappingSources": [
                {
                    "sourceName": "hoge0821customctl",
                    "sourceDescription": "",
                    "sourceSetUpOption": "Procedural_Controls_Mapping",
                    "sourceType": "MANUAL",
                    "sourceKeyword": {
                        "keywordInputType": "INPUT_TEXT"
                    },
                    "troubleshootingText": "***"
                }
            ],
            "description": "***",
            "actionPlanTitle": "***",
            "testingInformation": "***",
            "tags": {}
        },
        "responseElements": {
            "control": {
                "actionPlanInstructions": "***",
                "actionPlanTitle": "***",
                "arn": "arn:aws:auditmanager:ap-northeast-1:123456789012:control/0a7618db-e63f-4a00-b311-734d3c0bcd4c",
                "controlMappingSources": [
                    {
                        "sourceDescription": "",
                        "sourceId": "7da23d0e-a526-4ac7-8cec-21183ff808bc",
                        "sourceKeyword": {
                            "keywordInputType": "INPUT_TEXT"
                        },
                        "sourceName": "hoge0821customctl",
                        "sourceSetUpOption": "Procedural_Controls_Mapping",
                        "sourceType": "MANUAL",
                        "troubleshootingText": "***"
                    }
                ],
                "controlSources": "Manual",
                "createdAt": 1692568237.806,
                "createdBy": "***",
                "description": "***",
                "id": "0a7618db-e63f-4a00-b311-734d3c0bcd4c",
                "lastUpdatedAt": 1692568237.806,
                "lastUpdatedBy": "***",
                "name": "hoge0821customctl",
                "tags": "***",
                "testingInformation": "***",
                "type": "Custom"
            }
        },
        "requestID": "913a3de1-d24e-4ff3-a0ab-b4c5e653f59b",
        "eventID": "4617654c-8622-441b-8518-77896d5aefc8",
        "readOnly": false,
        "eventType": "AwsApiCall",
        "managementEvent": true,
        "recipientAccountId": "123456789012",
        "eventCategory": "Management"
    }
}

なるほど。
次のドキュメントにも記載されているのですが、EvnetBridge へ直接送信されるデータは一部のイベントデータのみがサポートされています。

  • Assessment Created
  • Assessment Updated
  • Assessment Deleted
  • Assessment ControlSet Delegation Created
  • Assessment ControlSet Reviewed
  • Assessment Control Reviewed

アセスメントの作成と実施にのみフォーカスされている感じですね。

コントロールへの手動エビデンス入力

では、アセスメント作成後にエビデンスを入力した場合などはどうでしょうか。
先程のサポートされているイベントリストからすると通知は発生しなさそうです。

やはり、CloudTrail 経由のイベントのみが発生していました。

{
    "version": "0",
    "id": "b482e471-65f4-6fa4-5ca9-a9ac7e341c42",
    "detail-type": "AWS API Call via CloudTrail",
    "source": "aws.auditmanager",
    "account": "123456789012",
    "time": "2023-08-20T22:38:14Z",
    "region": "ap-northeast-1",
    "resources": [],
    "detail": {
        "eventVersion": "1.08",
        "userIdentity": { ... }
        },
        "eventTime": "2023-08-20T22:38:14Z",
        "eventSource": "auditmanager.amazonaws.com",
        "eventName": "BatchImportEvidenceToAssessmentControl",
        "awsRegion": "ap-northeast-1",
        "sourceIPAddress": "203.0.113.1",
        "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36",
        "requestParameters": {
            "manualEvidence": [
                {
                    "textResponse": "***"
                }
            ],
            "controlSetId": "hoge0821",
            "controlId": "0a7618db-e63f-4a00-b311-734d3c0bcd4c",
            "assessmentId": "0a294af8-f470-4a12-9ef2-727936f25d25"
        },
        "responseElements": {
            "errors": []
        },
        "requestID": "7df3a92a-7c85-470c-a7ad-bea4ec3fdd3f",
        "eventID": "ed31bedb-9b31-4668-8584-c112af0aa543",
        "readOnly": false,
        "eventType": "AwsApiCall",
        "managementEvent": true,
        "recipientAccountId": "123456789012",
        "eventCategory": "Management"
    }
}

エビデンスの収集や更新については、イベント発生対象外ですので覚えておきましょう。

コントロールのレビュー

実際にエビデンスが収集された後に個々のコントロールがレビューされるわけですが、その際のイベントについてはどうでしょうか。

次のように、コントロールのレビューステータスを更新してみます。

この場合は次のように CloudTrail も EventBridge 直もイベントデータが送信されていました。
次は CloudTrail 経由のイベントデータです。

{
    "version": "0",
    "id": "78356db1-779d-5d66-2b73-8c25ce4c1f79",
    "detail-type": "AWS API Call via CloudTrail",
    "source": "aws.auditmanager",
    "account": "123456789012",
    "time": "2023-08-20T22:39:47Z",
    "region": "ap-northeast-1",
    "resources": [],
    "detail": {
        "eventVersion": "1.08",
        "userIdentity": { ... }
        },
        "eventTime": "2023-08-20T22:39:47Z",
        "eventSource": "auditmanager.amazonaws.com",
        "eventName": "UpdateAssessmentControl",
        "awsRegion": "ap-northeast-1",
        "sourceIPAddress": "203.0.113.1",
        "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36",
        "requestParameters": {
            "controlStatus": "REVIEWED",
            "controlSetId": "hoge0821",
            "commentBody": "***",
            "controlId": "0a7618db-e63f-4a00-b311-734d3c0bcd4c",
            "assessmentId": "0a294af8-f470-4a12-9ef2-727936f25d25"
        },
        "responseElements": {
            "control": {
                "assessmentReportEvidenceCount": 0,
                "comments": "***",
                "description": "***",
                "evidenceCount": 0,
                "evidenceSources": [
                    "Manual"
                ],
                "id": "0a7618db-e63f-4a00-b311-734d3c0bcd4c",
                "name": "hoge0821customctl",
                "status": "REVIEWED"
            }
        },
        "requestID": "db69320b-d59b-444d-851c-fad2f6bd3bf5",
        "eventID": "bd5ebf95-5474-440b-b4e2-426fa280e241",
        "readOnly": false,
        "eventType": "AwsApiCall",
        "managementEvent": true,
        "recipientAccountId": "123456789012",
        "eventCategory": "Management"
    }
}

次は Audit Manager から直接送信されているイベントデータです。

{
    "version": "0",
    "id": "10c2065f-dbca-3074-8c12-9f7037857e9c",
    "detail-type": "Assessment Control Reviewed",
    "source": "aws.auditmanager",
    "account": "123456789012",
    "time": "2023-08-20T22:39:51Z",
    "region": "ap-northeast-1",
    "resources": [
        "arn:aws:auditmanager:ap-northeast-1:123456789012:assessment/0a294af8-f470-4a12-9ef2-727936f25d25"
    ],
    "detail": {
        "eventID": "9751c848-d55c-39f1-8eaf-d2c67dacc290",
        "author": "arn:aws:sts::123456789012:assumed-role/cm-iwasa.takahito/cm-iwasa.takahito",
        "eventTime": 1692571187062,
        "controlName": "hoge0821customctl",
        "eventName": "REVIEWED",
        "eventType": "CONTROL",
        "controlID": "0a7618db-e63f-4a00-b311-734d3c0bcd4c",
        "assessmentID": "0a294af8-f470-4a12-9ef2-727936f25d25"
    }
}

こうやって見てみると、CloudTrail は情報量かなり多いですが、後者はシンプルですね。
サポートされているイベント数からみても、用途がかなり絞られている印象を受けます。

アセスメントの完了

最後に、コントロールセットのレビューも完了させてみます。
対象イベントだったので通知されるはず。

次のようにどちらも送信されました。

次は CloudTrail 経由のイベントデータです。

{
    "version": "0",
    "id": "2af69647-142c-311b-f6c7-ef4cfc038163",
    "detail-type": "AWS API Call via CloudTrail",
    "source": "aws.auditmanager",
    "account": "123456789012",
    "time": "2023-08-20T22:41:11Z",
    "region": "ap-northeast-1",
    "resources": [],
    "detail": {
        "eventVersion": "1.08",
        "userIdentity": { ... }
        },
        "eventTime": "2023-08-20T22:41:11Z",
        "eventSource": "auditmanager.amazonaws.com",
        "eventName": "UpdateAssessmentControlSetStatus",
        "awsRegion": "ap-northeast-1",
        "sourceIPAddress": "203.0.113.0/24",
        "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36",
        "requestParameters": {
            "controlSetId": "hoge0821",
            "comment": "***",
            "assessmentId": "0a294af8-f470-4a12-9ef2-727936f25d25",
            "status": "REVIEWED"
        },
        "responseElements": {
            "controlSet": "***"
        },
        "requestID": "ec3ff074-13ce-4cdc-8df9-f7ae075990b0",
        "eventID": "98f5f499-b867-4875-9e38-7f3d25a91939",
        "readOnly": false,
        "eventType": "AwsApiCall",
        "managementEvent": true,
        "recipientAccountId": "123456789012",
        "eventCategory": "Management"
    }
}

次は Audit Manager 直接のイベントデータです。

{
    "version": "0",
    "id": "e57ef480-4eb3-87f2-bd1f-e3c51f7ceb7c",
    "detail-type": "Assessment ControlSet Reviewed",
    "source": "aws.auditmanager",
    "account": "123456789012",
    "time": "2023-08-20T22:41:27Z",
    "region": "ap-northeast-1",
    "resources": [
        "arn:aws:auditmanager:ap-northeast-1:123456789012:assessment/0a294af8-f470-4a12-9ef2-727936f25d25"
    ],
    "detail": {
        "eventID": "6bff679b-5c06-3cad-bd29-94599a9a584c",
        "controlSetID": "hoge0821",
        "author": "arn:aws:iam::123456789012:role/cm-iwasa.takahito",
        "assessmentName": "hoge0821assesment2",
        "eventTime": 1692571270995,
        "eventName": "REVIEWED",
        "eventType": "CONTROL_SET",
        "assessmentID": "0a294af8-f470-4a12-9ef2-727936f25d25"
    }
}

まとめ

こうやって見てみると CloudTrail 経由で全て取得出来るのでこっちで良いのでは?という印象を受けそうですが、一通りのイベントを確認して見たところ Autit Manager から直接送信されるイベントの出力詳細データであるdetailを見てみると、概ね次のような構成になっていますね。

    "detail": {
        "eventID": "82495703-42b4-3caa-924c-c538775042aa",
        "author": "arn:aws:sts::123456789012:assumed-role/cm-iwasa.takahito/cm-iwasa.takahito",
        "assessmentTenantId": "123456789012",
        "assessmentName": "hoge0821assesment1",
        "controlSetID": "hoge0821",
        "controlName": "hoge0821customctl",
        "eventTime": 1692567901761,
        "eventName": "CREATE",
        "eventType": "ASSESSMENT",
        "assessmentID": "740987ca-2c0c-4e50-9862-0676956ce5e4"
    }

上記ハイライト部分は対象がアセスメントなのかコントロールなのかで出力されたりされなかったりしますが、概ね上記の構造です。
一方で CloudTrail 経由のイベントの場合は API ごとに出力形式が異なっています。
また、CloudTrail イベントの場合はほぼ全ての操作イベントが出力されます。

上記から、管理者やチームがアセスメントやコントロールのレビュー状況・ステータス変更などを、メッセージ整形して通知するなど汎用的に扱いやすい形で受け取れるのは Audit Manager から送信されるイベントデータ。
Audit Manager 自体を全て管理したければ CloudTrail 経由のイベントデータという形で考えても良いのかなと思いました。

さいごに

本日は AWS Audit Manager の一部イベントが EventBridge に統合されたので、CloudTrail 経由との使い分けを考えてみました。

CloudTrail 経由のイベントデータでも実現出来たことですが、アセスメント・コントロールのステータス変更を通知する目的で使うのであれば、今回統合された EventBridge データを使うとよりシンプルに実装することが出来そうです。