AWS CloudTrail での Amazon 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 情報の使用
CloudTrail は、アカウントを作成すると AWS アカウントで有効になります。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 マネジメントコンソール によるデータイベントのログ記録」を参照してください。
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-nametrail_name--advanced-event-selectors \ '{ "Name": "RDS Data API Selector", "FieldSelectors": [ { "Field": "eventCategory", "Equals": [ "Data" ] }, { "Field": "resources.type", "Equals": [ "AWS::RDS::DBCluster" ] } ] }'
高度なイベントセレクタを設定して、readOnly、eventName, および resources.ARN フィールドでさらにフィルタリングできます。これらのフィールドの詳細については、「AdvancedFieldSelector」を参照してください。
Data API ログファイルのエントリについて
証跡は、指定した 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" }