REST API の実行ログ記録
実行ログ記録は、API Gateway が API リクエストを処理するために実行するアクションを記録します。記録されたデータには、エラー、実行トレース、リクエストおよびレスポンスのパラメータ値またはペイロード、Lambda オーソライザーが使用するデータ、API キーが必要かどうか、および使用量プランが有効かどうかなどが含まれます。API Gateway は、認可ヘッダー、API キー値、および同様の機密リクエストパラメータをログデータからマスキングします。
セキュリティ体制を向上させるには、ERROR または INFO レベルで実行ログを使用することをお勧めします。これは、さまざまなコンプライアンスフレームワークに準拠するために必要になる場合があります。詳細については、AWS Security Hub ユーザーガイドの「Amazon API Gateway のコントロール」を参照してください。
標準実行ログ記録
ステージで実行ログ記録を有効にすると、API Gateway は CloudWatch Logs ロググループを自動的に作成および管理します。ロググループの名前は API-Gateway-Execution-Logs_{rest-api-id}/{stage_name} です。各ロググループ内で、ログはログストリームに分割され、[最終のイベント時刻] の順に並び替えられます。
標準実行ログ記録では、以下のようになります。
-
ログイベントは 1 KB で切り捨てられます。
-
API Gateway はロググループ名を管理します。ロググループ名を選択したり、Amazon S3 または Firehose に直接ログを送信したりすることはできません。
標準実行ログ記録を有効にするには、ステージの loggingLevel を ERROR または INFO に設定します。必要な構成は他にありません。
アクセス許可
CloudWatch Logs を有効にするには、API Gateway の CloudWatch に対するログの読み取りと書き込みのアクセス許可をアカウントに付与する必要があります。AmazonAPIGatewayPushToCloudWatchLogs マネージドポリシーには、必要なすべてのアクセス許可が含まれています。
apigateway.amazonaws.com を信頼できるエンティティとして IAM ロールを作成し、前述のポリシーをアタッチして、その IAM ロールの ARN をアカウントの cloudWatchRoleArn プロパティに設定します。このプロパティは、CloudWatch Logs を有効にする AWS リージョンごとに個別に設定する必要があります。
注記
API Gateway は IAM ロールを引き受けるために AWS Security Token Service を呼び出すため、リージョンで AWS STS が有効になっていることを確認してください。詳細については、「AWS リージョンでの AWS STS の管理」を参照してください。
実行ログ記録を有効にする (コンソール)
開始する前に、API をステージにデプロイし、アカウントに適切な CloudWatch Logs ロール ARN を設定します。
https://console.aws.amazon.com/apigateway
で API Gateway コンソールにサインインします。 -
メインナビゲーションペインで [設定] を選択し、[ログ] で [編集] を選択します。
-
[CloudWatch ログのロール ARN] に、適切なアクセス許可を持つ IAM ロールの ARN を入力します。API Gateway を使用して API を作成する AWS アカウント ごとにこれを実行する必要があります。
-
メインナビゲーションペインで [API] を選択し、REST API を選択してから [ステージ] を選択します。
-
ステージを選択し、[ログとトレース] で [編集] を選択します。
-
[CloudWatch Logs] ドロップダウンメニューからログ記録レベルを選択します。
-
[オフ] – API Gateway は、このステージのリクエストを記録しません。
-
[エラーのみ] – API Gateway はエラーのみをログに記録します。
-
[エラーと情報ログ] – API Gateway はすべてのイベントをログに記録します。
-
-
(オプション) [データトレース] を選択して、完全なリクエストおよびレスポンスデータをログに記録します。これにより、機密データがログに記録される可能性があります。
注記
本番稼働用 API では [データトレース] を有効にしないことをお勧めします。
-
(オプション) [詳細メトリクス] を選択して、詳細な CloudWatch メトリクスを有効にします。詳細については、「Amazon CloudWatch のメトリクスを使用して REST API の実行をモニタリングする」を参照してください。
-
[変更の保存] をクリックします。
ステージ設定を更新するときに API を再デプロイする必要はありません。
実行ログ記録を有効にする (CloudFormation)
ステージリソースの MethodSettings プロパティを使用して、実行ログ記録を有効にします。
TestStage: Type: AWS::ApiGateway::Stage Properties: StageName: test RestApiId: !Ref MyAPI DeploymentId: !Ref Deployment MethodSettings: - ResourcePath: "/*" HttpMethod: "*" LoggingLevel: INFO
CloudWatch Logs を有効にするには、API Gateway の CloudWatch に対するログの読み取りと書き込みのアクセス許可をアカウントに付与する必要があります。詳細については、「AWS CloudFormation ガイド」の「アカウントに IAM ロールを関連付ける」を参照してください。
実行ログの Amazon CloudWatch Logs 配信
Amazon CloudWatch Logs 配信は、実行ログのための別のパスを提供します。API Gateway が管理するロググループに書き込む代わりに、所有および管理する送信先に実行ログを送信する配信を設定します。
Amazon CloudWatch Logs 配信では、以下のようになります。
-
ログイベントは最大 1 MB で、より完全なリクエストおよびレスポンスデータをキャプチャできます。1 MB を超えるペイロードは引き続き切り捨てられます。
-
送信先として、独自の CloudWatch Logs ロググループ、Amazon S3 バケット、または Firehose ストリームを選択します。
-
複数の送信先にログを同時に送信できます。
-
名前付けや保持期間など、ロググループの設定を制御します。
重要
CloudWatch Logs 配信は、標準の実行ログ記録を置き換えます。配信を設定すると、API Gateway は自動管理ロググループへの書き込みを停止します。同じステージで両方のパスを同時に使用することはできません。
配信を作成すると、API Gateway は自動管理ロググループではなく、設定された送信先に実行ログをルーティングします。配信を削除すると、実行ログは自動的に自動管理ロググループへのフローを再開します。loggingLevel を ERROR または INFO に設定するという前提条件以外に、API Gateway の設定変更は必要ありません。
注記
ログ配信はベストエフォートです。まれに、ログイベントが配信されないことがあります。
警告
ログ配信を有効にする前に、自動管理ロググループ (API-Gateway-Execution-Logs_{rest-api-id}/{stage_name}) を参照するダッシュボード、アラーム、またはサブスクリプションフィルターを更新してください。配信がアクティブになると、そのロググループは新しいイベントを受信しなくなります。
次の表は、標準の実行ログ記録と Amazon CloudWatch Logs 配信を比較したものです。
| 標準実行ログ記録 | Amazon CloudWatch Logs 配信 | |
|---|---|---|
| ログイベントサイズ | 1 KB | 1 MB |
| 送信先 | CloudWatch Logs (マネージドロググループ) | CloudWatch Logs、Amazon S3、Firehose (独自のリソース) |
| 複数の送信先 | いいえ | はい |
| ロググループ名 | API Gateway により固定 | ユーザーが選択 |
| セットアップ | ログ記録が有効な場合は自動 | Amazon CloudWatch Logs 配信の作成が必要 |
| 前提条件 | loggingLevel を ERROR または INFO に設定 |
loggingLevel を ERROR または INFO に設定 |
注記
配信の設定後に loggingLevel を OFF に設定すると、実行ログは生成または配信されません。配信先は設定されたままですが、データは受信されません。
配信を作成するには、「REST API 実行ログのログ配信を作成する」を参照してください。