AWS CloudTrail での RDS Data API コールのログ記録 - Amazon Aurora

AWS CloudTrail での RDS Data API コールのログ記録

RDS Data API (Data API) は AWS CloudTrail と統合されています。これは、Data API のユーザー、ロール、または AWS のサービスによって実行されたアクションを記録するサービスです。CloudTrail は、Amazon RDS コンソールからの呼び出しとデータ API オペレーションへのコード呼び出しを含む、すべての データ API の API コールをイベントとしてキャプチャします。証跡を作成する場合は、Data API のイベントなど、Amazon S3 バケットへの CloudTrail イベントの継続的配信を有効にすることができます。CloudTrail によって収集されたデータを使用して、多くの情報を判断できます。この情報には、Data API に対するリクエスト、リクエスト元の IP アドレス、リクエスト者、リクエスト日時などの詳細が含まれます。

CloudTrail の詳細については、AWS CloudTrail ユーザーガイドを参照してください。

CloudTrail での Data API 情報の使用

AWS アカウントを作成すると、そのアカウントに対して CloudTrail が有効になります。Data API でサポートされているアクティビティ (管理イベント) が発生すると、そのアクティビティは [イベント履歴] で AWS のその他サービスのイベントと共に CloudTrail イベントに記録されます。最近の管理イベントは、AWS アカウントで表示、検索、ダウンロードできます。詳細については、「AWS CloudTrail ユーザーガイド」の「CloudTrail イベント履歴の使用」を参照してください。

Data API のイベントなど、AWS アカウントのイベントを継続的に記録する場合は、証跡を作成します。証跡により、CloudTrail はログファイルを Amazon S3 バケットに配信できます。デフォルトでは、コンソールで証跡を作成すると、すべての AWS リージョンに証跡が適用されます。追跡では、AWS パーティション内のすべての AWS リージョンからのイベントをログに記録し、指定した Simple Storage Service (Amazon S3)バケットにログファイルを配信します。さらに、CloudTrail・ログで収集したイベントデータをより詳細に分析し、それに基づく対応するためにその他の AWS サービスを設定できます。詳細については、『AWS CloudTrail ユーザーガイド:』の以下のトピックを参照してください。

すべての Data API オペレーションは、CloudTrail によってログに記録されます。また、Amazon RDS データサービス API リファレンスに記載されています。例えば、BatchExecuteStatement, BeginTransaction オペレーション、CommitTransaction オペレーション、および ExecuteStatement オペレーションへのコールに伴って、CloudTrail ログファイルにエントリが生成されます。

各イベントまたはログエントリには、リクエストの生成者に関する情報が含まれます。ID 情報は次の判断に役立ちます。

  • リクエストが、ルートとユーザー認証情報のどちらを使用して送信されたか。

  • リクエストが、ロールとフェデレーションユーザーの一時的なセキュリティ認証情報のどちらを使用して送信されたか。

  • リクエストが、別の AWS サービスによって送信されたかどうか。

詳細については、「CloudTrail userIdentity 要素」を参照してください。

AWS CloudTrail の証跡からの Data API イベントの包含と除外

多くの Data API ユーザーは、Data API オペレーションの記録のために、AWS CloudTrail の証跡内のイベントを使用しています。イベントデータは、Data API へのリクエストでデータベース名、スキーマ名、または SQL ステートメントを公開しません。ただし、特定の時点でどのユーザーが特定の DB クラスターに対して特定のコールタイプを実行したかを把握すると、異常なアクセスパターンの検出に役立ちます。

AWS CloudTrail の証跡からの Data API イベントの包含

Aurora PostgreSQL Serverless v2 およびプロビジョニングされたデータベースの場合、次の Data API オペレーションはデータイベント として AWS CloudTrail に記録されます。データイベントは、CloudTrail がデフォルトではログ記録しない大量のデータプレーン API オペレーションです。追加の変更がイベントデータに適用されます。CloudTrail の料金の詳細については、「AWS CloudTrail の料金」を参照してください。

CloudTrail コンソール、AWS CLI、または CloudTrail API オペレーションを使用して、これらの Data API オペレーションをログに記録できます。CloudTrail コンソールで、データイベントタイプの [RDS Data API - DB クラスター] を選択します。詳細については、「AWS CloudTrail ユーザーガイド」の「AWS Management Console によるデータイベントのログ記録」を参照してください。

AWS CLI を使用して aws cloudtrail put-event-selectors コマンドを実行し、証跡のこれらの Data API オペレーションをログに記録します。DB クラスターのすべての Data API イベントをログに記録するには、リソースタイプに AWS::RDS::DBCluster を指定します。次の例では、DB クラスター上のすべての Data API イベントをログに記録します。詳細については、「AWS CloudTrail ユーザーガイド」の「AWS Command Line Interface によるデータイベントのログ記録」を参照してください。

aws cloudtrail put-event-selectors --trail-name trail_name --advanced-event-selectors \ '{ "Name": "RDS Data API Selector", "FieldSelectors": [ { "Field": "eventCategory", "Equals": [ "Data" ] }, { "Field": "resources.type", "Equals": [ "AWS::RDS::DBCluster" ] } ] }'

高度なイベントセレクタを設定して、readOnlyeventName, および resources.ARN フィールドでさらにフィルタリングできます。これらのフィールドの詳細については、「AdvancedFieldSelector」を参照してください。

AWS CloudTrail の証跡からの Data API イベントの除外 (Aurora Serverless v1 のみ)

Aurora Serverless v1 の場合、Data APIイベントは管理イベントです。デフォルトでは、すべての Data API イベントが AWS CloudTrail の証跡に含まれます。ただし、Data API では多数のイベントが生成されるため、これらのイベントを CloudTrail の証跡から除外したい場合があります。[Amazon RDS のデータ API イベントを除外] 設定は、証跡からすべての Data API イベントを除外します。特定の Data API イベントを除外することはできません。

