説明
API Gatewayのアクセスログはリクエスト識別子や応答ステータスなどを記録し、実行ログは処理中のエラー調査に役立ちます。両者は別の設定です。必要なログがないと、リクエストや障害を追跡しにくくなります。
API Gatewayは外部リクエストの入口になることが多く、アクセス記録がないと、障害解析や不正利用、インシデントの調査に必要な情報が不足します。
想定される影響
- リクエストの履歴を追跡しにくくなります。
- 異常な呼び出しや攻撃の試みの調査に時間がかかるおそれがあります。
- エラーの傾向や利用量の変化を分析しにくくなります。
対処方法
- ステージの
access_log_settingsを設定し、アクセスログを収集してください。 - 実行ログが必要な場合は、REST APIでは
aws_api_gateway_method_settings.settings.logging_level、WebSocket APIではdefault_route_settings.logging_levelを設定してください。HTTP APIには、この実行ログ設定を適用しません。 - 保存先、形式、配信権限、保持期間を設定し、実際の収集を確認してください。機密のリクエストデータの記録は制限してください。
例
REST APIステージとメソッド設定の抜粋です。参照するAPI、デプロイ、ロググループ、CloudWatchログの配信権限は別途構成してください。
変更前
hcl
resource "aws_api_gateway_stage" "example" {
stage_name = "dev"
rest_api_id = aws_api_gateway_rest_api.example.id
deployment_id = aws_api_gateway_deployment.example.id
}
resource "aws_api_gateway_method_settings" "example" {
rest_api_id = aws_api_gateway_rest_api.example.id
stage_name = aws_api_gateway_stage.example.stage_name
method_path = "*/*"
settings {
logging_level = "ERROR"
}
}
変更後
hcl
resource "aws_api_gateway_stage" "example" {
stage_name = "dev"
rest_api_id = aws_api_gateway_rest_api.example.id
deployment_id = aws_api_gateway_deployment.example.id
access_log_settings {
destination_arn = aws_cloudwatch_log_group.example.arn
format = jsonencode({ requestId = "$context.requestId", status = "$context.status" })
}
}
resource "aws_api_gateway_method_settings" "example" {
rest_api_id = aws_api_gateway_rest_api.example.id
stage_name = aws_api_gateway_stage.example.stage_name
method_path = "*/*"
settings {
metrics_enabled = true
logging_level = "ERROR"
}
}
説明:
- 変更前: 実行ログのレベルは設定していますが、このステージにはアクセスログの配信設定がありません。
- 変更後: リクエスト識別子とステータスをアクセスログに記録し、実行エラーのログも設定しています。実際に配信されることを確認してください。