Amazon Web Services ブログ

AWS CloudTrail Lake の AWS Config との統合を発表

この記事は Announcing AWS CloudTrail Lake integration with AWS Config (記事公開日:2022 年 11 月 28 日) を翻訳したものです。

AWS のクラウドインフラストラクチャを管理する組織には、 AWS アカウントの運用をセキュリティとコンプライアンスの観点から監査する効果的なメカニズムが必要です。AWS は 2022 年初頭に AWS CloudTrail Lake を発表しました。 これは CloudTrail で監査・セキュリティ調査・運用上のトラブルシューティングを目的として記録されたイベントを組織が一元的に集約・不変的に保存・クエリすることができるマネージドデータレイクです。CloudTrail Lake では、複数のリージョンやアカウントを含んだ AWS Organizations 内の組織からのイベントを CloudTrail Lake イベントデータストアに保存することができます。

完全な背後関係を調査中に収集するために、セキュリティとコンプライアンスの担当チームは「誰が」変更を加えたか、「いつ」変更が行われたか、「どの」リソースが変更されたか、そしてリソースの「何」が変更されたかについての情報を提供しなければなりません。

AWS CloudTrail Lake は、セキュリティまたはコンプライアンスに関するイベントが発生した際に「誰が変更したのか」「いつ発生したのか」「どのリソースで発生したのか」を識別するのに役立ちます。しかし、イベントで影響を受けたリソースの「何が変更されたのか」という情報を提供することが課題となっていました。この種の情報を収集する際、お客様は AWS リソースの設定を監査・アクセス・評価できる AWS Config を活用できます。CloudTrail Lake ではセキュリティインシデントやコンプライアンス調査の根本原因を特定するために、「誰が」「いつ」「どのリソースで」「何が変わったのか」を 1 か所にまとめることに取り組んできました。

本日、AWS Config の設定項目を保存できる CloudTrail Lake の新機能を発表できることを嬉しく思います。これには、設定の詳細と AWS Config がサポートするリソースに関するコンプライアンス履歴が含まれます。この機能によって、AWS Config の設定項目を保存するように設定されたイベントデータストアに対してクエリを実行できます。また、2 つのイベントデータストア間でイベントを結合できる SQL ベースのクエリを作成する機能も追加されました。たとえば、AWS Config のイベントデータストアを使用して Amazon S3 バケットに「何の変更が加えられたか」を示すクエリを作成し、それを CloudTrail のイベントデータストアと結合することで「誰が変更したのか」と「いつ変更したのか」に関する情報を併せて提供できるようになりました。シナリオによっては、AWS Config イベントと CloudTrail イベントの設定項目が 1 対 1 で一致するものが見つからない場合があることに注意が必要です。その場合、実行されたすべての操作に関する監査データを CloudTrail で見つけることができます。このようなシナリオの詳細については、AWS CloudTrail のよくある質問ページを参照してください。

本ブログでは、CloudTrail Lake を使用して AWS Config の設定項目を保存しいくつかのサンプルクエリを実行する方法を示します。

前提条件

CloudTrail Lake を使用して AWS Config の設定項目を保存するには、前提条件として AWS CloudTrail への設定項目の配信元となるすべてのアカウントとリージョンで AWS Config レコーダーを設定する必要があります。AWS Systems Manager Quick Setup を使用すると、AWS Config のセットアップに役立ちます。

AWS Config 設定項目用のイベントデータストアの作成

CloudTrail Lake を使用して AWS Config の設定項目を保存するには、まずイベントデータストアを作成する必要があります。イベントデータストアは CloudTrail 内の不変のストレージロケーションで、CloudTrail イベントまたは AWS Config の設定項目を含めることができます。

  1. CloudTrail コンソールに移動します
  2. 左側のナビゲーションメニューで [レイク] を選択します
  3. [イベントデータストア] タブを選択します
  4. [イベントデータストアの作成] を選択します
  5. イベントデータストアの名前を入力します。本ブログでは、イベントデータストアの名前として “aws-config-eds” を使用しています。
  6. イベントデータストアの構成画面では、次の設定を構成できます:
    1. 保存期間:イベントデータストアの保持期間を指定できます。デフォルトでは、7 年間保存するように設定されています。
    2. 暗号化:デフォルトでは、データは AWS が所有および管理する KMS キーで暗号化されます。CloudTrail Lake に保存されているアクティビティログを独自のカスタマー管理 KMS キー (CMK) を使用して暗号化することもできます。
    3. タグ:オプションの設定として、イベントデータストア用のタグを作成できます。これにより、IAM ポリシーを使用してイベントデータストアへのアクセスを識別、並べ替え、制御して、タグに基づくイベントデータストアの作成と削除を防ぐことができます。
  7. 本ブログでは、これらのフィールドはデフォルト設定のままにして、[次へ] を選択しています

