CloudTrail を用いた Lambda API コールのログへの記録 - AWS Lambda

CloudTrail を用いた Lambda API コールのログへの記録

Lambda は、AWS CloudTrail と統合されています。AWS CloudTrail は、Lambda のユーザー、ロール、または AWS のサービスで実行されたアクションを記録するためのサービスです。CloudTrail は Lambda に対する API コールをイベントとしてキャプチャします。キャプチャされた呼び出しには、Lambda コンソールの呼び出しと、Lambda API 操作へのコード呼び出しが含まれます。証跡を作成することで、Lambda のイベントを含む Amazon Simple Storage Service (Amazon S3) バケットへの CloudTrail イベントに関する、継続的な配信を有効にすることができます。証跡を設定しない場合でも、CloudTrail コンソールの Event history (イベント履歴)で最新のイベントを表示できます。CloudTrail で収集された情報を使用して、Lambda に対するリクエスト、リクエスト元の IP アドレス、リクエストを実行したユーザー、リクエスト日時などの詳細を確認できます。

CloudTrail を設定して有効にする方法などの詳細については、 ユーザーガイドを参照してください。AWS CloudTrail

CloudTrail での Lambda に関する情報

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

Lambda のイベントなど、AWS アカウント内のイベントを継続的に記録するには、証跡を作成します。証跡により、CloudTrail はログファイルを Amazon S3 バケットに配信できます。デフォルトでは、コンソールで証跡を作成するときに、証跡がすべての AWS リージョンに適用されます。証跡では、AWS パーティションのすべてのリージョンからのイベントがログに記録され、指定した S3 バケットにログファイルが配信されます。さらに、CloudTrail ログで収集したイベントデータをより詳細に分析し、それに基づく対応するためにその他の AWS のサービスを設定できます。

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

各ログエントリには、リクエストの生成者に関する情報が含まれます。ログ内のユーザー ID 情報は、リクエストが、ルートまたは AWS Identity and Access Management (IAM) ユーザーの認証情報を使用して送信されたか、ロールまたはフェデレーティッドユーザーの一時的なセキュリティ認証情報を使用して送信されたか、あるいは別の AWS のサービスによって送信されたかを確認するのに役立ちます。詳細については、CloudTrail ログイベントリファレンスuserIdentity フィールドを参照してください。

必要な場合はログファイルを自身のバケットに保管できますが、ログファイルを自動的にアーカイブまたは削除するにように Amazon S3 ライフサイクルルールを定義することもできます。デフォルトでは Amazon S3 のサーバー側の暗号化 (SSE) を使用して、ログファイルが暗号化されます。

ログファイルの配信時にすぐにアクションを実行したい場合は、新しいログファイルが配信された時点で CloudTrail から Amazon Simple Notification Service (Amazon SNS) 通知が発行されるように指定します。詳細については、CloudTrail 用の Amazon SNS 通知の設定を参照してください。

また、複数のリージョンと複数の AWS アカウントからの Lambda ログファイルを単一の S3 バケットに集約することも可能です。詳細については、「CloudTrail ログファイルの操作」を参照してください。

サポートされる Lambda API アクションのリスト

Lambda は、CloudTrail ログファイルのイベントとして、次のアクションのログ記録をサポートします。

注記

CloudTrail ログファイルではeventNameに日付やバージョン情報が含まれる場合がありますが、同じ公開 API を指しています。たとえば、GetFunctionのアクションが"GetFunction20150331"として表示される場合があります。特定のアクションとしてeventNameを表示するには、イベント履歴のログファイルエントリを表示します。詳細については、「AWS CloudTrail ユーザーガイド」「Viewing events with CloudTrail event history」(CloudTrail イベント履歴でのイベントの表示) を参照してください。

Lambda のログファイルエントリを理解する

CloudTrailログファイルには、複数のJSON形式イベントで構成される1つ以上のログエントリを記録できます。ログエントリは任意の送信元からの単一のリクエストを表し、リクエストされたアクション、パラメータ、アクションの日時などに関する情報を含みます。ログエントリは、特定の順序になるように生成されるわけではありません。つまり、パブリック API 呼び出しの順序付けられたスタックトレースではありません。

