

# Amazon API Gateway でのログ記録とモニタリング
<a name="security-monitoring"></a>

モニタリングは、API Gateway および AWS ソリューションの信頼性、可用性、およびパフォーマンスを維持する上で重要な役割を果たします。マルチポイント障害が発生した場合は、その障害をより簡単にデバッグできるように、AWS ソリューションのすべての部分からモニタリングデータを収集する必要があります。AWS は、API Gateway リソースをモニタリングし、潜在的なインシデントに対応するための複数のツールを提供します。

**Amazon CloudWatch ログ**  
リクエストの実行や API へのクライアントアクセスに関連する問題のデバッグに役立てるために、CloudWatch Logs を有効にして API コールのログを記録できます。詳細については、「[API Gateway で REST API の CloudWatch ログ記録を設定する](set-up-logging.md)」を参照してください。

**Amazon CloudWatch アラーム**  
Amazon CloudWatch アラームを使用して、指定した期間にわたって 1 つのメトリクスを確認します。メトリクスが特定のしきい値を超えると、Amazon Simple Notification Service のトピックまたは AWS Auto Scaling ポリシーに通知が送信されます。メトリクスが特定の状態にある場合、CloudWatch アラームはアクションを呼び出しません。状態が変わり、それが指定した期間だけ維持される必要があります。詳細については、「[Amazon CloudWatch のメトリクスを使用して REST API の実行をモニタリングする](monitoring-cloudwatch.md)」を参照してください。

**Firehose へのアクセスログ**  
API へのクライアントアクセスに関連する問題のデバッグに役立てるために、Firehose で API コールのログを記録できます。詳細については、「[API Gateway で REST API コールのログを Amazon Data Firehose に記録する](apigateway-logging-to-kinesis.md)」を参照してください。

**AWS CloudTrail**  
CloudTrail は、API Gateway のユーザー、ロール、または AWS のサービスによって実行されたアクションの記録を提供します。CloudTrail で収集された情報を使用して、API Gateway に対するリクエスト、リクエスト元の IP アドレス、リクエストの実行者、リクエスト日時などの詳細を確認できます。詳細については、「[AWS CloudTrail を使用した Amazon API Gateway API コールのログ記録](cloudtrail.md)」を参照してください。

**AWS X-Ray**  
X-Ray は、アプリケーションが対応するリクエストに関するデータを収集する AWS のサービスで、このデータを使ってアプリケーションの問題や最適化の機会を識別するために使用できるサービスマップを作成します。詳細については、「[API Gateway REST API で AWS X-Ray を設定する](apigateway-enabling-xray.md)」を参照してください。

**AWS Config**  
AWS Config は、アカウントにある AWS リソースの設定詳細ビューを提供します。リソース間の関係、設定変更の履歴、関係と設定の時間的な変化を確認できます。AWS Config を使用して、データコンプライアンスのためにリソース設定を評価するルールを定義できます。AWS Config ルールは、API Gateway リソースの理想的な設定を表します。リソースがルールに違反しており、非準拠としてフラグが付けられると、AWS Config は Amazon Simple Notification Service (Amazon SNS) トピックを使用してアラートを送信できます。詳細については、「[AWS Config による API Gateway API 設定のモニタリング](apigateway-config.md)」を参照してください。

# AWS CloudTrail を使用した Amazon API Gateway API コールのログ記録
<a name="cloudtrail"></a>

Amazon API Gateway は、ユーザー、ロール、または AWS のサービス が実行したアクションの記録を提供するサービスである [AWS CloudTrail](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-user-guide.html) と統合されています。CloudTrail は、API Gateway のすべての REST API コールをイベントとしてキャプチャします。キャプチャには、API Gateway コンソールからの呼び出しと API Gateway サービス API へのコード呼び出しが含まれます。CloudTrail で収集した情報を使用して、API Gateway へのリクエスト、リクエスト元の IP アドレス、リクエストの作成日時、その他の詳細を確認できます。

