API Gateway ステージのログ設定の確認

API の要求やエラーを調査できるよう、ステージのログ収集を構成してください。

説明

API Gateway ステージに必要なアクセスログや実行ログがないと、要求の処理やエラーの原因を追跡しにくくなります。アクセスログと実行ログは別の設定であり、他のシステムで収集するログも確認する必要があります。

アクセスログには要求識別子や応答ステータスなどを記録できます。実行ログは REST API と WebSocket API の処理を調べるために使用し、HTTP API には同じ実行ログ設定を適用しません。

想定される影響

  • 要求の記録が不足すると、不審な呼び出しや障害の原因を調査しにくくなります。
  • 機密性の高い要求データを過剰に記録したり、ログへのアクセスを広く許可したりすると、情報が漏えいするおそれがあります。

対処方法

API の種類と監査目的に合わせてアクセスログの保存先と形式を構成してください。REST API や WebSocket API で実行ログが必要な場合はログレベルも設定してください。配信に必要な権限、保持期間、アクセス制御を用意し、実際の要求記録が届くことを確認してください。機密データの本文の記録は制限してください。

例

WebSocket ステージの設定抜粋です。API とデプロイメントを別途準備し、ロググループ ARN を実際の値に置き換えてください。ロググループと API Gateway のログ配信権限は省略しています。

変更前

yaml
Resources:
  WebSocketStage:
    Type: AWS::ApiGatewayV2::Stage
    Properties:
      StageName: Prod
      ApiId: !Ref MyApi
      DeploymentId: !Ref MyDeployment

このステージにはアクセスログの配信設定がありません。実行ログやバックエンドのログ収集は別途確認してください。

変更後

yaml
Resources:
  WebSocketStage:
    Type: AWS::ApiGatewayV2::Stage
    Properties:
      StageName: Prod
      ApiId: !Ref MyApi
      DeploymentId: !Ref MyDeployment
      AccessLogSettings:
        DestinationArn: arn:aws:logs:us-east-1:123456789012:log-group:api-gateway-prod
        Format: '{"requestId":"$context.requestId","ip":"$context.identity.sourceIp","routeKey":"$context.routeKey","status":"$context.status"}'

要求識別子、送信元 IP、ルートキー、ステータスを指定のロググループに記録する設定です。実行ログやアラートを自動的に構成するものではありません。

参考資料