A “configure event data store” screen with options to enter the name, retention period and optional Tags.

Figure 1:AWS CloudTrail でイベントデータストアを設定する

  1. イベントの選択画面では、イベントデータストア内でキャプチャするイベントの種類を選択できます
  2. 「AWS イベントのタイプを指定します」セクションの [設定項目] を選択します
  3. 現在のリージョンと、CloudTrail Lake に設定項目の配信元となるその他のリージョンの AWS Config レコーディングをオンにしておく必要があります
  4. デフォルトでは、アカウントレベルでの AWS Config の設定項目の保存が設定されています
      1. (オプション) アカウントとリージョンの設定セクションで、[現在のリージョンのみを含める] を選択して、現在のリージョンの AWS Config の設定項目を保存できます。
      2. (オプション) アカウントとリージョンの設定セクションでは、管理アカウントまたは委任管理者アカウントから [組織内のすべてのアカウントで有効にする] を選択して、組織全体の AWS Config の設定項目を保存できます。(注:CloudTrail Lake が設定項目を収集するには、対象となるアカウントおよびリージョンで Config 設定レコーダーが有効化されている必要があります。組織全体で Config 設定レコーダーを有効化する際には、AWS Systems ManagerQuick Setup の利用等をご検討ください)
  5. [次へ] を選択します

A ”specify event types” screen allowing the user to select between CloudTrail events or configuration items from AWS Config with Configuration Items radio box selected.]

Figure 2:AWS CloudTrail でイベントデータストアの AWS イベントのタイプを指定

  1. レビューページで、イベントデータストアの構成が正しいことを確認し、[イベントデータストアの作成] を選択します

サンプルクエリ

CloudTrail Lake には、CloudTrail Lake によってキャプチャされた AWS 構成項目のクエリを開始する際に役立つさまざまなサンプルクエリが用意されています。これらのサンプルクエリのいずれかを使用するには、次の手順に従います:

  1. [サンプルクエリ] に移動します
  2. この例では、サンプルクエリのリストから AWS Config resource creation time を選択します。このクエリは、すべての AWS Config 設定項目のリソース作成時間を検索します
  3. 次のサンプルクエリは、クエリエディタに自動的に入力されます ($CONFIG_EDS_ID は、AWS Config の設定項目を保存するために作成したイベントデータストアの ID に置き換える必要があります)。:
SELECT
    eventData.configuration, eventData.accountId, eventData.awsRegion, eventData.resourceId,
    eventData.resourceName, eventData.resourceType, eventData.availabilityZone, eventData.resourceCreationTime
FROM
    $CONFIG_EDS_ID
WHERE
    eventTime > '2022-11-21 00:00:00' AND eventTime < '2022-11-22 00:00:00'
ORDER
    BY eventData.resourceCreationTime DESC limit 10;
  1. [実行] を選択すると、クエリの結果が表示されます。

A screenshot displaying a sample results query to list 10 configuration items with their where the resource creation date is displayed.

Figure 3:AWS CloudTrail のサンプルクエリ画面

二つのイベントデータストアを結合する CloudTrail Lake クエリの作成

CloudTrail Lake は、複数のイベントデータストア間でデータを結合できる JOIN 関数を使用する機能もサポートするようになりました。これにより、CloudTrail イベントに関連する情報と AWS Config の設定項目に関連する情報を表示するクエリを作成できます。

次のサンプルでは、JOIN 関数を使用したクエリを使用して S3 バケットの PutBucketEncryption CloudTrail イベントに関する情報を表示する方法を示します。これにより、CloudTrail イベントを記録したイベントデータストアから「誰」と「いつ」に関する情報を、また AWS Config の設定項目を記録したイベントデータストアから「何」に関する情報がわかります。わかりやすくするために、今回は「どのユーザーが実行したのか」「特定の期間の中で発生したのか」「何かリソースに対して変更があったのか」について検索します。

  1. [クエリ] に移動
  2. [+] を選択して新しいクエリを作成します
  3. 以下のクエリの内容をエディタウィンドウに貼り付けます ($CLOUDTRAIL_EDS_ID と $CONFIG_EDS_ID は、CloudTrail イベントデータと AWS Config 設定項目を含むイベントデータストアの ID に置き換える必要があります) :
