CloudTrail を用いた Lambda API コールのログへの記録
Lambda は、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 に関する情報
AWS アカウントを作成すると、そのアカウントに対して CloudTrail が有効になります。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 サービスのどれを使用して行われたのかを確認するために役立ちます。詳細については、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 イベント履歴でのイベントの表示) を参照してください。
-
(
Environment
およびZipFile
パラメータは、CreateFunction
では CloudTrail ログから省かれます)。 -
(
ZipFile
パラメータは、PublishLayerVersion
では CloudTrail ログから省かれます)。 -
(
ZipFile
パラメータは、UpdateFunctionCode
では CloudTrail ログから省かれます)。 -
(
Environment
パラメータは、UpdateFunctionConfiguration
では 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"
}