AWS CloudTrail を使用した Amazon Athena API コールのログ記録 - Amazon Athena

AWS CloudTrail を使用した Amazon Athena API コールのログ記録

Athena は AWS CloudTrail と統合されており、これにより、ユーザー、ロール、または AWS のサービス によって Athena で実行されたアクションの記録を提供しています。

CloudTrail は、Athena に対するすべての API コールをイベントとしてキャプチャします。キャプチャされたコールには、Athena コンソールのコールと、Athena API オペレーションへのコードコールが含まれます。証跡を作成する場合は、Athena のイベントを含めた CloudTrail イベントの Amazon S3 バケットへの継続的な配信を有効にすることができます。追跡を設定しない場合でも、CloudTrail コンソールの Event history (イベント履歴)で最新のイベントを表示できます。

CloudTrail によって収集された情報を使用して、Athena に対して実行されたリクエスト、リクエスト実行元の IP アドレス、リクエストの実行者、リクエストの実行時、およびその他の詳細を判断することができます。

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

Athena を使用して、Athena 自体および他の AWS のサービス から、CloudTrail ログファイルをクエリすることができます。詳細については、「AWS CloudTrail ログのクエリ」、「CloudTrail SerDe」、および AWS ビッグデータブログ記事「Amazon Athena で CTAS ステートメントを使用して、コストを削減し、パフォーマンスを向上させる」 (この記事では、CloudTrail を使用して Athena の使用状況に対するインサイトを提供しています) を参照してください。

CloudTrail 内の Athena 情報

CloudTrail は、アカウント作成時に アマゾン ウェブ サービスアカウントで有効になります。Athena でアクティビティが発生すると、そのアクティビティは AWS のその他のサービスイベントと共に CloudTrail イベントの [イベント履歴] に記録されます。最近のイベントは、アマゾン ウェブ サービスアカウントで表示、検索、ダウンロードできます。詳細については、CloudTrail イベント履歴でのイベントの表示を参照してください。

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

Athena では、すべてのアクションが CloudTrail によってログに記録されます。詳細については、「Amazon Athena API リファレンス」を参照してください。例えば、StartQueryExecution アクションと GetQueryResults アクションをコールすると、CloudTrail ログファイルにエントリが生成されます。

各イベントまたはログエントリには、リクエストの生成者に関する情報が含まれます。アイデンティティ情報は以下の判断に役立ちます:

  • リクエストがルートまたは AWS Identity and Access Management (IAM) ユーザー認証情報で行われたかどうか。

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

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

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

Athena ログファイルエントリの概要

証跡は、指定した Amazon S3 バケットにイベントをログファイルとして配信するように設定できます。CloudTrail のログファイルには、1 つ以上のログエントリが含まれます。イベント は任意のソースからの 1 つのリクエストを表し、リクエストされたアクション、アクションの日時、リクエストのパラメータなどに関する情報が含まれます。CloudTrail ログファイルは、パブリック API コールの順序付けられたスタックトレースではないため、特定の順序では表示されません。

次の例は、以下に関する CloudTrail ログエントリを示しています。

StartQueryExecution (成功)

{ "eventVersion":"1.05", "userIdentity":{ "type":"IAMUser", "principalId":"EXAMPLE_PRINCIPAL_ID", "arn":"arn:aws:iam::123456789012:user/johndoe", "accountId":"123456789012", "accessKeyId":"EXAMPLE_KEY_ID", "userName":"johndoe" }, "eventTime":"2017-05-04T00:23:55Z", "eventSource":"athena.amazonaws.com", "eventName":"StartQueryExecution", "awsRegion":"us-east-1", "sourceIPAddress":"77.88.999.69", "userAgent":"aws-internal/3", "requestParameters":{ "clientRequestToken":"16bc6e70-f972-4260-b18a-db1b623cb35c", "resultConfiguration":{ "outputLocation":"s3://athena-johndoe-test/test/" }, "queryString":"Select 10" }, "responseElements":{ "queryExecutionId":"b621c254-74e0-48e3-9630-78ed857782f9" }, "requestID":"f5039b01-305f-11e7-b146-c3fc56a7dc7a", "eventID":"c97cf8c8-6112-467a-8777-53bb38f83fd5", "eventType":"AwsApiCall", "recipientAccountId":"123456789012" }

StartQueryExecution (失敗)

{ "eventVersion":"1.05", "userIdentity":{ "type":"IAMUser", "principalId":"EXAMPLE_PRINCIPAL_ID", "arn":"arn:aws:iam::123456789012:user/johndoe", "accountId":"123456789012", "accessKeyId":"EXAMPLE_KEY_ID", "userName":"johndoe" }, "eventTime":"2017-05-04T00:21:57Z", "eventSource":"athena.amazonaws.com", "eventName":"StartQueryExecution", "awsRegion":"us-east-1", "sourceIPAddress":"77.88.999.69", "userAgent":"aws-internal/3", "errorCode":"InvalidRequestException", "errorMessage":"Invalid result configuration. Should specify either output location or result configuration", "requestParameters":{ "clientRequestToken":"ca0e965f-d6d8-4277-8257-814a57f57446", "queryString":"Select 10" }, "responseElements":null, "requestID":"aefbc057-305f-11e7-9f39-bbc56d5d161e", "eventID":"6e1fc69b-d076-477e-8dec-024ee51488c4", "eventType":"AwsApiCall", "recipientAccountId":"123456789012" }

CreateNamedQuery

{ "eventVersion":"1.05", "userIdentity":{ "type":"IAMUser", "principalId":"EXAMPLE_PRINCIPAL_ID", "arn":"arn:aws:iam::123456789012:user/johndoe", "accountId":"123456789012", "accessKeyId":"EXAMPLE_KEY_ID", "userName":"johndoe" }, "eventTime":"2017-05-16T22:00:58Z", "eventSource":"athena.amazonaws.com", "eventName":"CreateNamedQuery", "awsRegion":"us-west-2", "sourceIPAddress":"77.88.999.69", "userAgent":"aws-cli/1.11.85 Python/2.7.10 Darwin/16.6.0 botocore/1.5.48", "requestParameters":{ "name":"johndoetest", "queryString":"select 10", "database":"default", "clientRequestToken":"fc1ad880-69ee-4df0-bb0f-1770d9a539b1" }, "responseElements":{ "namedQueryId":"cdd0fe29-4787-4263-9188-a9c8db29f2d6" }, "requestID":"2487dd96-3a83-11e7-8f67-c9de5ac76512", "eventID":"15e3d3b5-6c3b-4c7c-bc0b-36a8dd95227b", "eventType":"AwsApiCall", "recipientAccountId":"123456789012" },