Select
    config.eventdata.resourceId, config.eventData.resourceType, config.eventdata.configurationItemCaptureTime, cloudtrail.recipientAccountId, cloudtrail.awsRegion, cloudtrail.sourceIPAddress, cloudtrail.userAgent, cloudtrail.userIdentity.arn, cloudtrail.userIdentity.type, cloudtrail.userIdentity.sessionContext.sessionIssuer.userName, config.eventData.resourceType, element_at(config.eventdata.supplementaryConfiguration, 'ServerSideEncryptionConfiguration' 
    ) as ServerSideEncryptionConfiguration 
from
    $CLOUDTRAIL_EDS_ID as cloudtrail
join
    $CONFIG_EDS_ID as config on config.eventdata.resourceId = element_at(cloudtrail.requestParameters, 'bucketName'  
    )
where
    cloudtrail.eventname = 'PutBucketEncryption' 
    and (cloudtrail.eventTime >= '2022-11-17 00:00:00'  
        and cloudtrail.eventTime <= '2022-11-19 00:00:00'  
    )  
    and element_at(config.eventdata.supplementaryConfiguration, 'ServerSideEncryptionConfiguration' 
    ) is not null  
    and config.eventData.resourceType = 'AWS::S3::Bucket' 
    order by config.eventdata.configurationItemCaptureTime desc;
  1. 次に、検索する時間範囲を、使用する時間範囲に置き換える必要があります。eventTime >= の後に指定された日付文字列は、含まれる最も早いイベントタイムスタンプであり、EventTime の後に指定された日付文字列です。
    <= は含まれる最新のイベントタイムスタンプです。(注: >= または <= を使用して、タイムスタンプに指定された日付/時刻を含めることができます。サポートされているすべての演算子の完全なリストについては、こちらを参照してください)
  2. [実行] を選択すると、クエリの結果が表示されます

このクエリでは、JOIN 構文を使用して CloudTrail ユーザー ID フィールドに関連する情報と、 AWS Config の設定項目の ServerSideEncryptionConfiguration フィールドに関連する情報が表示されます。SQL 制約の詳細については、CloudTrail Lake の SQL 制約ドキュメントを参照してください。

クリーンアップ

AWS Config の設定項目用のCloudTrail Lake イベントデータストアを使用する必要がなくなった場合は、イベントデータストアを必ず削除してください。これを行うには、次の手順に従います。

  1. Lake コンソールの [イベントデータストア] タブを選択します
  2. リストからイベントデータストアを選択します
  3. [アクション] メニューから、[終了保護の変更] を選択します
  4. 変更終了保護のポップアップから [無効] を選択し、 [保存] を選択します
  5. [アクション] メニューから [削除] を選択し、データストアの名前を入力して削除することを確認します。次に [削除] を選択します。これにより、イベントデータストアは削除保留状態になります
  6. 7 日後に、データストアは完全に削除されます

まとめ

このブログでは、AWS Config の設定項目を保存する CloudTrail Lake の新機能を使い始める方法と、セキュリティやコンプライアンスの調査が必要な場合に「誰が変更したのか」「いつ変更したのか」「何が変わったのか」の情報を提供できるように、クエリ内の JOIN 関数を使用して複数のイベントデータストアを結合する方法を説明しました。新機能を確認するには、CloudTrail Lake のユーザーガイドを参照してください。

翻訳はソリューションアーキテクトの三厨が担当しました。原文はこちらです。

著者について:

Isaiah Salinas

Isaiah Salinas は、クラウド運用チームのシニアスペシャリストソリューションアーキテクトです。AWS テクノロジーを 10 年以上使用してきた経験を持つ Isaiah は、お客様と協力して複雑なクラウドインフラストラクチャの設計、実装、サポートを行っています。また、AWS サービスを使って問題を解決する方法について他の人と話すことも楽しんでいます。

Ania Develter

Ania Develter は、クラウド運用チームのシニアスペシャリストソリューションアーキテクトです。Ania はあらゆる業界のお客様と連携し、オブザーバビリティ、コンプライアンス、一元化された運用管理の課題解決を支援しています。彼女はオブザーバビリティ、CloudOps、DevOpsについて話すのが大好きです。