証跡から Data API イベントを除外するには、次の手順を実行します。

  • CloudTrail コンソールで、証跡を作成するまたは証跡を更新する際に、[Amazon RDS Data API イベントを除外する] 設定をオンにします。

  • CloudTrail API では、PutEventSelectors オペレーションを実行します。アドバンストイベントセレクタを使用している場合は、 [eventSource] フィールドをrdsdata.amazonaws.com と等しくないと設定すると、Data API イベントを除外できます。ベーシックイベントセレクタを使用している場合は、ExcludeManagementEventSources 属性の値を rdsdata.amazonaws.com に設定すると、Data API イベントを除外できます。詳細については、「AWS CloudTrail ユーザーガイド」の「AWS Command Line Interface によるイベントのログ記録」を参照してください。

警告

CloudTrail ログから Data API イベントを除外すると、Data API アクションが不確定になることがあります。このオペレーションを実行するために必要な cloudtrail:PutEventSelectors アクセス許可をプリンシパルに与えるときは注意してください。

この除外は、コンソール設定または証跡のイベントセレクタを変更することで、いつでも無効化できます。その後、証跡が Data API イベントの記録をスタートします。ただし、除外が有効であった期間に発生した Data API イベントはリカバリされません。

コンソールまたは API を使用して Data API イベントを除外すると、それにより実行される CloudTrail の API オペレーション PutEventSelectors も CloudTrail ログに記録されます。Data API イベントが CloudTrail ログに表示されない場合は、ExcludeManagementEventSources 属性が rdsdata.amazonaws.com に設定されている PutEventSelectors イベントを探します。

詳細については、AWS CloudTrail ユーザーガイドの「証跡の管理イベントのログ記録」を参照してください。

Data API ログファイルのエントリについて

「トレイル」は、指定した Simple Storage Service (Amazon S3) バケットにイベントをログファイルとして配信するように設定できます。CloudTrail のログファイルは、単一か複数のログエントリを含みます。イベント は、任意の出典からの単一のリクエストを表し、リクエストされたアクション、アクションの日時、リクエストパラメータなどに関する情報が含まれます。CloudTrail ログファイルは、パブリック API 呼び出しの順序付けられたスタックトレースではないため、特定の順序では表示されません。

Aurora PostgreSQL Serverless v2 とプロビジョンド

次の例は、Aurora PostgreSQL Serverless v2 およびプロビジョニングされたデータベースの ExecuteStatement オペレーションを示す CloudTrail ログエントリを示しています。これらのデータベースでは、すべての Data API イベントは、イベントソースが rdsdataapi.amazonaws.com で、イベントタイプが Rds Data Service であるデータイベントです。

{ "eventVersion": "1.05", "userIdentity": { "type": "IAMUser", "principalId": "AKIAIOSFODNN7EXAMPLE", "arn": "arn:aws:iam::123456789012:user/johndoe", "accountId": "123456789012", "accessKeyId": "AKIAI44QH8DHBEXAMPLE", "userName": "johndoe" }, "eventTime": "2019-12-18T00:49:34Z", "eventSource": "rdsdataapi.amazonaws.com", "eventName": "ExecuteStatement", "awsRegion": "us-east-1", "sourceIPAddress": "192.0.2.0", "userAgent": "aws-cli/1.16.102 Python/3.7.2 Windows/10 botocore/1.12.92", "requestParameters": { "continueAfterTimeout": false, "database": "**********", "includeResultMetadata": false, "parameters": [], "resourceArn": "arn:aws:rds:us-east-1:123456789012:cluster:my-database-1", "schema": "**********", "secretArn": "arn:aws:secretsmanager:us-east-1:123456789012:secret:dataapisecret-ABC123", "sql": "**********" }, "responseElements": null, "requestID": "6ba9a36e-b3aa-4ca8-9a2e-15a9eada988e", "eventID": "a2c7a357-ee8e-4755-a0d0-aed11ed4253a", "eventType": "Rds Data Service", "recipientAccountId": "123456789012" }

Aurora Serverless v1

次の例は、Aurora Serverless v1 の前述の CloudTrail ログエントリの例がどのように表示されるかを示しています。Aurora Serverless v1 の場合、すべてのイベントは管理イベントで、イベントソースは rdsdata.amazonaws.com、イベントタイプは AwsApiCall です。

{ "eventVersion": "1.05", "userIdentity": { "type": "IAMUser", "principalId": "AKIAIOSFODNN7EXAMPLE", "arn": "arn:aws:iam::123456789012:user/johndoe", "accountId": "123456789012", "accessKeyId": "AKIAI44QH8DHBEXAMPLE", "userName": "johndoe" }, "eventTime": "2019-12-18T00:49:34Z", "eventSource": "rdsdata.amazonaws.com", "eventName": "ExecuteStatement", "awsRegion": "us-east-1", "sourceIPAddress": "192.0.2.0", "userAgent": "aws-cli/1.16.102 Python/3.7.2 Windows/10 botocore/1.12.92", "requestParameters": { "continueAfterTimeout": false, "database": "**********", "includeResultMetadata": false, "parameters": [], "resourceArn": "arn:aws:rds:us-east-1:123456789012:cluster:my-database-1", "schema": "**********", "secretArn": "arn:aws:secretsmanager:us-east-1:123456789012:secret:dataapisecret-ABC123", "sql": "**********" }, "responseElements": null, "requestID": "6ba9a36e-b3aa-4ca8-9a2e-15a9eada988e", "eventID": "a2c7a357-ee8e-4755-a0d0-aed11ed4253a", "eventType": "AwsApiCall", "recipientAccountId": "123456789012" }