はじめに
AWSを使用した環境でAPIを提供するにはAPI Gatewayを使用することが多いかと思います。
外部からアクセスされるAPIの場合、やはりセキュリティや可観測性を高めることは大切になってきます。
こちらの記事では、API Gatewayで構築したREST APIへ、アクセスログ出力を設定する方法を紹介します。
API Gatewayにアクセスログ出力を設定することで、セキュリティ強化、可観測性の向上、監査証跡の確保など、様々なメリットを得ることができます。
アクセスログはCloudWatch Logsへ書き込まれます。
ALBのアクセスログなどとは少し異なる設定が必要になるため、手順として解説します。
必要な設定
必要な設定は以下の4カ所になります。
- IAMロールの作成
- API GatewayへIAMロールを設定(使用リージョンごと)
- 出力先ロググループの作成
- APIの「カスタムのアクセスログ」を設定(ステージごと)
それぞれ解説します。
1. IAMロールの作成
まず、API GatewayがCloudWatch Logsへログを出力するためのIAMロールが必要になります。
このIAMロールに必要な権限はAWS公式ドキュメントに記載があります。
AmazonAPIGatewayPushToCloudWatchLogsには、必要なすべてのアクセス許可が含まれています。
このIAMポリシーを付与したIAMロールを作成します。
IAM>ロール から「ロールを作成」を選択します。
信頼されたエンティティタイプで「AWSのサービス」を選択し、ユースケースで「API Gateway」を選択して次へ進むと、上に書いたロールが選択されている状態になります。


ロール名を入力して作成することで、IAMロールの作成は完了です。
次の手順でIAMロールのARNを使用するので控えておきます。
2. API GatewayへIAMロールを設定
こちらはリージョン単位での設定になります。
API Gateway>設定 から、ログ記録と書かれた項目を編集します。

CloudWatchログのロールという項目があるので、先ほど作成したIAMロールのARNを入力し、保存します。
これでAPI GatewayがCloudWatch Logsへログ出力する際に使用するIAMロールが設定できました。
3. 出力先ロググループの作成
次に、アクセスログの出力先となるCloudWatchロググループを作成します。
ロググループ名や保持期間などの設定値を入力して作成してください。
次の手順でロググループのARNを使用するので控えておきます。
4. APIの「カスタムのアクセスログ」を設定
最後に、各APIへアクセスログの出力を設定します。
APIを選択し、左メニューからステージを選択すると「ログとトレース」という項目が確認できます。
こちらを編集します。
「カスタムのアクセスログ」を有効にすると、送信先ロググループのARN入力欄が出てくるので、先ほど作成したロググループのものを設定します。
「ログの形式」という項目では、出力されるアクセスログの形式を指定できます。
すでに決まっているものが無ければ、公式ドキュメントにサンプルがありますのでそちらを使ってみてください。

ロググループ、ログの形式が設定できたら保存し、完了となります。
アクセスログ出力確認
CloudWatch Logsの該当ロググループを確認すると、設定したAPIのアクセスログが出力されていると思います。
以下は出力例になります。

項目や形式は欲しい情報に合わせて修正してみてください。
API Gatewayへのアクセスログ設定手順は以上となります。
おわりに
以上がAPI Gatewayのアクセスログ出力手順の紹介でした。
とくに本番環境では有効にしておきたい設定のひとつだと思います。
これから設定される方の参考になりましたら幸いです。
参考
- API Gateway で REST API の CloudWatch ログ記録を設定する(AWS公式ドキュメント) https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/set-up-logging.html