**注記**  
[TestInvokeAuthorizer](https://docs.aws.amazon.com/cli/latest/reference/apigateway/test-invoke-authorizer.html) と [TestInvokeMethod](https://docs.aws.amazon.com/cli/latest/reference/apigateway/test-invoke-method.html) は CloudTrail のログに記録されません。

各イベントまたはログエントリには、リクエストの生成者に関する情報が含まれます。アイデンティティ情報は、以下を判別するのに役立ちます。
+ ルートユーザーまたはユーザー認証情報のどちらを使用してリクエストが送信されたか。
+ リクエストが IAM Identity Center ユーザーに代わって行われたかどうか。
+ リクエストがロールまたはフェデレーションユーザーのテンポラリなセキュリティ認証情報を使用して行われたかどうか。
+ リクエストが、別の AWS のサービス によって送信されたかどうか。

アカウントを作成すると、AWS アカウント で CloudTrail がアクティブになり、自動的に CloudTrail の**[イベント履歴]** にアクセスできるようになります。CloudTrail の **[イベント履歴]** では、AWS リージョン で過去 90 日間に記録された 管理イベントの表示、検索、およびダウンロードが可能で、変更不可能な記録を確認できます。詳細については、「*AWS CloudTrail ユーザーガイド*」の「[CloudTrail イベント履歴の使用](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/view-cloudtrail-events.html)」を参照してください。**[イベント履歴]** の閲覧には CloudTrail の料金はかかりません。

AWS アカウント で過去 90 日間のイベントを継続的に記録するには、証跡または [CloudTrail Lake](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-lake.html) イベントデータストアを作成します。

**CloudTrail 証跡**  
*証跡*により、CloudTrail はログファイルを Amazon S3 バケットに配信できます。AWS マネジメントコンソール を使用して作成した証跡はマルチリージョンです。AWS CLI を使用する際は、単一リージョンまたは複数リージョンの証跡を作成できます。アカウント内のすべて AWS リージョン でアクティビティを把握するため、マルチリージョン証跡を作成することをお勧めします。単一リージョンの証跡を作成する場合、証跡の AWS リージョン に記録されたイベントのみを表示できます。証跡の詳細については、「*AWS CloudTrail ユーザーガイド*」の「[AWS アカウント の証跡の作成](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-create-and-update-a-trail.html)」および「[組織の証跡の作成](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/creating-trail-organization.html)」を参照してください。  
証跡を作成すると、進行中の管理イベントのコピーを 1 つ無料で CloudTrail から Amazon S3 バケットに配信できますが、Amazon S3 ストレージには料金がかかります。CloudTrail の料金の詳細については、「[AWS CloudTrail の料金](https://aws.amazon.com/cloudtrail/pricing/)」を参照してください。Amazon S3 の料金に関する詳細については、「[Amazon S3 の料金](https://aws.amazon.com/s3/pricing/)」を参照してください。

**CloudTrail Lake イベントデータストア**  
*[CloudTrail Lake]* を使用すると、イベントに対して SQL ベースのクエリを実行できます。CloudTrail Lake は、行ベースの JSON 形式の既存のイベントを [Apache ORC](https://orc.apache.org/) 形式に変換します。ORC は、データを高速に取得するために最適化された単票ストレージ形式です。イベントは、*イベントデータストア*に集約されます。イベントデータストアは、[高度なイベントセレクタ](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-lake-concepts.html#adv-event-selectors)を適用することによって選択する条件に基づいた、イベントのイミュータブルなコレクションです。どのイベントが存続し、クエリに使用できるかは、イベントデータストアに適用するセレクタが制御します。CloudTrail Lake の詳細については、「*AWS CloudTrail ユーザーガイド*」の「[AWS CloudTrail Lake の使用](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-lake.html)」を参照してください。  
CloudTrail Lake のイベントデータストアとクエリにはコストがかかります。イベントデータストアを作成する際に、イベントデータストアに使用する[料金オプション](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-lake-manage-costs.html#cloudtrail-lake-manage-costs-pricing-option)を選択します。料金オプションによって、イベントの取り込みと保存にかかる料金、および、そのイベントデータストアのデフォルトと最長の保持期間が決まります。CloudTrail の料金の詳細については、「[AWS CloudTrail の料金](https://aws.amazon.com/cloudtrail/pricing/)」を参照してください。

## CloudTrail の API Gateway 管理イベント
<a name="cloudtrail-management-events"></a>

[管理イベント](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/logging-management-events-with-cloudtrail.html#logging-management-events)では、AWS アカウント のリソースに対して実行される管理オペレーションについての情報が得られます。これらのイベントは、コントロールプレーンオペレーションとも呼ばれます。CloudTrail は、デフォルトで管理イベントをログ記録します。

Amazon API Gateway は、[TestInvokeAuthorizer](https://docs.aws.amazon.com/cli/latest/reference/apigateway/test-invoke-authorizer.html) と [TestInvokeMethod](https://docs.aws.amazon.com/cli/latest/reference/apigateway/test-invoke-method.html) を除き、すべての API Gateway アクションを管理イベントとして記録します。API Gateway が CloudTrail に記録する Amazon API Gateway アクションのリストについては、「[Amazon API Gateway API リファレンス](https://docs.aws.amazon.com/apigateway/latest/api/API_Operations.html)」を参照してください。

## API Gateway イベントの例
<a name="cloudtrail-event-examples"></a>

各イベントは任意の送信元からの単一のリクエストを表し、リクエストされた API オペレーション、オペレーションの日時、リクエストパラメータなどに関する情報を含みます。CloudTrail ログファイルは、パブリック API コールの順序付けられたスタックトレースではないため、イベントは特定の順序で表示されません。

次は、API Gateway の `GetResource` アクションを示す CloudTrail ログエントリの例です。

```
{
    Records: [
        {
            eventVersion: "1.03",
            userIdentity: {
                type: "Root",
                principalId: "AKIAI44QH8DHBEXAMPLE",
                arn: "arn:aws:iam::123456789012:root",
                accountId: "123456789012",
                accessKeyId: "AKIAIOSFODNN7EXAMPLE",
                sessionContext: {
                    attributes: {
                        mfaAuthenticated: "false",
                        creationDate: "2015-06-16T23:37:58Z"
                    }
                }
            },
            eventTime: "2015-06-17T00:47:28Z",
            eventSource: "apigateway.amazonaws.com",
            eventName: "GetResource",
            awsRegion: "us-east-1",
            sourceIPAddress: "203.0.113.11",
            userAgent: "example-user-agent-string",
            requestParameters: {
                restApiId: "3rbEXAMPLE",
                resourceId: "5tfEXAMPLE",
                template: false
            },
            responseElements: null,
            requestID: "6d9c4bfc-148a-11e5-81b6-7577cEXAMPLE",
            eventID: "4d293154-a15b-4c33-9e0a-ff5eeEXAMPLE",
            readOnly: true,
            eventType: "AwsApiCall",
            recipientAccountId: "123456789012"
        },
        ... additional entries ...
    ]
}
```

CloudTrail レコードの内容については、「*AWS CloudTrail ユーザーガイド*」の「[CloudTrail record contents](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-event-reference-record-contents.html)」を参照してください。

# AWS Config による API Gateway API 設定のモニタリング
<a name="apigateway-config"></a>

[AWS Config](https://aws.amazon.com/config/) を使用して、API Gateway API リソースに対して行われた設定の変更を記録し、リソースの変更に基づいて通知を送信することができます。API Gateway リソースの設定変更履歴を維持することは、運用上のトラブルシューティング、監査、およびコンプライアンスのユースケースに役立ちます。

AWS Config は、以下の変更を追跡することができます。
+ 以下のような **API ステージ設定**
  + キャッシュクラスター設定
  + スロットル設定
  + アクセスログ設定
  + ステージに設定されたアクティブなデプロイ
+ 以下のような **API 設定**
  + エンドポイント設定
  + バージョン
  + プロトコル
  + タグ

さらに、AWS Config ルール 機能を使用して設定ルールを定義し、これらのルールに対する違反を自動的に検出、追跡、および警告することができます。これらのリソース設定プロパティに対する変更を追跡することによって、変更によってトリガーされる AWS Config ルールを API Gateway リソースのために作成し、ベストプラクティスに照らしてリソース設定をテストすることもできます。

AWS Config コンソールか AWS Config を使用して、アカウントの AWS CLI を有効にすることができます。変更を追跡するリソースのタイプを選択してください。すべてのリソースタイプを記録するように AWS Config を既に設定している場合は、アカウントでこれらの API Gateway リソースが自動的に記録されます。AWS Config での Amazon API Gateway のサポートは、すべての AWS パブリックリージョンと AWS GovCloud (US) で利用できます。サポートされているリージョンの完全なリストについては、「AWS 全般のリファレンス」の「[Amazon API Gateway のエンドポイントとクォータ](https://docs.aws.amazon.com/general/latest/gr/apigateway.html)」を参照してください。

**Topics**
+ [サポートされているリソースタイプ](#apigateway-config-resources-rules)
+ [AWS Config のセットアップ](#apigateway-config-setup)
+ [API Gateway リソースを記録するための AWS Config の設定](#apigateway-config-configuring)
+ [AWS Config コンソールでの API Gateway 設定の詳細の表示](#apigateway-config-console)
+ [AWS Config ルールを使用した API Gateway リソースの評価](#apigateway-config-rules)

## サポートされているリソースタイプ
<a name="apigateway-config-resources-rules"></a>

以下の API Gateway リソースタイプは AWS Config と統合されており、[AWS Config でサポートされる AWS リソースタイプとリソース関係](https://docs.aws.amazon.com/config/latest/developerguide/resource-config-reference.html)に記載されています。
+ `AWS::ApiGatewayV2::Api` (WebSocket および HTTP API)
+ `AWS::ApiGateway::RestApi` (REST API)
+ `AWS::ApiGatewayV2::Stage` (WebSocket および HTTP API ステージ)
+ `AWS::ApiGateway::Stage` (REST API ステージ)

AWS Config の詳細については、[AWS Config 開発者ガイド](https://docs.aws.amazon.com/config/latest/developerguide/)を参照してください。料金情報については、「[AWS Config 料金表ページ](https://aws.amazon.com/config/pricing/)」を参照してください。

**重要**  
API のデプロイ後に以下の API プロパティのいずれかを変更した場合は、変更を反映するために API を[再デプロイ](how-to-deploy-api.md)する*必要があります*。それ以外の場合、AWS Config コンソールに属性の変更が表示されますが、以前のプロパティ設定はまだ有効です。API のランタイム動作が変更されることはありません。  
**`AWS::ApiGateway::RestApi`** – `binaryMediaTypes`, `minimumCompressionSize`, `apiKeySource`
**`AWS::ApiGatewayV2::Api`** – `apiKeySelectionExpression`

## AWS Config のセットアップ
<a name="apigateway-config-setup"></a>

AWS Config を初めて設定するには、[AWS Config デベロッパーガイド](https://docs.aws.amazon.com/config/latest/developerguide/)の以下のトピックを参照してください。
+ [コンソールによる AWS Config の設定](https://docs.aws.amazon.com/config/latest/developerguide/gs-console.html)
+ [AWS CLI による AWS Config のセットアップ](https://docs.aws.amazon.com/config/latest/developerguide/gs-cli.html)

## API Gateway リソースを記録するための AWS Config の設定
<a name="apigateway-config-configuring"></a>

デフォルトでは、環境が実行されているリージョンで検出された、サポートされているすべてのタイプのリージョナルリソースについての設定の変更が AWS Config で記録されます。AWS Config をカスタマイズすることで、特定のリソースタイプのみの変更を記録するか、グローバルリソースの変更を記録できます。

リージョナルリソースとグローバルリソースの相違点、および AWS Config 設定のカスタマイズ手順の詳細については、「[AWS Config で記録するリソースの選択](https://docs.aws.amazon.com/config/latest/developerguide/select-resources.html)」を参照してください。

## AWS Config コンソールでの API Gateway 設定の詳細の表示
<a name="apigateway-config-console"></a>

AWS Config コンソールを使用して API Gateway リソースを探し、それらの設定に関する現在および履歴的な詳細情報を取得できます。以下の手順は、API Gateway API に関する情報を見つける方法を示しています。

**AWS config コンソールで API Gateway リソースを検索するには**

1. [AWS Config コンソール](https://console.aws.amazon.com/config)を開きます。

1. [**リソース**] を選択します。

1. [**Resource (リソース)**] のインベントリページで、[**Resources (リソース)**] を選択します。

1. [**Resource type (リソースタイプ)**] メニューを開き、APIGateway または APIGatewayV2 までスクロールし、1 つ以上の API Gateway リソースタイプを選択します。

1. [**検索**] を選択します。

1. AWS Config に表示されるリソースのリストからリソース ID を選択します。AWS Config では、選択したリソースに関する設定の詳細とその他の情報が表示されます。

1. 記録した設定の詳細全体を表示するには、[**View Details (詳細を表示)**] を選択します。

このページでリソースを検索して情報を表示する他の方法については、AWS デベロッパーガイドの「[AWS Config リソースの設定および履歴の表示](https://docs.aws.amazon.com/config/latest/developerguide/view-manage-resource.html)」を参照してください。

## AWS Config ルールを使用した API Gateway リソースの評価
<a name="apigateway-config-rules"></a>

API Gateway リソースの理想的な設定を表す AWS Config ルールを作成できます。事前定義済みの [AWS Config マネージドルール](https://docs.aws.amazon.com/config/latest/developerguide/managed-rules-by-aws-config.html)を使用するか、カスタムルールを定義することができます。AWS Config は、リソースの設定変更を継続的に追跡し、これらの変更がルールの条件に違反していないかどうかを確認します。AWS Config コンソールには、ルールとリソースのコンプライアンスステータスが表示されます。

リソースがルールに違反しており、非準拠としてフラグが付けられた場合、AWS Config は [Amazon Simple Notification Service デベロッパーガイド](https://docs.aws.amazon.com/sns/latest/dg/) (Amazon SNS) のトピックを使用してアラートを送信できます。これらの AWS Config アラートのデータをプログラム的に使用するには、Amazon SNS トピックの通知エンドポイントとして Amazon Simple Queue Service (Amazon SQS) キューを使用します。

ルールの設定と使用の詳細については、[AWS Config デベロッパーガイド](https://docs.aws.amazon.com/config/latest/developerguide/)の「[ルールでのリソースの評価](https://docs.aws.amazon.com/config/latest/developerguide/evaluate-config.html)」を参照してください。