以下は、GetFunction アクションと DeleteFunction アクションの CloudTrail ログエントリの例です。

注記

eventNameには、"GetFunction20150331"のような日付やバージョン情報が含まれることがありますが、同じ公開 API を指しています。

{ "Records": [ { "eventVersion": "1.03", "userIdentity": { "type": "IAMUser", "principalId": "A1B2C3D4E5F6G7EXAMPLE", "arn": "arn:aws:iam::999999999999:user/myUserName", "accountId": "999999999999", "accessKeyId": "AKIAIOSFODNN7EXAMPLE", "userName": "myUserName" }, "eventTime": "2015-03-18T19:03:36Z", "eventSource": "lambda.amazonaws.com", "eventName": "GetFunction", "awsRegion": "us-east-1", "sourceIPAddress": "127.0.0.1", "userAgent": "Python-httplib2/0.8 (gzip)", "errorCode": "AccessDenied", "errorMessage": "User: arn:aws:iam::999999999999:user/myUserName is not authorized to perform: lambda:GetFunction on resource: arn:aws:lambda:us-west-2:999999999999:function:other-acct-function", "requestParameters": null, "responseElements": null, "requestID": "7aebcd0f-cda1-11e4-aaa2-e356da31e4ff", "eventID": "e92a3e85-8ecd-4d23-8074-843aabfe89bf", "eventType": "AwsApiCall", "recipientAccountId": "999999999999" }, { "eventVersion": "1.03", "userIdentity": { "type": "IAMUser", "principalId": "A1B2C3D4E5F6G7EXAMPLE", "arn": "arn:aws:iam::999999999999:user/myUserName", "accountId": "999999999999", "accessKeyId": "AKIAIOSFODNN7EXAMPLE", "userName": "myUserName" }, "eventTime": "2015-03-18T19:04:42Z", "eventSource": "lambda.amazonaws.com", "eventName": "DeleteFunction", "awsRegion": "us-east-1", "sourceIPAddress": "127.0.0.1", "userAgent": "Python-httplib2/0.8 (gzip)", "requestParameters": { "functionName": "basic-node-task" }, "responseElements": null, "requestID": "a2198ecc-cda1-11e4-aaa2-e356da31e4ff", "eventID": "20b84ce5-730f-482e-b2b2-e8fcc87ceb22", "eventType": "AwsApiCall", "recipientAccountId": "999999999999" } ] }

CloudTrail を使用した関数の呼び出しの証跡

CloudTrail はデータイベントもログに記録します。Lambda 関数が呼び出されるたびにイベントをログに記録するように、データイベントのログ記録を有効にすることができます。この機能は、関数の呼び出し元の ID とその呼び出しの頻度を把握するのに役立ちます。このオプションの詳細については、「証跡のデータイベントのログ記録」を参照してください。

注記

CloudTrail は、認証および承認されたリクエストのみをログに記録します。CloudTrail では、認証に失敗したリクエスト (認証情報が欠落したリクエスト、提供された認証情報が無効なリクエスト) や、関数の呼び出しが許可されていない認証情報のリクエストのログは記録されません。

CloudTrail を使用した無効なイベントソースのトラブルシューティング

発生する可能性のあるデータイベントの 1 つは、LambdaESMDisabled イベントです。このイベントに関連するエラーには、次の 5 つの一般的なカテゴリがあります。

RESOURCE_NOT_FOUND

リクエストで指定されたリソースは存在しません。

FUNCTION_NOT_FOUND

イベントソースにアタッチされている関数が存在しません。

REGION_NAME_NOT_VALID

イベントソースまたは関数に指定されたリージョン名が無効です。

AUTHORIZATION_ERROR

アクセス許可が設定されていないか、正しく設定されていません。

FUNCTION_IN_FAILED_STATE

関数コードがコンパイルされない、回復不能な例外が発生した、または不正なデプロイが発生しました。

これらのエラーは、serviceEventDetails エンティティ内の CloudTrail イベントメッセージに含まれています。

serviceEventDetails エンティティ

"serviceEventDetails":{ "ESMDisableReason":"Lambda Function not found" }