

# Amazon API Gateway のセキュリティ
<a name="security"></a>

AWS ではクラウドセキュリティが最優先事項です。セキュリティを最も重視する組織の要件を満たすために構築された 「AWS」 のデータセンターとネットワークアーキテクチャは、お客様に大きく貢献します。

セキュリティは、AWS とお客様とが共有する責務です。[責任共有モデル](https://aws.amazon.com/compliance/shared-responsibility-model/)では、これをクラウド*の*セキュリティおよびクラウド*内*のセキュリティと説明しています。
+ **クラウドのセキュリティ** - AWS は AWS Cloud で AWS のサービスを実行するインフラストラクチャを保護する責任を負います。また、AWS は使用するサービスを安全に提供します。[AWS コンプライアンスプログラム](https://aws.amazon.com/compliance/programs/)の一環として、サードパーティー監査者が定期的にセキュリティの有効性をテストおよび検証します。Amazon API Gateway に適用するコンプライアンスプログラムの詳細については、コンプライアンスプログラムによる対象範囲内の「[コンプライアンスプログラムによる対象範囲内の AWS のサービス](https://aws.amazon.com/compliance/services-in-scope/)」を参照してください。
+ **クラウド内のセキュリティ** - ユーザーの責任は、使用する AWS サービスに応じて異なります。また、ユーザーは、データの機密性、会社の要件、適用される法律や規制など、その他の要因についても責任を負います。

このドキュメントは、API Gateway を使用する際の責任共有モデルの適用方法を理解するのに役立ちます。以下のトピックでは、セキュリティおよびコンプライアンスの目的を達成するように API Gateway を設定する方法について説明します。また、API Gateway リソースのモニタリングや保護に役立つ他の AWS のサービスの使用方法についても説明します。

詳細については、「[Amazon API Gateway のセキュリティの概要](https://d1.awsstatic.com/whitepapers/api-gateway-security.pdf)」をご参照ください。

**Topics**
+ [Amazon API Gateway におけるデータ保護](data-protection.md)
+ [Amazon API Gateway の Identity and Access Management](security-iam.md)
+ [Amazon API Gateway でのログ記録とモニタリング](security-monitoring.md)
+ [Amazon API Gateway のコンプライアンスの検証](apigateway-compliance.md)
+ [Amazon API Gateway の耐障害性](disaster-recovery-resiliency.md)
+ [Amazon API Gateway のインフラストラクチャセキュリティ](infrastructure-security.md)
+ [Amazon API Gateway の脆弱性分析](vulnerability-analysis.md)
+ [Amazon API Gateway のセキュリティのベストプラクティス](security-best-practices.md)

# Amazon API Gateway におけるデータ保護
<a name="data-protection"></a>

AWS の[責任共有モデル](https://aws.amazon.com/compliance/shared-responsibility-model/)は、Amazon API Gateway でのデータ保護に適用されます。このモデルで説明されているように、AWS は、AWS クラウド のすべてを実行するグローバルインフラストラクチャを保護する責任を担います。お客様は、このインフラストラクチャでホストされているコンテンツに対する管理を維持する責任があります。また、使用する AWS のサービスのセキュリティ設定と管理タスクもユーザーの責任となります。データプライバシーの詳細については、[データプライバシーのよくある質問](https://aws.amazon.com/compliance/data-privacy-faq/)を参照してください。欧州でのデータ保護の詳細については、*AWS セキュリティブログ*に投稿された[AWS 責任共有モデルおよび GDPR](https://aws.amazon.com/blogs/security/the-aws-shared-responsibility-model-and-gdpr/)のブログ記事を参照してください。

データを保護するため、AWS アカウント 認証情報を保護し、AWS IAM アイデンティティセンター または AWS Identity and Access Management (IAM) を使用して個々のユーザーをセットアップすることをお勧めします。この方法により、それぞれのジョブを遂行するために必要な権限のみが各ユーザーに付与されます。また、次の方法でデータを保護することもお勧めします:
+ 各アカウントで多要素認証 (MFA) を使用します。
+ SSL/TLS を使用して AWS リソースと通信します。TLS 1.2 は必須であり TLS 1.3 がお勧めです。
+ AWS CloudTrail で API とユーザーアクティビティロギングをセットアップします。CloudTrail 証跡を使用して AWS アクティビティをキャプチャする方法については、「AWS CloudTrail ユーザーガイド**」の「[Working with CloudTrail trails](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-trails.html)」を参照してください。
+ AWS のサービス 内のすべてのデフォルトセキュリティ管理に加え、AWS 暗号化ソリューションを使用します。
+ Amazon Macie などの高度なマネージドセキュリティサービスを使用します。これらは、Amazon S3 に保存されている機密データの検出と保護を支援します。
+ コマンドラインインターフェイスまたは API を使用して AWS にアクセスする際に FIPS 140-3 検証済みの暗号化モジュールが必要な場合は、FIPS エンドポイントを使用します。利用可能な FIPS エンドポイントの詳細については、「[連邦情報処理規格 (FIPS) 140-3](https://aws.amazon.com/compliance/fips/)」を参照してください。

お客様の E メールアドレスなどの極秘または機密情報は、タグ、または名前****フィールドなどの自由形式のテキストフィールドに配置しないことを強くお勧めします。これには、コンソール、API、AWS CLI、または AWS SDK を使用して API Gateway やその他の AWS のサービス を使用する場合も含まれます。名前に使用する自由記述のテキストフィールドやタグに入力したデータは、課金や診断ログに使用される場合があります。外部サーバーへの URL を提供する場合は、そのサーバーへのリクエストを検証するための認証情報を URL に含めないように強くお勧めします。

# Amazon API Gateway でのデータ暗号化
<a name="data-protection-encryption"></a>

データ保護には、転送時 (API Gateway とのデータの送受信中) のデータ保護と、保管時 ( での保存中) のデータ保護がありますAWS

## Amazon API Gateway で保管時のデータ暗号化
<a name="data-protection-at-rest"></a>

REST API のキャッシュを有効にする場合は、キャッシュ暗号化を有効にすることができます。詳細については、「[API Gateway での REST API のキャッシュ設定](api-gateway-caching.md)」を参照してください。

データ保護の詳細については、*AWS セキュリティブログ*のブログ投稿「[AWS の責任共有モデルと GDPR](https://aws.amazon.com/blogs/security/the-aws-shared-responsibility-model-and-gdpr/)」を参照してください。

### 証明書のプライベートキーの暗号化と復号化
<a name="private-key"></a>

プライベート API のカスタムドメイン名を作成する場合、ACM 証明書とプライベートキーは、エイリアス **aws/acm** の AWS マネージド KMS キーを使用して暗号化されます。このエイリアスに対応するキー ID は、AWS KMS コンソールの **AWS マネージドキー**で確認できます。

API Gateway は ACM リソースに直接アクセスしません。AWS TLS 接続マネージャを使用して、証明書のプライベートキーを保護し、プライベートキーにアクセスします。ACM 証明書を使用してプライベート API の API Gateway カスタムドメイン名を作成すると、API Gateway は証明書をAWS TLS 接続マネージャに関連付けます。**aws/acm** というプレフィックスの AWS マネージドキーに対して AWS KMS で権限を作成して関連付けます。権限はポリシーツールであり、TLS 接続マネージャに暗号化オペレーションでの KMS キーの使用を許可します。この権限により、被付与者のプリンシパル (TLS 接続マネージャ) は指定された権限オペレーションを KMS キーで呼び出し、証明書のプライベートキーを復号化できます。TLS 接続マネージャは、証明書と復号された (プレーンテキストの) プライベートキーを使用して API Gateway サービスのクライアントとの安全な接続 (SSL/TLS セッション) を確立します。証明書がプライベート API の API Gateway カスタムドメイン名から関連付けを解除されると、それらのドメイン名へのアクセスの許可も取り消されます。

KMS キーへのアクセスを削除する場合は、AWS CLI で AWS マネジメントコンソール または `update-service` コマンドを使用して、サービスから証明書を置き換えるか削除することをお勧めします。

### API Gateway の暗号化コンテキスト
<a name="encryption-context"></a>

[暗号化コンテキスト](https://docs.aws.amazon.com/kms/latest/developerguide/encrypt_context.html)とは、プライベートキーの使用用途に関するコンテキスト情報を含む、オプションのキー値ペアのセットです。AWS KMS は暗号化コンテキストを暗号化されたデータにバインドして、追加の認証済みデータとして使用し、認証付き暗号化をサポートします。

TLS キーを API Gateway と TLS 接続マネージャで使用すると、API Gateway サービスの名前が保管中のキーの暗号化に使用される暗号化コンテキストに含まれます。証明書とプライベートキーが使用されている API Gateway カスタムドメイン名は、次のセクションに示すように CloudTrail ログの暗号化コンテキストまたは ACM コンソールの **[関連付けられたリソース]** タブで確認できます。

データを復号化するには、そのリクエストに同じ暗号化コンテキストを含めます。API Gateway はすべての AWSKMS 暗号化オペレーションで同じ暗号化コンテキストを使用します。キーは `aws:apigateway:arn` で、値は API Gateway `PrivateDomainName` リソースの Amazon リソースネーム (ARN) です。

次の例では、`CreateGrant` のようなオペレーションの出力における暗号化コンテキストを示しています。

```
"constraints": {
"encryptionContextEquals": {
"aws:acm:arn": "arn:aws:acm:us-west-2:859412291086:certificate/9177097a-f0ae-4be1-93b1-19f911ea4f88",
"aws:apigateway:arn": "arn:aws:apigateway:us-west-2:859412291086:/domainnames/denytest-part1.pdx.sahig.people.aws.dev+cbaeumzjhg"
}
},
"operations": [
"Decrypt"
],
"granteePrincipal": "tlsconnectionmanager.amazonaws.com"
```

## Amazon API Gateway で転送中のデータ暗号化
<a name="data-protection-in-transit"></a>

Amazon API Gateway で作成された API は、HTTPS エンドポイントのみ公開します。API Gateway は非暗号化 (HTTP) エンドポイントをサポートしません。

API Gateway はデフォルトの `execute-api` エンドポイントの証明書を管理します。カスタムドメイン名を設定する場合は、[ドメイン名の証明書を指定します](how-to-custom-domains.md#custom-domain-names-certificates)。ベストプラクティスとして、[証明書を固定](https://docs.aws.amazon.com/acm/latest/userguide/troubleshooting-pinning.html)しないでください。

セキュリティを強化するために、API Gateway カスタムドメインに適用する最小バージョンの Transport Layer Security (TLS) プロトコルを選択できます。WebSocket API および HTTP API は TLS 1.2 のみをサポートします。詳細については、「[API Gateway でカスタムドメインのセキュリティポリシーを選択する](apigateway-custom-domain-tls-version.md)」を参照してください。

また、アカウントで独自 SSL 証明書を使用して Amazon CloudFront ディストリビューションを設定し、リージョン API で使用することもできます。セキュリティとコンプライアンスの要件に基づいて、TLS 1.1 以降の CloudFront ディストリビューションにセキュリティポリシーを設定できます。

データ保護の詳細については、「[API Gateway で REST API を保護する](rest-api-protect.md)」と *AWS セキュリティブログ*の「[The AWS Shared Responsibility Model and GDPR](https://aws.amazon.com/blogs/security/the-aws-shared-responsibility-model-and-gdpr/)」を参照してください。

# インターネットトラフィックのプライバシー
<a name="security-traffic-privacy"></a>

Amazon API Gateway を使用すると、Amazon Virtual Private Cloud (VPC) からのみアクセスできるプライベート REST API を作成できます。VPC は、[インターフェイス VPC エンドポイント](https://docs.aws.amazon.com/vpc/latest/userguide/vpce-interface.html)を使用します。これは、VPC 内に作成するエンドポイントネットワークインターフェイスです。[ リソースポリシー](apigateway-private-api-create.md#apigateway-private-api-set-up-resource-policy)を使用して、選択した VPC および VPC エンドポイント (複数の AWS アカウント含む) から API へのアクセスを許可または拒否できます。各エンドポイントを使用して複数のプライベート API にアクセスできます。Direct Connect を使用してオンプレミスネットワークから Amazon VPC への接続を確立し、その接続経由でプライベート API にアクセスすることも可能です。いずれの場合も、プライベート API へのトラフィックは安全な接続を使用し、Amazon のネットワークの外には出ません。パブリックインターネットからは隔離されています。詳細については、「[API Gateway のプライベート REST API](apigateway-private-apis.md)」を参照してください。

# Amazon API Gateway の Identity and Access Management
<a name="security-iam"></a>

AWS Identity and Access Management (IAM) は、管理者が AWS リソースへのアクセスを安全に制御するために役立つ AWS のサービス です。IAM 管理者は、誰を*認証* (サインイン) し、誰に API Gateway リソースの使用を*承認*する (アクセス許可を付与する) かを制御します。IAM は、追加費用なしで使用できる AWS のサービス です。

**Topics**
+ [対象者](#security_iam_audience)
+ [アイデンティティによる認証](#security_iam_authentication)
+ [ポリシーを使用したアクセス権の管理](#security_iam_access-manage)
+ [Amazon API Gateway と IAM の連携方法](security_iam_service-with-iam.md)
+ [Amazon API Gateway のアイデンティティベースのポリシーの例](security_iam_id-based-policy-examples.md)
+ [Amazon API Gateway のリソースベースのポリシーの例](security_iam_resource-based-policy-examples.md)
+ [Amazon API Gateway の ID とアクセスのトラブルシューティング](security_iam_troubleshoot.md)
+ [API Gateway でのサービスリンクロールの使用](using-service-linked-roles.md)

## 対象者
<a name="security_iam_audience"></a>

AWS Identity and Access Management (IAM) の使用方法は、ロールによって異なります。
+ **サービスユーザー** - 機能にアクセスできない場合は、管理者にアクセス許可をリクエストします (「[Amazon API Gateway の ID とアクセスのトラブルシューティング](security_iam_troubleshoot.md)」を参照)。
+ **サービス管理者** - ユーザーアクセスを決定し、アクセス許可リクエストを送信します (「[Amazon API Gateway と IAM の連携方法](security_iam_service-with-iam.md)」を参照)
+ **IAM 管理者** - アクセスを管理するためのポリシーを作成します (「[Amazon API Gateway のアイデンティティベースのポリシーの例](security_iam_id-based-policy-examples.md)」を参照)

## アイデンティティによる認証
<a name="security_iam_authentication"></a>

認証とは、アイデンティティ認証情報を使用して AWS にサインインする方法です。ユーザーは、IAM ユーザー の AWS アカウントのルートユーザー として、または IAM ロールを引き受けることによって、認証される 必要があります。

AWS IAM アイデンティティセンター (IAM アイデンティティセンター)、シングルサインオン認証、Google/Facebook 認証情報などの ID ソースからの認証情報を使用して、フェデレーテッドアイデンティティとしてサインインできます。サインインの詳細については、「*AWS サインイン ユーザーガイド*」の「[AWS アカウントにサインインする方法](https://docs.aws.amazon.com/signin/latest/userguide/how-to-sign-in.html)」を参照してください。

プログラムによるアクセスの場合、AWS はリクエストに暗号で署名するための SDK と CLI を提供します。詳細については、「*IAM ユーザーガイド*」の「[API リクエストに対する AWS 署名バージョン 4](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv.html)」を参照してください。

### AWS アカウント のルートユーザー
<a name="security_iam_authentication-rootuser"></a>

 AWS アカウントを作成すると、すべての AWS のサービスとリソースに対する完全なアクセス権を持つ AWS アカウント *ルートユーザー*と呼ばれる 1 つのサインイン ID を使用して開始します。日常的なタスクには、ルートユーザーを使用しないことを強くお勧めします。ルートユーザー認証情報を必要とするタスクについては、「*IAM ユーザーガイド*」の「[ルートユーザー認証情報が必要なタスク](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html#root-user-tasks)」を参照してください。

### IAM ユーザーとグループ
<a name="security_iam_authentication-iamuser"></a>

*[IAM ユーザー](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users.html)*は、特定の個人やアプリケーションに対する特定のアクセス許可を持つアイデンティティです。長期認証情報を持つ IAM ユーザーの代わりに一時的な認証情報を使用することをお勧めします。詳細は「*IAM ユーザーガイド*」の「[人間のユーザーが一時的な認証情報を使用して AWS にアクセスするには ID プロバイダーとのフェデレーションの使用が必要です](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#bp-users-federation-idp)」を参照してください。

[https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups.html](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups.html)は、IAM ユーザーの集合を指定し、大量のユーザーに対するアクセス許可の管理を容易にします。詳細については、「*IAM ユーザーガイド*」の「[IAM ユーザーに関するユースケース](https://docs.aws.amazon.com/IAM/latest/UserGuide/gs-identities-iam-users.html)」を参照してください。

### IAM ロール
<a name="security_iam_authentication-iamrole"></a>

*[IAM ロール](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)*は、特定のアクセス許可を持つアイデンティであり、一時的な認証情報を提供します。[ユーザーから IAM ロール (コンソール) に切り替える](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-console.html)、または AWS CLI や AWS API オペレーションを呼び出すことで、ロールを引き受けることができます。詳細については、「*IAM ユーザーガイド*」の「[ロールを引き受けるための各種方法](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_manage-assume.html)」を参照してください。

IAM ロールは、フェデレーションユーザーアクセス、一時的な IAM ユーザーのアクセス許可、クロスアカウントアクセス、クロスサービスアクセス、および Amazon EC2 で実行するアプリケーションに役立ちます。詳細については、*IAM ユーザーガイド* の [IAM でのクロスアカウントリソースアクセス](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies-cross-account-resource-access.html) を参照してください。

## ポリシーを使用したアクセス権の管理
<a name="security_iam_access-manage"></a>

AWS でアクセスを制御するには、ポリシーを作成して AWS ID またはリソースにアタッチします。ポリシーは、アイデンティティやリソースとの関連付けに伴うアクセス許可を定義します。AWS は、プリンシパルがリクエストを行うときに、これらのポリシーを評価します。大半のポリシーは JSON ドキュメントとして AWS に保存されます。JSON ポリシードキュメントの詳細については、「*IAM ユーザーガイド*」の「[JSON ポリシー概要](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#access_policies-json)」を参照してください。

管理者は、ポリシーを使用して、どの**プリンシパル**がどの**リソース**に対して、どのような**条件**で**アクション**を実行できるかを定義することで、誰が何にアクセスできるかを指定します。

デフォルトでは、ユーザーやロールにアクセス許可はありません。IAM 管理者は IAM ポリシーを作成してロールに追加し、このロールをユーザーが引き受けられるようにします。IAM ポリシーは、オペレーションの実行方法を問わず、アクセス許可を定義します。

### アイデンティティベースのポリシー
<a name="security_iam_access-manage-id-based-policies"></a>

アイデンティティベースのポリシーは、アイデンティティ (ユーザー、グループ、またはロール) にアタッチできる JSON アクセス許可ポリシードキュメントです。これらのポリシーは、アイデンティティがどのリソースに対してどのような条件下でどのようなアクションを実行できるかを制御します。アイデンティティベースポリシーの作成方法については、*IAM ユーザーガイド* の [カスタマー管理ポリシーでカスタム IAM アクセス許可を定義する](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html) を参照してください。

アイデンティティベースのポリシーは、*インラインポリシー* (単一の ID に直接埋め込む) または*管理ポリシー* (複数の ID にアタッチされたスタンドアロンポリシー) にすることができます。管理ポリシーとインラインポリシーのいずれかを選択する方法については、「*IAM ユーザーガイド*」の「[管理ポリシーとインラインポリシーのいずれかを選択する](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies-choosing-managed-or-inline.html)」を参照してください。

### リソースベースのポリシー
<a name="security_iam_access-manage-resource-based-policies"></a>

リソースベースのポリシーは、リソースに添付する JSON ポリシードキュメントです。例としては、IAM *ロール信頼ポリシー*や Amazon S3 *バケットポリシー*などがあります。リソースベースのポリシーをサポートするサービスでは、サービス管理者はポリシーを使用して特定のリソースへのアクセスを制御できます。リソースベースのポリシーでは、[プリンシパルを指定する](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html)必要があります。

リソースベースのポリシーは、そのサービス内にあるインラインポリシーです。リソースベースのポリシーでは IAM の AWSマネージドポリシーは使用できません。

### アクセスコントロールリスト (ACL)
<a name="security_iam_access-manage-acl"></a>

アクセスコントロールリスト (ACL) は、どのプリンシパル (アカウントメンバー、ユーザー、またはロール) がリソースにアクセスするためのアクセス許可を持つかを制御します。ACL はリソースベースのポリシーに似ていますが、JSON ポリシードキュメント形式は使用しません。

Amazon S3、AWS WAF、および Amazon VPC は、ACL をサポートするサービスの例です。ACL の詳細については、*Amazon Simple Storage Service デベロッパーガイド* の [アクセスコントロールリスト (ACL) の概要](https://docs.aws.amazon.com/AmazonS3/latest/userguide/acl-overview.html) を参照してください。

### 他のポリシータイプ
<a name="security_iam_access-manage-other-policies"></a>

AWS は、より一般的なポリシータイプで付与された最大数のアクセス許可を設定できる、追加のポリシータイプをサポートしています。
+ **アクセス許可の境界** – アイデンティティベースのポリシーで IAM エンティティに付与することのできるアクセス許可の数の上限を設定します。詳細については、「*IAM ユーザーガイド*」の「[IAM エンティティのアクセス許可境界](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_boundaries.html)」を参照してください。
+ **サービスコントロールポリシー (SCP)** - AWS Organizations 内の組織または組織単位の最大のアクセス許可を指定します。詳細については、「*AWS Organizations ユーザーガイド*」の「[サービスコントロールポリシー](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps.html)」を参照してください。
+ **リソースコントロールポリシー (RCP)** – は、アカウント内のリソースで利用できる最大数のアクセス許可を定義します。詳細については、「*AWS Organizations ユーザーガイド*」の「[リソースコントロールポリシー (RCP)](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_rcps.html)」を参照してください。
+ **セッションポリシー** – ロールまたはフェデレーションユーザーの一時セッションを作成する際にパラメータとして渡される高度なポリシーです。詳細については、「*IAM ユーザーガイド*」の「[セッションポリシー](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session)」を参照してください。

### 複数のポリシータイプ
<a name="security_iam_access-manage-multiple-policies"></a>

1 つのリクエストに複数のタイプのポリシーが適用されると、結果として作成されるアクセス許可を理解するのがさらに難しくなります。複数のポリシータイプが関与するときに、リクエストを許可するかどうかを AWS が決定する方法の詳細については、*IAM ユーザーガイド*の「[ポリシーの評価ロジック](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html)」を参照してください。

# Amazon API Gateway と IAM の連携方法
<a name="security_iam_service-with-iam"></a>

IAM を使用して API Gateway へのアクセスを管理する前に、API Gateway で使用できる IAM 機能について理解しておく必要があります。API Gateway およびその他の AWS のサービスが IAM と連携する方法の概要を把握するには、*IAM ユーザーガイド*の「[IAM と連携する AWS のサービス](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html)」を参照してください。

**Topics**
+ [API Gateway のアイデンティティベースのポリシー](#security_iam_service-with-iam-id-based-policies)
+ [API Gateway リソースベースのポリシー](#security_iam_service-with-iam-resource-based-policies)
+ [API Gateway タグに基づく認可](#security_iam_service-with-iam-tags)
+ [API Gateway IAM ロール](#security_iam_service-with-iam-roles)

## API Gateway のアイデンティティベースのポリシー
<a name="security_iam_service-with-iam-id-based-policies"></a>

IAM アイデンティティベースのポリシーでは、許可または拒否するアクションとリソース、およびアクションを許可または拒否する条件を指定できます。API Gateway は、特定のアクション、リソース、および条件キーをサポートしています。API Gateway 固有のアクション、リソース、条件キーの詳細については、「[Amazon API Gateway Management のアクション、リソース、および条件キー](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonapigatewaymanagement.html)」および「[Amazon API Gateway Management V2 のアクション、リソース、および条件キー](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonapigatewaymanagementv2.html)」を参照してください。JSON ポリシーで使用するすべての要素については、*IAM ユーザーガイド*の「[IAM JSON ポリシーの要素のリファレンス](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements.html)」を参照してください。

次の例は、ユーザーがプライベート REST API だけを作成または更新できるようにする ID ベースのポリシーを示しています。その他の例については、「[Amazon API Gateway のアイデンティティベースのポリシーの例](security_iam_id-based-policy-examples.md)」を参照してください。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "ScopeToPrivateApis",
      "Effect": "Allow",
      "Action": [
        "apigateway:PATCH",
        "apigateway:POST",
        "apigateway:PUT"
      ],
      "Resource": [
        "arn:aws:apigateway:us-east-1::/restapis",
        "arn:aws:apigateway:us-east-1::/restapis/??????????"
      ],
      "Condition": {
        "ForAllValues:StringEqualsIfExists": {
          "apigateway:Request/EndpointType": "PRIVATE",
          "apigateway:Resource/EndpointType": "PRIVATE"
        }
      }
    },
    {
      "Sid": "AllowResourcePolicyUpdates",
      "Effect": "Allow",
      "Action": [
          "apigateway:UpdateRestApiPolicy"
      ],
      "Resource": [
          "arn:aws:apigateway:us-east-1::/restapis/*"
      ]
    }
  ]
}
```

------

### アクション
<a name="security_iam_service-with-iam-id-based-policies-actions"></a>

JSON ポリシーの `Action` 要素は、ポリシー内のアクセスを許可または拒否するために使用できるアクションを記述します。

API Gateway のポリシーアクションでは、アクションの前にプレフィックス `apigateway:` を使用します。ポリシーステートメントには、`Action` または `NotAction` エレメントを含める必要があります。API Gateway は、このサービスで実行できるタスクを記述する独自のアクションのセットを定義します。



API が管理する `Action` 式の形式は `apigateway:action` であり、ここで *action* は、**GET**、**POST**、**PUT**、**DELETE**、**PATCH** (リソースの更新用)、または **\$1** (これまでのアクションすべて) の API Gateway アクションのいずれかになります。

`Action` 式のいくつかの例は以下の通りです。
+ **apigateway:\$1**すべての API Gateway アクションについては 。
+ **apigateway:GET**API Gateway の GET アクションのみについては 。

単一のステートメントに複数のアクションを指定するには、次のようにコンマで区切ります。

```
"Action": [
      "apigateway:action1",
      "apigateway:action2"
```

特定の API Gateway オペレーションに使用する HTTP 動詞については、「[ Amazon API Gateway Version 1 API Reference](https://docs.aws.amazon.com/apigateway/api-reference/) (REST API ) 」および「[ Amazon API Gateway Version 2 API Reference](https://docs.aws.amazon.com/apigatewayv2/latest/api-reference/api-reference.html) (WebSocket API および HTTP API) 」を参照してください。

詳細については、「[Amazon API Gateway のアイデンティティベースのポリシーの例](security_iam_id-based-policy-examples.md)」を参照してください。

### リソース
<a name="security_iam_service-with-iam-id-based-policies-resources"></a>

管理者は AWS JSON ポリシーを使用して、誰が何にアクセスできるかを指定できます。つまり、どの**プリンシパル**がどの**リソース**に対してどのような**条件下で****アクション**を実行できるかということです。

`Resource` JSON ポリシー要素はアクションが適用されるオブジェクトを指定します。ベストプラクティスとして、[Amazon リソースネーム (ARN)](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html) を使用してリソースを指定します。リソースレベルの権限をサポートしないアクションの場合は、ステートメントがすべてのリソースに適用されることを示すために、ワイルドカード (\$1) を使用します。

```
"Resource": "*"
```



API Gateway リソースには、次の ARN 形式があります。

```
arn:aws:apigateway:region::resource-path-specifier
```

たとえば、ステートメントの認証者など、ID * `api-id` * とそのサブリソースで REST API を指定するには、次の ARN を使用します。

```
"Resource": "arn:aws:apigateway:us-east-2::/restapis/api-id/*"
```

特定のアカウントに属するすべての REST API やサブリソースを指定するには、ワイルドカード (\$1) を使用します。

```
"Resource": "arn:aws:apigateway:us-east-2::/restapis/*"
```

API Gateway リソースタイプとそれらの ARN の一覧については、「[API Gateway Amazon リソースネーム (ARN) リファレンス](arn-format-reference.md)」を参照してください。

### 条件キー
<a name="security_iam_service-with-iam-id-based-policies-conditionkeys"></a>

管理者は AWS JSON ポリシーを使用して、誰が何にアクセスできるかを指定できます。つまり、どの**プリンシパル**がどんな**リソース**にどんな**条件**で**アクション**を実行できるかということです。

`Condition` 要素は、定義された基準に基づいてステートメントが実行される時期を指定します。イコールや未満などの[条件演算子](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html)を使用して条件式を作成して、ポリシーの条件とリクエスト内の値を一致させることができます。すべての AWS グローバル条件キーを確認するには、*IAM ユーザーガイド*の「[AWS グローバル条件コンテキストキー](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html)」を参照してください。

API Gateway は独自の条件キーを定義し、一部のグローバル条件キーの使用もサポートしています。API Gateway の条件キーの一覧については、*IAM ユーザーガイド*の「[Amazon API Gateway の条件キー](https://docs.aws.amazon.com/IAM/latest/UserGuide/list_manageamazonapigateway.html#manageamazonapigateway-policy-keys)」を参照してください。どのアクションおよびリソースと条件キーを使用できるかについては、「[Amazon API Gateway Management V2 のアクション、リソース、および条件キー](https://docs.aws.amazon.com/IAM/latest/UserGuide/list_manageamazonapigateway.html#amazonapigateway-actions-as-permissions)」を参照してください。

属性ベースのアクセスコントロールなど、タグ付けの詳細については、[API Gateway リソースのタグ付け](apigateway-tagging.md) を参照してください。

### 例
<a name="security_iam_service-with-iam-id-based-policies-examples"></a>



API Gateway アイデンティティベースのポリシーの例については、「[Amazon API Gateway のアイデンティティベースのポリシーの例](security_iam_id-based-policy-examples.md)」を参照してください。

## API Gateway リソースベースのポリシー
<a name="security_iam_service-with-iam-resource-based-policies"></a>

リソースベースのポリシーとは、 API Gateway リソース上で指定するプリンシパルとしてのどのアクションをどの条件で実行できるかを指定する JSON ポリシードキュメントです。API Gateway は、REST API のリソースベースのアクセス許可ポリシーをサポートします。リソースポリシーを使用して、REST API を呼び出すことができるユーザーを管理します。詳細については、「[API Gateway リソースポリシーを使用して REST API へのアクセスを制御する](apigateway-resource-policies.md)」を参照してください。

### 例
<a name="security_iam_service-with-iam-resource-based-policies-examples"></a>

API Gateway リソースベースのポリシーの例については、「[API Gateway リソースポリシーの例](apigateway-resource-policies-examples.md)」を参照してください。

## API Gateway タグに基づく認可
<a name="security_iam_service-with-iam-tags"></a>

API Gateway リソースにタグをアタッチしたり、リクエスト内のタグを API Gateway に渡したりできます。タグに基づいてアクセスを制御するには、`apigateway:ResourceTag/key-name`、`aws:RequestTag/key-name`、または `aws:TagKeys` の条件キーを使用して、ポリシーの[条件要素](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition.html)でタグ情報を提供します。API Gateway リソースのタグ付けの詳細については、「[タグを使用して API Gateway REST API リソースへのアクセスをコントロールする](apigateway-tagging-iam-policy.md)」を参照してください。

リソースのタグに基づいてリソースへのアクセスを制限するためのアイデンティティベースのポリシーの例については、「[タグを使用して API Gateway REST API リソースへのアクセスをコントロールする](apigateway-tagging-iam-policy.md)」を参照してください。

## API Gateway IAM ロール
<a name="security_iam_service-with-iam-roles"></a>

[IAM ロール](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)は AWS アカウント内のエンティティで、特定の許可を持っています。

### API Gateway での一時的な認証情報の使用
<a name="security_iam_service-with-iam-roles-tempcreds"></a>

一時的な認証情報を使用して、フェデレーションでサインイン、IAM ロールを引き受ける、またはクロスアカウントロールを引き受けることができます。一時的なセキュリティ認証情報を取得するには、[AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) または [GetFederationToken](https://docs.aws.amazon.com/STS/latest/APIReference/API_GetFederationToken.html) などの AWS STS API オペレーションを呼び出します。

API Gateway では、一時認証情報の使用をサポートしています。

### サービスにリンクされたロール
<a name="security_iam_service-with-iam-roles-service-linked"></a>

[サービスリンクロール](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_terms-and-concepts.html#iam-term-service-linked-role)は、AWS サービスが他のサービスのリソースにアクセスしてお客様の代わりにアクションを完了することを許可します。サービスリンクロールは IAM アカウント内に表示され、サービスによって所有されます。IAM 管理者は、サービスにリンクされたロールのアクセス許可を表示できますが、編集することはできません。

API Gateway は、サービスリンクロールをサポートします。API Gateway サービスにリンクされたロールの作成または管理の詳細については、「[API Gateway でのサービスリンクロールの使用](using-service-linked-roles.md)」を参照してください。

### サービスロール
<a name="security_iam_service-with-iam-roles-service"></a>

サービスは、ユーザーに代わって[サービスロール](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_terms-and-concepts.html#iam-term-service-role)を引き受けることができます。このサービスロールにより、サービスはユーザーに代わって他のサービスのリソースにアクセスし、アクションを完了できます。サービスロールロールは、IAM アカウントに表示され、アカウントによって所有されます。そのため、管理者はこのロールのアクセス権限を変更できます。ただし、それにより、サービスの機能が損なわれる場合があります。

API Gateway は、サービスロールをサポートします。

# Amazon API Gateway のアイデンティティベースのポリシーの例
<a name="security_iam_id-based-policy-examples"></a>

デフォルトでは、IAM ユーザーとロールには API Gateway リソースを作成または変更するためのアクセス許可はありません。AWS マネジメントコンソール、AWS CLI、または AWS SDK を使用してタスクを実行することもできません。IAM 管理者は、ユーザーとロールに必要な、指定されたリソースで特定の API オペレーションを実行するアクセス許可をユーザーとロールに付与する IAM ポリシーを作成する必要があります。続いて、管理者はそれらのアクセス許可が必要な IAM ユーザーまたはグループにそのポリシーをアタッチします。

IAM ポリシーの作成方法の詳細については、* IAM ユーザーガイド* の [「[JSON] タブでのポリシーの作成 ](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html#access_policies_create-json-editor)」を参照してください。API Gateway 固有のアクション、リソース、条件の詳細については、「[Amazon API Gateway Management のアクション、リソース、および条件キー](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonapigatewaymanagement.html)」および「[Amazon API Gateway Management V2 のアクション、リソース、および条件キー](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonapigatewaymanagementv2.html)」を参照してください。

**Topics**
+ [ポリシーに関するベストプラクティス](#security_iam_service-with-iam-policy-best-practices)
+ [ユーザーが自分の権限を表示できるようにする](#security_iam_id-based-policy-examples-view-own-permissions)
+ [シンプルな読み取りアクセス許可](#api-gateway-policy-example-apigateway-general)
+ [REQUEST または JWT オーライザだけを作成する](#security_iam_id-based-policy-examples-v2-import)
+ [デフォルトの `execute-api` エンドポイントが無効になっていることを要求する](#security_iam_id-based-policy-examples-v2-endpoint-status)
+ [ユーザーにプライベート REST API の作成または更新のみを許可する](#security_iam_id-based-policy-examples-private-api)
+ [API ルートに認可を要求する](#security_iam_id-based-policy-examples-require-authorization)
+ [ユーザーが VPC リンクを作成または更新することを防止する](#security_iam_id-based-policy-examples-deny-vpc-link)
+ [ルーティングルールを使用するためのポリシーの例](#security_iam_id-based-policy-examples-routing-mode)

## ポリシーに関するベストプラクティス
<a name="security_iam_service-with-iam-policy-best-practices"></a>

ID ベースのポリシーは、あるユーザーがアカウント内で API Gateway リソースを作成、アクセス、または削除できるどうかを決定します。これらのアクションでは、AWS アカウント に費用が発生する場合があります。アイデンティティベースポリシーを作成したり編集したりする際には、以下のガイドラインと推奨事項に従ってください:
+ **AWS マネージドポリシーの使用を開始し、最小特権のアクセス許可に移行する** – ユーザーとワークロードへのアクセス許可の付与を開始するには、多くの一般的なユースケースのためにアクセス許可を付与する *AWS マネージドポリシー*を使用します。これらは AWS アカウントで使用できます。ユースケースに固有の AWS カスタマー管理ポリシーを定義して、アクセス許可を絞り込むことをお勧めします。詳細については、*IAM ユーザーガイド* の [AWS マネージドポリシー](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#aws-managed-policies) または [ジョブ機能の AWS マネージドポリシー](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_job-functions.html) を参照してください。
+ **最小特権を適用する** – IAM ポリシーでアクセス許可を設定する場合は、タスクの実行に必要な許可のみを付与します。これを行うには、特定の条件下で特定のリソースに対して実行できるアクションを定義します。これは、*最小特権アクセス許可*とも呼ばれています。IAM を使用して許可を適用する方法の詳細については、*IAM ユーザーガイド* の [IAM でのポリシーとアクセス許可](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html) を参照してください。
+ **IAM ポリシーで条件を使用してアクセスをさらに制限する** - ポリシーに条件を追加して、アクションやリソースへのアクセスを制限できます。たとえば、ポリシー条件を記述して、すべてのリクエストを SSL を使用して送信するように指定できます。また、CloudFormation などの特定の AWS のサービス を介して使用する場合、条件を使用してサービスアクションへのアクセスを許可することもできます。詳細については、*IAM ユーザーガイド* の [IAM JSON ポリシー要素:条件](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition.html) を参照してください。
+ **IAM アクセスアナライザー を使用して IAM ポリシーを検証し、安全で機能的な権限を確保する** - IAM アクセスアナライザー は、新規および既存のポリシーを検証して、ポリシーが IAM ポリシー言語 (JSON) および IAM のベストプラクティスに準拠するようにします。IAM アクセスアナライザーは 100 を超えるポリシーチェックと実用的な推奨事項を提供し、安全で機能的なポリシーの作成をサポートします。詳細については、*IAM ユーザーガイド* の [IAM Access Analyzer でポリシーを検証する](https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-policy-validation.html) を参照してください。
+ **多要素認証 (MFA) を要求する** – AWS アカウントで IAM ユーザーまたはルートユーザーを要求するシナリオがある場合は、セキュリティを強化するために MFA をオンにします。API オペレーションが呼び出されるときに MFA を必須にするには、ポリシーに MFA 条件を追加します。詳細については、*IAM ユーザーガイド* の [MFA を使用した安全な API アクセス](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa_configure-api-require.html) を参照してください。

IAM でのベストプラクティスの詳細については、「*IAM ユーザーガイド*」の「[IAM でのセキュリティベストプラクティス](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)」を参照してください。

## ユーザーが自分の権限を表示できるようにする
<a name="security_iam_id-based-policy-examples-view-own-permissions"></a>

この例では、ユーザーアイデンティティにアタッチされたインラインおよびマネージドポリシーの表示を IAM ユーザーに許可するポリシーの作成方法を示します。このポリシーには、コンソールで、または AWS CLI か AWS API を使用してプログラム的に、このアクションを完了するアクセス許可が含まれています。

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "ViewOwnUserInfo",
            "Effect": "Allow",
            "Action": [
                "iam:GetUserPolicy",
                "iam:ListGroupsForUser",
                "iam:ListAttachedUserPolicies",
                "iam:ListUserPolicies",
                "iam:GetUser"
            ],
            "Resource": ["arn:aws:iam::*:user/${aws:username}"]
        },
        {
            "Sid": "NavigateInConsole",
            "Effect": "Allow",
            "Action": [
                "iam:GetGroupPolicy",
                "iam:GetPolicyVersion",
                "iam:GetPolicy",
                "iam:ListAttachedGroupPolicies",
                "iam:ListGroupPolicies",
                "iam:ListPolicyVersions",
                "iam:ListPolicies",
                "iam:ListUsers"
            ],
            "Resource": "*"
        }
    ]
}
```

## シンプルな読み取りアクセス許可
<a name="api-gateway-policy-example-apigateway-general"></a>

このポリシーの例は、AWS リージョン us-east-1 の `a123456789` の識別子を使用して、HTTP または WebSocket API のすべてのリソースに関する情報を取得する許可をユーザーに付与します。リソース `arn:aws:apigateway:us-east-1::/apis/a123456789/*` には、認証者やデプロイなど、API のすべてのサブリソースが含まれます。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "apigateway:GET"
      ],
      "Resource": [
        "arn:aws:apigateway:us-east-1::/apis/a123456789/*"
      ]
    }
  ]
}
```

------

## REQUEST または JWT オーライザだけを作成する
<a name="security_iam_id-based-policy-examples-v2-import"></a>

このポリシーの例を参考にすれば、ユーザーが [インポート](https://docs.aws.amazon.com/apigatewayv2/latest/api-reference/apis.html#ImportApi)を含む、`REQUEST` または `JWT` オーソリザーだけを使用して API を作成できます。ポリシーの `Resource` セクションによると、`arn:aws:apigateway:us-east-1::/apis/??????????` では、リソースは最大10 文字にする必要があります。これはAPI のサブリソースでは除外されます。この例では、`ForAllValues` セクションの `Condition` を使用します。これは、ユーザーが API をインポートすることで複数のオーソリザーを一度に作成できるためです。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "OnlyAllowSomeAuthorizerTypes",
      "Effect": "Allow",
      "Action": [
        "apigateway:PUT",
        "apigateway:POST",
        "apigateway:PATCH"
      ],
      "Resource": [
        "arn:aws:apigateway:us-east-1::/apis",
        "arn:aws:apigateway:us-east-1::/apis/??????????",
        "arn:aws:apigateway:us-east-1::/apis/*/authorizers",
        "arn:aws:apigateway:us-east-1::/apis/*/authorizers/*"
      ],
      "Condition": {
        "ForAllValues:StringEqualsIfExists": {
          "apigateway:Request/AuthorizerType": [
            "REQUEST",
            "JWT"
          ]
        }
      }
    }
  ]
}
```

------

## デフォルトの `execute-api` エンドポイントが無効になっていることを要求する
<a name="security_iam_id-based-policy-examples-v2-endpoint-status"></a>

 このポリシーの例は、`DisableExecuteApiEndpoint` が `true`の場合に、ユーザーが API を作成、更新、またはインポートすることを示してます。`DisableExecuteApiEndpoint` が `true` の場合は、クライアントは API を呼び出すために、デフォルトの `execute-api` エンドポイントを使用できません。

`BoolIfExists` の条件を使用して、 `DisableExecuteApiEndpoint` 条件キーが入力されない API を更新する呼び出しを処理します。ユーザーが API を作成またはインポートしようとすると、`DisableExecuteApiEndpoint` 条件キーは常に入力されます。

`apis/*`リソースはオーソリザーやメソッドなどのサブリソースもキャプチャするため、明示的に `Deny` ステートメントを使用して API だけを範囲とします。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "DisableExecuteApiEndpoint",
      "Effect": "Allow",
      "Action": [
        "apigateway:PATCH",
        "apigateway:POST",
        "apigateway:PUT"
      ],
      "Resource": [
        "arn:aws:apigateway:us-east-1::/apis",
        "arn:aws:apigateway:us-east-1::/apis/*"
      ],
      "Condition": {
        "BoolIfExists": {
          "apigateway:Request/DisableExecuteApiEndpoint": true
        }
      }
    },
    {
      "Sid": "ScopeDownToJustApis",
      "Effect": "Deny",
      "Action": [
        "apigateway:PATCH",
        "apigateway:POST",
        "apigateway:PUT"
      ],
      "Resource": [
        "arn:aws:apigateway:us-east-1::/apis/*/*"
      ]
    }
  ]
}
```

------

## ユーザーにプライベート REST API の作成または更新のみを許可する
<a name="security_iam_id-based-policy-examples-private-api"></a>

このポリシーの例は、ユーザーが `PRIVATE` API のみを作成することを必須とし、API を `PRIVATE` から別のタイプ (`REGIONAL` など) に変更する可能性がある更新が行われないように条件キーを使用します。

`ForAllValues` を使用して、API に追加されるすべての `EndpointType` が `PRIVATE` であることを義務付けています。API に対する更新はいずれも、それが `PRIVATE` の場合に限り、リソース条件キーを使用して許可されます。`ForAllValues` は、条件キーが存在する場合にのみ適用されます。

非貪欲マッチャー（`?`）を使用して、API IDと明示的に照合し、オーソリザーなどの非 API リソースを許可しないようにしています。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "ScopePutToPrivateApis",
            "Effect": "Allow",
            "Action": [
                "apigateway:PUT"
            ],
            "Resource": [
                "arn:aws:apigateway:us-east-1::/restapis",
                "arn:aws:apigateway:us-east-1::/restapis/??????????"
            ],
            "Condition": {
                "ForAllValues:StringEquals": {
                    "apigateway:Resource/EndpointType": "PRIVATE"
                }
            }
        },
        {
            "Sid": "ScopeToPrivateApis",
            "Effect": "Allow",
            "Action": [
                "apigateway:DELETE",
                "apigateway:PATCH",
                "apigateway:POST"
            ],
            "Resource": [
                "arn:aws:apigateway:us-east-1::/restapis",
                "arn:aws:apigateway:us-east-1::/restapis/??????????"
            ],
            "Condition": {
                "ForAllValues:StringEquals": {
                    "apigateway:Request/EndpointType": "PRIVATE",
                    "apigateway:Resource/EndpointType": "PRIVATE"
                }
            }
        },
        {
            "Sid": "AllowResourcePolicyUpdates",
            "Effect": "Allow",
            "Action": [
                "apigateway:UpdateRestApiPolicy"
            ],
            "Resource": [
                "arn:aws:apigateway:us-east-1::/restapis/*"
            ]
        }
    ]
}
```

------

## API ルートに認可を要求する
<a name="security_iam_id-based-policy-examples-require-authorization"></a>

このポリシーにより、ルートに認可がない場合、ルートの作成または更新 ([インポート](https://docs.aws.amazon.com/apigatewayv2/latest/api-reference/apis.html#ImportApi)を含む) の試行が失敗します。ルートが作成または更新されていないときなど、キーが存在しないと、`ForAnyValue` は false と評価します。インポートによって複数のルートを作成することができるので、`ForAnyValue` を使用します。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "AllowUpdatesOnApisAndRoutes",
      "Effect": "Allow",
      "Action": [
        "apigateway:POST",
        "apigateway:PATCH",
        "apigateway:PUT"
      ],
      "Resource": [
        "arn:aws:apigateway:us-east-1::/apis",
        "arn:aws:apigateway:us-east-1::/apis/??????????",
        "arn:aws:apigateway:us-east-1::/apis/*/routes",
        "arn:aws:apigateway:us-east-1::/apis/*/routes/*"
      ]
    },
    {
      "Sid": "DenyUnauthorizedRoutes",
      "Effect": "Deny",
      "Action": [
        "apigateway:POST",
        "apigateway:PATCH",
        "apigateway:PUT"
      ],
      "Resource": [
        "arn:aws:apigateway:us-east-1::/apis",
        "arn:aws:apigateway:us-east-1::/apis/*"
      ],
      "Condition": {
        "ForAnyValue:StringEqualsIgnoreCase": {
          "apigateway:Request/RouteAuthorizationType": "NONE"
        }
      }
    }
  ]
}
```

------

## ユーザーが VPC リンクを作成または更新することを防止する
<a name="security_iam_id-based-policy-examples-deny-vpc-link"></a>

このポリシーは、ユーザーが VPC リンクを作成または更新することを防止します。VPC リンクを使用すると、Amazon VPC 内のリソースを VPC 外のクライアントに公開できます。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "DenyVPCLink",
      "Effect": "Deny",
      "Action": [
        "apigateway:POST",
        "apigateway:PUT",
        "apigateway:PATCH"
      ],
      "Resource": [
        "arn:aws:apigateway:us-east-1::/vpclinks",
        "arn:aws:apigateway:us-east-1::/vpclinks/*"
      ]
    }
  ]
}
```

------

## ルーティングルールを使用するためのポリシーの例
<a name="security_iam_id-based-policy-examples-routing-mode"></a>

次のポリシーの例は、RoutingRule 条件キーを使用して、ユーザーがカスタムドメイン名から REST API にトラフィックをルーティングする方法を制御する方法を示しています。これらの例を使用して、ユーザーが作成できるルーティングルールの種類に関するきめ細かなポリシーを作成できます。詳細については、「[API ステージを REST API のカスタムドメイン名に接続するためのルーティングルール](rest-api-routing-rules.md)」を参照してください。

### カスタムドメイン名によるリクエストのルーティング方法をユーザーが変更できないようにする
<a name="security_iam_id-based-policy-examples-routing-mode-1"></a>

このポリシーは、ユーザーが `BasePathMapping`、`ApiMapping`、または `RoutingRule` を作成または更新できないようにします。これらのリソースはすべて、カスタムドメイン名がリクエストを API にルーティングする方法を変更する可能性があります。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "DenyAccessBasePathMappingsApiMappingsRoutingRules",
      "Effect": "Deny",
      "Action": "apigateway:*",
      "Resource": [
        "arn:aws:apigateway:us-east-1::/domainnames/example.com/basepathmappings/*",
        "arn:aws:apigateway:us-east-1::/domainnames/example.com/apimappings/*",
        "arn:aws:apigateway:us-east-1:111122223333:/domainnames/example.com/routingrules/*"
      ]
    }
  ]
}
```

------

### ユーザーが特定の優先順位のルーティングルールを更新できるようにする
<a name="security_iam_id-based-policy-examples-routing-mode-2"></a>

このポリシーは、ユーザーがルーティングルールを 1001～2000 の優先度にのみ更新できるようにします。このルールを使用して、本番稼働用ルールを優先度の低いルールから分離し、ユーザーが本番稼働用ルールに影響を与えることなく優先度の低いルールを変更できるようにします。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "UpdatingRoutingRulePriorityBetween1001And2000",
      "Effect": "Allow",
      "Action": "apigateway:UpdateRoutingRule",
      "Resource": "arn:aws:apigateway:us-east-1:111122223333:/domainnames/example.com/routingrules/*",
      "Condition": {
        "NumericGreaterThanEquals": {
          "apigateway:Resource/Priority": 1001,
          "apigateway:Request/Priority": 1001
        },
       "NumericLessThanEquals": {
          "apigateway:Resource/Priority": 2000,
          "apigateway:Request/Priority": 2000
        } 
      }
    }
  ]
}
```

------

### ユーザーが特定のベースパス値のルーティングルールまたはベースパスマッピングを更新できるようにする
<a name="security_iam_id-based-policy-examples-routing-mode-3"></a>

このポリシーにより、ユーザーは `orders` で始まる任意のベースパスのベースパスマッピングのみを更新したり、`orders` で始まるベースパスに一致するルーティングルールを更新したりできます。このポリシーでは、ユーザーは `orders/create` または `orders123` のベースパスマッピングまたはルーティングルールを更新できますが、`payment/orders` は更新できません。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
      {
        "Sid": "AllowUpdateRoutingRuleUnderPathOrders",
        "Effect": "Allow",
        "Action": "apigateway:UpdateRoutingRule",
        "Resource": "arn:aws:apigateway:us-east-1:111122223333:/domainnames/example.com/routingrules/*",
        "Condition": {
            "ForAllValues:StringLike": {
                "apigateway:Request/ConditionBasePaths": ["orders*"],
                "apigateway:Resource/ConditionBasePaths": ["orders*"]
            },
            "Null":{
                 "apigateway:Request/ConditionBasePaths":"false",
                 "apigateway:Resource/ConditionBasePaths":"false"             
          }
        }
      }
  ]
}
```

------

### ユーザーがルーティングモードを特定の値に更新できるようにする
<a name="security_iam_id-based-policy-examples-routing-mode-4"></a>

このポリシーにより、ユーザーはルーティングモードを `API_MAPPING_ONLY` および `ROUTING_RULE_THEN_API_MAPPING` にのみ更新できるようになります。ルーティングモードの詳細については、「[カスタムドメイン名のルーティングモードを設定する](set-routing-mode.md)」を参照してください。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
        {
           "Sid": "AllowUpdateRoutingModeToAnythingWithApiMapping",
           "Effect": "Allow",
           "Action": ["apigateway:PATCH"],
           "Resource": "arn:aws:apigateway:us-east-1::/domainnames/example.com",
              "Condition": {
               "StringLike": {
                   "apigateway:Request/RoutingMode":"*API_MAPPING*"
               }
           }
       }
    ]
}
```

------

# Amazon API Gateway のリソースベースのポリシーの例
<a name="security_iam_resource-based-policy-examples"></a>

リソースベースのポリシーの例については、「[API Gateway リソースポリシーの例](apigateway-resource-policies-examples.md)」を参照してください。

# Amazon API Gateway の ID とアクセスのトラブルシューティング
<a name="security_iam_troubleshoot"></a>

次の情報は、API Gateway と IAM の使用に伴って発生する可能性がある一般的な問題の診断や修復に役立ちます。

**Topics**
+ [API Gateway でアクションを実行する権限がない](#security_iam_troubleshoot-no-permissions)
+ [iam:PassRole を実行する権限がありません](#security_iam_troubleshoot-passrole)
+ [AWS アカウント外のユーザーに API Gateway リソースへのアクセスを許可したい](#security_iam_troubleshoot-cross-account-access)

## API Gateway でアクションを実行する権限がない
<a name="security_iam_troubleshoot-no-permissions"></a>

アクションを実行する権限がないというエラーが表示された場合は、そのアクションを実行できるようにポリシーを更新する必要があります。

次のエラー例は、`mateojackson` IAM ユーザーがコンソールを使用して、ある `my-example-widget` リソースに関する詳細情報を表示しようとしたことを想定して、その際に必要な `apigateway:GetWidget` アクセス許可を持っていない場合に発生するものです。

```
User: arn:aws:iam::123456789012:user/mateojackson is not authorized to perform: apigateway:GetWidget on resource: my-example-widget because no identity-based policy allows the GetWidget action 
```

この場合、`apigateway:GetWidget` アクションを使用して `my-example-widget` リソースへのアクセスを許可するように、`mateojackson` ユーザーのポリシーを更新する必要があります。

サポートが必要な場合は、AWS 管理者に問い合わせてください。サインイン認証情報を提供した担当者が管理者です。

## iam:PassRole を実行する権限がありません
<a name="security_iam_troubleshoot-passrole"></a>

`iam:PassRole` アクションを実行する権限がないというエラーが表示された場合は、ポリシーを更新して API Gateway にロールを渡すことができるようにする必要があります。

一部の AWS のサービス では、新しいサービスロールやサービスリンクロールを作成せずに、既存のロールをサービスに渡すことができます。そのためには、サービスにロールを渡すアクセス許可が必要です。

以下の例のエラーは、`marymajor` という IAM ユーザーがコンソールを使用して API Gateway でアクションを実行しようする場合に発生します。ただし、このアクションをサービスが実行するには、サービスロールから付与されたアクセス許可が必要です。Mary には、ロールをサービスに渡すアクセス許可がありません。

```
User: arn:aws:iam::123456789012:user/marymajor is not authorized to perform: iam:PassRole
```

この場合、Mary のポリシーを更新してメアリーに `iam:PassRole` アクションの実行を許可する必要があります。

サポートが必要な場合は、AWS 管理者に問い合わせてください。サインイン認証情報を提供した担当者が管理者です。

## AWS アカウント外のユーザーに API Gateway リソースへのアクセスを許可したい
<a name="security_iam_troubleshoot-cross-account-access"></a>

他のアカウントのユーザーや組織外のユーザーが、リソースへのアクセスに使用できるロールを作成できます。ロールの引き受けを委託するユーザーを指定できます。リソースベースのポリシーまたはアクセスコントロールリスト (ACL) をサポートするサービスの場合、それらのポリシーを使用して、リソースへのアクセスを付与できます。

詳細については、以下を参照してください。
+ API Gateway がこれらの機能をサポートしているかどうかについては、「[Amazon API Gateway と IAM の連携方法](security_iam_service-with-iam.md)」を参照してください。
+ 所有している AWS アカウント全体のリソースへのアクセス権を提供する方法については、*IAM ユーザーガイド*の「[所有している別の AWS アカウント アカウントへのアクセス権を IAM ユーザーに提供](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_common-scenarios_aws-accounts.html)」を参照してください。
+ サードパーティの AWS アカウント にリソースへのアクセス権を提供する方法については、「*IAM ユーザーガイド*」の「[サードパーティが所有する AWS アカウント へのアクセス権を付与する](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_common-scenarios_third-party.html)」を参照してください。
+ ID フェデレーションを介してアクセスを提供する方法については、*IAM ユーザーガイド* の [外部で認証されたユーザー (ID フェデレーション) へのアクセスの許可](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_common-scenarios_federated-users.html) を参照してください。
+ クロスアカウントアクセスにおけるロールとリソースベースのポリシーの使用方法の違いについては、*IAM ユーザーガイド* の [IAM でのクロスアカウントのリソースへのアクセス](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies-cross-account-resource-access.html) を参照してください。

# API Gateway でのサービスリンクロールの使用
<a name="using-service-linked-roles"></a>

Amazon API Gateway は、AWS Identity and Access Management (IAM) [サービスリンクロール](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_terms-and-concepts.html#iam-term-service-linked-role)を使用します。サービスにリンクされたロールは、API Gateway に直接リンクされた一意のタイプの IAM ロールです。サービスリンクロールは API Gateway によって事前定義されており、サービスがユーザーに代わって AWS の他のサービスを呼び出すために必要なすべての許可が含まれています。

サービスにリンクされたロールを使用することで、必要なアクセス許可を手動で追加する必要がなくなるため、API Gateway の設定が簡単になります。API Gateway は、サービスにリンクされたロールのアクセス許可を定義します。別の指定がない限り、API Gateway のみがそのロールを引き受けることができます。定義される許可は、信頼ポリシーと許可ポリシーに含まれており、その許可ポリシーを他の IAM エンティティにアタッチすることはできません。

サービスにリンクされたロールを削除するには、まずその関連リソースを削除します。これにより、リソースに対するアクセス許可が誤って削除されることがなくなり、API Gateway リソースは保護されます。

サービスにリンクされたロールをサポートする他のサービスについては、「[IAM と連携するAWS サービス](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html)」を参照して、**サービスにリンクされたロール**列が**はい**になっているサービスを見つけてください。サービスにリンクされたロールに関するドキュメントをサービスで表示するには、[**はい**] リンクを選択します。

## API Gateway のサービスにリンクされたロールのアクセス許可
<a name="slr-permissions"></a>

API Gateway は、**AWSServiceRoleForAPIGateway** という名前のサービスリンクロールを使用します。これにより、API Gateway がユーザーに代わって Elastic Load Balancing、Amazon Data Firehose、その他のサービスリソースにアクセスすることが許可されます。

AWSServiceRoleForAPIGateway サービスリンクロールは、以下のサービスを信頼してロールを引き受けます。
+ `ops.apigateway.amazonaws.com`

ロールのアクセス許可ポリシーは、指定したリソースに対して以下のアクションを完了することを API Gateway に許可します。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "elasticloadbalancing:AddListenerCertificates",
                "elasticloadbalancing:RemoveListenerCertificates",
                "elasticloadbalancing:ModifyListener",
                "elasticloadbalancing:DescribeListeners",
                "elasticloadbalancing:DescribeLoadBalancers",
                "xray:PutTraceSegments",
                "xray:PutTelemetryRecords",
                "xray:GetSamplingTargets",
                "xray:GetSamplingRules",
                "logs:CreateLogDelivery",
                "logs:GetLogDelivery",
                "logs:UpdateLogDelivery",
                "logs:DeleteLogDelivery",
                "logs:ListLogDeliveries",
                "servicediscovery:DiscoverInstances"
            ],
            "Resource": [
                "*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "firehose:DescribeDeliveryStream",
                "firehose:PutRecord",
                "firehose:PutRecordBatch"
            ],
            "Resource": "arn:aws:firehose:*:*:deliverystream/amazon-apigateway-*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "acm:DescribeCertificate",
                "acm:GetCertificate"
            ],
            "Resource": "arn:aws:acm:*:*:certificate/*"
        },
        {
            "Effect": "Allow",
            "Action": "ec2:CreateNetworkInterfacePermission",
            "Resource": "arn:aws:ec2:*:*:network-interface/*"
        },
        {
            "Effect": "Allow",
            "Action": "ec2:CreateTags",
            "Resource": "arn:aws:ec2:*:*:network-interface/*",
            "Condition": {
                "ForAllValues:StringEquals": {
                    "aws:TagKeys": [
                        "Owner",
                        "VpcLinkId"
                    ]
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": [
                "ec2:ModifyNetworkInterfaceAttribute",
                "ec2:DeleteNetworkInterface",
                "ec2:AssignPrivateIpAddresses",
                "ec2:CreateNetworkInterface",
                "ec2:DeleteNetworkInterfacePermission",
                "ec2:DescribeNetworkInterfaces",
                "ec2:DescribeAvailabilityZones",
                "ec2:DescribeNetworkInterfaceAttribute",
                "ec2:DescribeVpcs",
                "ec2:DescribeNetworkInterfacePermissions",
                "ec2:UnassignPrivateIpAddresses",
                "ec2:DescribeSubnets",
                "ec2:DescribeRouteTables",
                "ec2:DescribeSecurityGroups"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": "servicediscovery:GetNamespace",
            "Resource": "arn:aws:servicediscovery:*:*:namespace/*"
        },
        {
            "Effect": "Allow",
            "Action": "servicediscovery:GetService",
            "Resource": "arn:aws:servicediscovery:*:*:service/*"
        }
    ]
}
```

------

サービスにリンクされたロールの作成、編集、削除を IAM エンティティ (ユーザー、グループ、ロールなど) に許可するには、アクセス許可を設定する必要があります。詳細については、*IAM ユーザーガイド*の「[サービスにリンクされたロールの許可](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html#service-linked-role-permissions)」を参照してください。

## API Gateway のサービスにリンクされたロールの作成
<a name="create-slr"></a>

サービスにリンクされたロールを手動で作成する必要はありません。AWS マネジメントコンソール、AWS CLI、または AWS API で、API、カスタムドメイン名、または VPC リンクを作成すると、API Gateway がサービスリンクロールを作成します。

このサービスにリンクされたロールを削除した後で再度作成する必要が生じた場合は、同じ方法でアカウントにロールを再作成できます。API、カスタムドメイン名、または VPC リンクを作成すると、API Gateway によってサービスリンクされたロールが再び作成されます。

## API Gateway のサービスにリンクされたロールの編集
<a name="edit-slr"></a>

API Gateway では、AWSServiceRoleForApigateWay サービスリンクロールを編集することはできません。サービスリンクロールを作成した後は、さまざまなエンティティがロールを参照する可能性があることから、ロール名を変更することはできません。ただし、IAM を使用したロール記述の編集はできます。詳細については、*IAM ユーザーガイド*の「[サービスにリンクされたロールの編集](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html#edit-service-linked-role)」を参照してください。

## API Gateway のサービスにリンクされたロールの削除
<a name="delete-slr"></a>

サービスにリンクされたロールが必要な機能またはサービスが不要になった場合には、そのロールを削除することをお勧めします。そうすることで、使用していないエンティティがアクティブにモニタリングされたり、メンテナンスされたりすることがなくなります。ただし、手動で削除する前に、サービスにリンクされたロールのリソースをクリーンアップする必要があります。

**注記**  
リソースを削除する際に、API Gateway サービスでそのロールが使用されている場合、削除は失敗することがあります。失敗した場合は、数分待ってから再度オペレーションを実行してください。

**AWSServiceRoleForApigateWay で使用される API Gateway リソースを削除するには**

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

1. サービスにリンクされたロールを使用する API、カスタムドメイン名、または VPC リンクに移動します。

1. コンソールを使用してリソースを削除します。

1. この手順を繰り返して、サービスにリンクされたロールを使用するすべての API、カスタムドメイン名、または VPC リンクを削除します。

**サービスリンクロールを IAM で手動削除するには**

IAM コンソール、AWS CLI、または AWS API を使用して、AWSServiceRoleForAPIGateway サービスリンクロールを削除します。詳細については、*IAM ユーザーガイド*の「[サービスにリンクされたロールの削除](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html#delete-service-linked-role)」を参照してください。

## API Gateway サービスリンクロールでサポートされるリージョン
<a name="slr-regions"></a>

API Gateway は、サービスを利用できるすべてのリージョンで、サービスにリンクされたロールの使用をサポートします。詳細については、「[AWS サービスエンドポイント](https://docs.aws.amazon.com/general/latest/gr/rande.html)」を参照してください。

## AWS 管理ポリシーに対する API Gateway の更新
<a name="security-iam-awsmanpol-updates"></a>



API Gateway の AWS 管理ポリシーの更新に関する詳細を、このサービスがこれらの変更の追跡を開始した以降の分について表示します。このページの変更に関する自動通知については、API Gateway の[ドキュメントの履歴](history.md)ページの RSS フィードを購読してください。


| 変更 | 説明 | 日付 | 
| --- | --- | --- | 
|  `acm:GetCertificate` のサポートが `AWSServiceRoleForAPIGateway` ポリシーに追加されました。  |  `AWSServiceRoleForAPIGateway` ポリシーに ACM `GetCertificate` API アクションを呼び出すアクセス許可が含まれるようになりました。  | 2021 年 7 月 12 日 | 
|  API Gateway が変更の追跡を開始しました  |  API Gateway が AWS 管理ポリシーの変更の追跡を開始しました。  | 2021 年 7 月 12 日 | 

# 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)」を参照してください。

# Amazon API Gateway のコンプライアンスの検証
<a name="apigateway-compliance"></a>

AWS のサービス が特定のコンプライアンスプログラムの対象であるかどうかを確認するには、「[コンプライアンスプログラムによる対象範囲内の AWS のサービス](https://aws.amazon.com/compliance/services-in-scope/)」をご覧いただき、関心のあるコンプライアンスプログラムを選択してください。一般的な情報については、「[AWSコンプライアンスプログラム](https://aws.amazon.com/compliance/programs/)」を参照してください。

AWS Artifact を使用して、サードパーティーの監査レポートをダウンロードできます。詳細については、「[AWS Artifact でレポートをダウンロードする](https://docs.aws.amazon.com/artifact/latest/ug/downloading-documents.html)」を参照してください。

AWS のサービス を使用する際のお客様のコンプライアンス責任は、お客様のデータの機密性や貴社のコンプライアンス目的、適用可能な法律および規制によって決定されます。AWS のサービスを使用する際のコンプライアンス責任の詳細については、「[AWS セキュリティドキュメント](https://docs.aws.amazon.com/security/)」を参照してください。

# Amazon API Gateway の耐障害性
<a name="disaster-recovery-resiliency"></a>

AWS のグローバルインフラストラクチャは、AWS リージョンとアベイラビリティーゾーンを中心として構築されています。AWSリージョンには、低レイテンシー、高いスループット、そして高度の冗長ネットワークで接続されている複数の物理的に独立および隔離されたアベイラビリティーゾーンがあります。アベイラビリティーゾーンでは、ゾーン間で中断することなく自動的にフェイルオーバーするアプリケーションとデータベースを設計および運用することができます。アベイラビリティーゾーンは、従来の単一または複数のデータセンターインフラストラクチャよりも可用性、耐障害性、および拡張性が優れています。

フルマネージドリージョンサービスである API Gateway は、各リージョンの複数のアベイラビリティーゾーンで動作し、アベイラビリティーゾーンの冗長性を使用して、可用性リスクのカテゴリとしてのインフラストラクチャの障害を最小限に抑えます。API Gateway は、アベイラビリティーゾーンの障害から自動的に復旧するように設計されています。

AWS リージョンとアベイラビリティーゾーンの詳細については、「[AWS グローバルインフラストラクチャ](https://aws.amazon.com/about-aws/global-infrastructure/)」を参照してください。

API へのリクエストが過度に集中しないように、API Gateway は API へのリクエストを調整します。特に API Gateway では、アカウントのすべての API に送信されるリクエストの定常レートとバーストに対して、リージョンごとに制限を設定します。API のカスタムスロットリングを設定できます。詳細については、「[API Gateway のスループットを向上させるために REST API へのリクエストをスロットリングする](api-gateway-request-throttling.md)」を参照してください。

Route 53 ヘルスチェックを使用して、プライマリリージョンの API Gateway API からセカンダリリージョンの API Gateway API への DNS フェイルオーバーを制御できます。例については、「[API Gateway API の DNS フェイルオーバーのカスタムヘルスチェックの設定](dns-failover.md)」を参照してください。

# Amazon API Gateway のインフラストラクチャセキュリティ
<a name="infrastructure-security"></a>

マネージドサービスである Amazon API Gateway は、AWS グローバルネットワークセキュリティで保護されています。AWS セキュリティサービスと AWS がインフラストラクチャを保護する方法については「[AWS クラウドセキュリティ](https://aws.amazon.com/security/)」を参照してください。インフラストラクチャセキュリティのベストプラクティスを使用して AWS 環境を設計するには「*セキュリティの柱 - AWS 適切なアーキテクチャを備えたフレームワーク*」の「[インフラストラクチャの保護](https://docs.aws.amazon.com/wellarchitected/latest/security-pillar/infrastructure-protection.html)」を参照してください。

AWS が公開した API 呼び出しを使用して、ネットワーク経由で API Gateway にアクセスします。クライアントは以下をサポートする必要があります。
+ Transport Layer Security (TLS)。TLS 1.2 が必須で、TLS 1.3 をお勧めします。
+ DHE (楕円ディフィー・ヘルマン鍵共有) や ECDHE (楕円曲線ディフィー・ヘルマン鍵共有) などの完全前方秘匿性 (PFS) による暗号スイート。これらのモードは Java 7 以降など、ほとんどの最新システムでサポートされています。

これらの API オペレーションは任意のネットワークの場所から呼び出すことができますが、API Gateway ではリソースベースのアクセスポリシーがサポートされているため、ソース IP アドレスに基づく制限を含めることができます。また、リソースベースのポリシーを使用して、特定の Amazon Virtual Private Cloud (Amazon VPC) エンドポイントまたは特定の VPC からのアクセスを制御することもできます。これにより、実質的に AWS ネットワーク内の特定の VPC からのみ特定の API Gateway リソースへのネットワークアクセスが分離されます。

# Amazon API Gateway の脆弱性分析
<a name="vulnerability-analysis"></a>

構成および IT 管理は、AWS、お客様および弊社のお客様の間で共有される責任です。詳細については、AWS [責任共有モデル](https://aws.amazon.com/compliance/shared-responsibility-model/)を参照してください。

# Amazon API Gateway のセキュリティのベストプラクティス
<a name="security-best-practices"></a>

API Gateway には、独自のセキュリティポリシーを作成および実装する際に役立ついくつかのセキュリティ機能が用意されています。以下のベストプラクティスは一般的なガイドラインであり、完全なセキュリティソリューションに相当するものではありません。これらのベストプラクティスはお客様の環境に適切ではないか、十分ではない場合があるため、これらは指示ではなく、有用な考慮事項と見なしてください。

**最小特権アクセスの実装**  
IAM ポリシーを使用して、API Gateway の API の作成、読み取り、更新、削除について最小権限のアクセスを実装します。詳細については、「[Amazon API Gateway の Identity and Access Management](security-iam.md)」を参照してください。API Gateway には、作成した API へのアクセスをコントロールするためのオプションがいくつか用意されています。詳細については、「[API Gateway で REST API へのアクセスを制御および管理する](apigateway-control-access-to-api.md)[API Gateway で WebSocket API へのアクセスを制御および管理する](apigateway-websocket-api-control-access.md)」と「」を参照してください。[API Gateway の JWT オーソライザーを使用して HTTP API へのアクセスを制御する](http-api-jwt-authorizer.md)

**ログ記録の実装**  
CloudWatch Logs または Amazon Data Firehose を使用して、API へのリクエストをログに記録します。詳細については、「[API Gateway で REST API をモニタリングする](rest-api-monitor.md)[API Gateway で WebSocket API のログ記録を設定する](websocket-api-logging.md)」と「」を参照してください。[API Gateway で HTTP API のログ記録を設定する](http-api-logging.md)

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

** の有効化AWS CloudTrail**  
CloudTrail は、API Gateway のユーザー、ロール、または AWS のサービスによって実行されたアクションの記録を提供します。CloudTrail で収集された情報を使用して、API Gateway に対するリクエスト、リクエスト元の IP アドレス、リクエストの実行者、リクエスト日時などの詳細を確認できます。詳細については、「[AWS CloudTrail を使用した Amazon API Gateway API コールのログ記録](cloudtrail.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 Security Hub CSPM を使用する**  
[AWS Security Hub CSPM](https://docs.aws.amazon.com/securityhub/latest/userguide/what-is-securityhub.html) を使用して、セキュリティのベストプラクティスに関連する API Gateway の使用状況をモニタリングします。Security Hub CSPM は、*セキュリティコントロール*を使用してリソース設定と*セキュリティ標準*を評価し、お客様がさまざまなコンプライアンスフレームワークに準拠できるようサポートします。Security Hub CSPM を使用して API Gateway リソースを評価する方法の詳細については、「*AWS Security Hub ユーザーガイド*」の「[Amazon API Gateway コントロール](https://docs.aws.amazon.com/securityhub/latest/userguide/apigateway-controls.html)」を参照してください。