

# API Gateway での REST API のセキュリティポリシー
<a name="apigateway-security-policies"></a>

*セキュリティポリシー*は、API Gateway が提供する TLS の最小バージョンと暗号スイートの事前定義された組み合わせです。クライアントが API またはカスタムドメイン名への TLS ハンドシェイクを確立すると、セキュリティポリシーにより、API Gateway で受け入れられる TLS バージョンと暗号スイートが適用されます。セキュリティポリシーは、クライアントとサーバー間の改ざんや盗聴などのセキュリティの問題から API とカスタムドメイン名を保護します。

API Gateway は、レガシーセキュリティポリシーと拡張セキュリティポリシーをサポートしています。`TLS_1_0` および `TLS_1_2` はレガシーセキュリティポリシーです。これらのセキュリティポリシーを使用して下位互換性を確保します。`SecurityPolicy_` で始まるポリシーは、拡張セキュリティポリシーです。これらのポリシーは、規制対象のワークロード、高度なガバナンス、またはポスト量子暗号化に使用します。拡張セキュリティポリシーを使用する場合は、追加のガバナンスのためにエンドポイントアクセスモードも設定する必要があります。詳細については、「[エンドポイントアクセスモード](#apigateway-security-policies-endpoint-access-mode)」を参照してください。

## API Gateway がセキュリティポリシーを適用する方法
<a name="apigateway-security-policies-understanding"></a>

次の例は、API Gateway が `SecurityPolicy_TLS13_1_3_2025_09` セキュリティポリシーを例として使用してセキュリティポリシーを適用する方法を示しています。

`SecurityPolicy_TLS13_1_3_2025_09` セキュリティポリシーは、TLS 1.3 トラフィックを受け入れ、TLS 1.2 および TLS 1.0 トラフィックを拒否します。TLS 1.3 トラフィックの場合、セキュリティポリシーは次の暗号スイートを受け入れます。
+ `TLS_AES_128_GCM_SHA256`
+ `TLS_AES_256_GCM_SHA384`
+ `TLS_CHACHA20_POLY1305_SHA256`

API Gateway は、他の暗号スイートを受け付けません。例えば、セキュリティポリシーは、`AES128-SHA` 暗号スイートを使用する TLS 1.3 トラフィックを拒否します。サポートされる TLS バージョンと暗号の詳細については、「[Supported security policies](apigateway-security-policies-list.md)」を参照してください。

API Gateway へのアクセスに使用した TLS プロトコルと暗号クライアントをモニタリングするには、アクセスログで `$context.tlsVersion` および `$context.cipherSuite` コンテキスト変数を使用できます。詳細については、「[API Gateway で REST API をモニタリングする](rest-api-monitor.md)」を参照してください。

## エンドポイントアクセスモード
<a name="apigateway-security-policies-endpoint-access-mode"></a>

エンドポイントアクセスモードは、`SecurityPolicy_` で始まる拡張セキュリティポリシーを使用する REST API またはカスタムドメイン名に指定する必要がある追加のパラメータです。これは、リソースを作成するとき、またはセキュリティポリシーをレガシーポリシーから拡張ポリシーに変更するときに行います。

エンドポイントアクセスモードを `STRICT` に設定すると、REST API またはカスタムドメイン名へのリクエストは、次のチェックに合格する必要があります。
+ リクエストは、リソースと同じ API Gateway エンドポイントタイプから送信する必要があります。これは、リージョンエンドポイント、エッジ最適化エンドポイント、プライベートエンドポイントのいずれかです。
+ リージョンエンドポイントまたはプライベートエンドポイントを使用する場合、API Gateway は SNI ホストマッチングを使用します。エッジ最適化エンドポイントを使用する場合、API Gateway は CloudFront のドメインフロンティング保護に準拠します。詳細については、「[ドメインフロンティング](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/CNAMEs.html#alternate-domain-names-restrictions)」を参照してください。

これらの条件のいずれかが満たされない場合、API Gateway はリクエストを拒否します。可能であれば、`STRICT` エンドポイントアクセスモードを使用することをお勧めします。

厳格なエンドポイントアクセスモードを使用するように既存の API またはドメイン名を移行するには、まずセキュリティポリシーを拡張セキュリティポリシーに更新し、エンドポイントアクセスモードを `BASIC` に設定したままにします。トラフィックとアクセスログを検証したら、エンドポイントアクセスモードを `STRICT` に設定します。エンドポイントアクセスモードを `STRICT` から `BASIC` に移行すると、変更が伝播するまで、エンドポイントは約 15 分間使用できなくなります。

特定のアプリケーションアーキテクチャでは、エンドポイントアクセスモードを `STRICT` に設定せず、代わりにエンドポイントアクセスモードを `BASIC` に設定する必要があります。次の表は、REST API またはカスタムドメイン名で `STRICT` エンドポイントアクセスモードを使用できるようするための、いくつかのアプリケーションアーキテクチャと推奨事項を示しています。


| アーキテクチャ | 推奨される移行 | 
| --- | --- | 
| VPC エンドポイントを使用してパブリックカスタムドメイン名にアクセスします。 | このアーキテクチャでは、クロスエンドポイントタイプのトラフィックを使用します。[API Gateway でのプライベート API のカスタムドメイン名](apigateway-private-custom-domains.md) に移行することをお勧めします。 | 
|  任意のメソッドを使用して、カスタムドメイン名またはプライベート DNS 名を使用しないプライベート API を呼び出します。 | このアーキテクチャでは、ホストヘッダーと TLS ハンドシェイクで使用される SNI の間に不一致が生じ、CloudFront のドメインフロンティング制限に合格しません。プライベート DNS を使用するように VPC を移行することをお勧めします。 | 
| ドメインシャーディングを使用して、複数のドメインまたはサブドメインにコンテンツを配信します。 | このアーキテクチャでは、ホストヘッダーと TLS ハンドシェイクで使用される SNI の間に不一致が生じ、CloudFront のドメインフロンティング制限に合格しません。`HTTP/2` を使用して、このアンチパターンから移行することをお勧めします。 | 

エンドポイントアクセスモードを使用する際の考慮事項を次に示します。
+ API またはドメイン名のエンドポイントアクセスモードが `STRICT` の場合、エンドポイントタイプを変更することはできません。エンドポイントタイプを変更するには、まずエンドポイントアクセスモードを `BASIC` に変更します。
+ エンドポイントアクセスモードを `BASIC` から `STRICT` に変更すると、API Gateway が厳格なエンドポイントアクセスモードを適用するまでに 15 分の遅延が発生します。
+ セキュリティポリシーを `SecurityPolicy_` で始まるポリシーからレガシーポリシーに変更する場合は、エンドポイントアクセスモードを `""` に設定解除する必要があります。

## 考慮事項
<a name="apigateway-security-policies-considerations"></a>

API Gateway の REST API のセキュリティポリシーに関する考慮事項は次のとおりです。
+ セキュリティポリシーは、OpenAPI 定義ファイルにインポートできます。詳細については、「[x-amazon-apigateway-endpoint-access-modex-amazon-apigateway-security-policy](openapi-extensions-security-policy.md)」を参照してください。
+ API は、その API とは異なるセキュリティポリシーのカスタムドメイン名にマッピングできます。そのカスタムドメイン名を呼び出すと、API Gateway は API のセキュリティポリシーを使用して TLS ハンドシェイクをネゴシエートします。デフォルトの API エンドポイントを無効にすると、発信者が API を呼び出す方法が影響を受ける可能性があります。
+ セキュリティポリシーを変更すると、更新が完了するまでに約 15 分かかります。API の `apiStatus` をモニタリングできます。API が更新されると、`apiStatus` は `UPDATING` になり、完了すると `AVAILABLE` になります。API ステータスが `UPDATING` の場合、引き続き呼び出すことができます。
+ API Gateway は、すべての API でセキュリティポリシーをサポートしています。ただし、REST API のセキュリティポリシーのみを選択できます。API Gateway は、HTTP または WebSocket API の `TLS_1_2` セキュリティポリシーのみをサポートします。
+ API のセキュリティポリシーを `TLS_1_0` から `TLS_1_2` に更新することはできません。
+ 一部のセキュリティポリシーは、ECDSA 暗号スイートと RSA 暗号スイートの両方をサポートしています。このタイプのポリシーをカスタムドメイン名で使用すると、暗号スイートは RSA または ECDSA のいずれかのお客様が用意した証明書キータイプと一致します。このタイプのポリシーを REST API で使用すると、暗号スイートは RSA 証明書タイプと互換性のある暗号スイートと一致します。

# Supported security policies
<a name="apigateway-security-policies-list"></a>

次の表では、各 REST API エンドポイントタイプとカスタムドメイン名に指定できる[セキュリティポリシー](apigateway-security-policies.md)について説明します。これらのポリシーにより、受信接続を制御できます。API Gateway は、エグレスに TLS 1.2 のみをサポートします。API またはカスタムドメイン名のセキュリティポリシーはいつでも更新できます。

タイトルに `FIPS` が含まれるポリシーは、機密情報を保護する暗号モジュールのセキュリティ要件を規定する、米国およびカナダ政府の標準である連邦情報処理規格 (FIPS) と互換性があります。詳細については、「*AWS クラウドセキュリティコンプライアンス*」ページの「[連邦情報処理規格 (FIPS) 140](https://aws.amazon.com/compliance/fips/)」を参照してください。

FIPS ポリシーはすべて AWS-LC FIPS で検証済みの暗号化モジュールを利用しています。詳細については、サイト「*NIST Cryptographic Module Validation Program*」の「[AWS-LC Cryptographic Module](https://csrc.nist.gov/projects/cryptographic-module-validation-program/certificate/4631)」のページを参照してください。

タイトルに `PQ` が含まれるポリシーは、[ポスト量子暗号 (PQC)](https://aws.amazon.com/security/post-quantum-cryptography/) を使用して TLS 用のハイブリッドキー交換アルゴリズムを実装し、将来の量子コンピューティングの脅威に対するトラフィックの機密性を確保します。

タイトルに `PFS` が含まれるポリシーは、[Perfect Forward Secrecy (PFS)](https://en.wikipedia.org/wiki/Forward_secrecy) を使用して、セッションキーが侵害されないようにします。

タイトルに `FIPS` と `PQ` の両方が含まれるポリシーは、これらの機能の両方をサポートします。

## デフォルトのセキュリティポリシー
<a name="apigateway-security-policies-default"></a>

新しい REST API またはカスタムドメインを作成すると、リソースにはデフォルトのセキュリティポリシーが割り当てられます。次の表は、これらのリソースのデフォルトのセキュリティポリシーを示しています。


| **リソース** | **デフォルトセキュリティポリシー名** | 
| --- | --- | 
| リージョンの API | TLS\$11\$10 | 
| エッジ最適化 API | TLS\$11\$10 | 
| プライベート API | TLS\$11\$12 | 
| リージョンのドメイン | TLS\$11\$12 | 
| エッジ最適化ドメイン | TLS\$11\$12 | 
| プライベートドメイン | TLS\$11\$12 | 

## リージョン API とプライベート API とカスタムドメイン名でサポートされるセキュリティポリシー
<a name="apigateway-security-policies-non-edge"></a>

次の表では、リージョン API、プライベート API、カスタムドメイン名に指定できるセキュリティポリシーについて説明します。


| **セキュリティポリシー** | **サポートされる TLS バージョン** | **サポートされる暗号** | 
| --- | --- | --- | 
| SecurityPolicy\$1TLS13\$11\$13\$12025\$109 | TLS1.3 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/apigateway-security-policies-list.html)  | 
| SecurityPolicy\$1TLS13\$11\$13\$1FIPS\$12025\$109 | TLS1.3 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/apigateway-security-policies-list.html)  | 
| SecurityPolicy\$1TLS13\$11\$12\$1PFS\$1PQ\$12025\$109 | TLS1.3 TLS1.2 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/apigateway-security-policies-list.html) [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/apigateway-security-policies-list.html)  | 
| SecurityPolicy\$1TLS13\$11\$12\$1PQ\$12025\$109 | TLS1.3 TLS1.2 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/apigateway-security-policies-list.html) [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/apigateway-security-policies-list.html)  | 
| TLS\$11\$12 | TLS1.3 TLS1.2 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/apigateway-security-policies-list.html) [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/apigateway-security-policies-list.html)  | 
| TLS\$11\$10 |  TLS1.3 TLS1.2 TLS1.1 TLS1.0  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/apigateway-security-policies-list.html) [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/apigateway-security-policies-list.html)  | 

## エッジ最適化 API とカスタムドメイン名でサポートされるセキュリティポリシー
<a name="apigateway-security-policies-edge-optimized"></a>

次の表では、エッジ最適化 API およびエッジ最適化カスタムドメイン名に指定できるセキュリティポリシーについて説明します。


| **セキュリティポリシー名** | **サポートされる TLS バージョン** | **サポートされる暗号** | 
| --- | --- | --- | 
| SecurityPolicy\$1TLS13\$12025\$1EDGE | TLS1.3 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/apigateway-security-policies-list.html)  | 
| SecurityPolicy\$1TLS12\$1PFS\$12025\$1EDGE |  TLS1.3 TLS1.2  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/apigateway-security-policies-list.html) [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/apigateway-security-policies-list.html)  | 
| SecurityPolicy\$1TLS12\$12018\$1EDGE |  TLS1.3 TLS1.2  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/apigateway-security-policies-list.html) [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/apigateway-security-policies-list.html)  | 
| TLS\$11\$10 |  TLS1.3 TLS1.2 TLS1.1 TLS1.0  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/apigateway-security-policies-list.html) [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/apigateway-security-policies-list.html)  | 

## OpenSSL および RFC の暗号名
<a name="apigateway-secure-connections-openssl-rfc-cipher-names"></a>

OpenSSL と IETF RFC 5246 では、同じ暗号に異なる名前を使用します。以下の表では、各暗号化方式の OpenSSL 名 から RFC 名までを示しています。詳細については、OpenSSL ドキュメントの「[ciphers](https://docs.openssl.org/1.1.1/man1/ciphers/)」を参照してください。


| **OpenSSL の暗号名** | **RFC の暗号名** | 
| --- | --- | 
| TLS\$1AES\$1128\$1GCM\$1SHA256 | TLS\$1AES\$1128\$1GCM\$1SHA256 | 
| TLS\$1AES\$1256\$1GCM\$1SHA384 | TLS\$1AES\$1256\$1GCM\$1SHA384 | 
| TLS\$1CHACHA20\$1POLY1305\$1SHA256 | TLS\$1CHACHA20\$1POLY1305\$1SHA256 | 
| ECDHE-RSA-AES128- GCM-SHA256 | TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1128\$1GCM\$1SHA256 | 
| ECDHE-RSA-AES128-SHA256 | TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1128\$1CBC\$1SHA256  | 
| ECDHE-RSA-AES128-SHA | TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1128\$1CBC\$1SHA | 
| ECDHE-RSA-AES256- GCM-SHA384 | TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1256\$1GCM\$1SHA384  | 
| ECDHE-RSA-AES256-SHA384 | TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1256\$1CBC\$1SHA384  | 
| ECDHE-RSA-AES256-SHA | TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1256\$1CBC\$1SHA | 
| AES128-GCM-SHA256 | TLS\$1RSA\$1WITH\$1AES\$1128\$1GCM\$1SHA256 | 
| AES256-GCM-SHA384 | TLS\$1RSA\$1WITH\$1AES\$1256\$1GCM\$1SHA384 | 
| AES128-SHA256 | TLS\$1RSA\$1WITH\$1AES\$1128\$1CBC\$1SHA256 | 
| AES256-SHA | TLS\$1RSA\$1WITH\$1AES\$1256\$1CBC\$1SHA | 
| AES128-SHA | TLS\$1RSA\$1WITH\$1AES\$1128\$1CBC\$1SHA | 
| DES-CBC3-SHA | TLS\$1RSA\$1WITH\$13DES\$1EDE\$1CBC\$1SHA | 

# セキュリティポリシーを変更する方法
<a name="apigateway-security-policies-update"></a>

API のセキュリティポリシーを変更することができます。カスタムドメイン名を介して API にトラフィックを送信する場合、API とカスタムドメイン名が同じセキュリティポリシーを持つ必要はありません。そのカスタムドメイン名を呼び出すと、API Gateway は API のセキュリティポリシーを使用して TLS ハンドシェイクをネゴシエートします。ただし、一貫性を保つために、カスタムドメイン名と API に同じセキュリティポリシーを使用することをお勧めします。

セキュリティポリシーを変更すると、更新が完了するまでに約 15 分かかります。API の `apiStatus` をモニタリングできます。API が更新されると、`apiStatus` は `UPDATING` になり、完了すると `AVAILABLE` になります。API が更新されても、呼び出すことができます。

------
#### [ AWS マネジメントコンソール ]

**API のセキュリティポリシーを変更するには**

1. [https://console.aws.amazon.com/apigateway](https://console.aws.amazon.com/apigateway) で API Gateway コンソールにサインインします。

1. REST API を選択します。

1. **[API の設定]**、**[Edit]** の順に選択します。

1. **[セキュリティポリシー]** で、`SecurityPolicy_` で始まる新しいポリシーを選択します。

1. **[エンドポイントアクセスモード]** で、**[厳格]** を選択します。

1. **[Save changes]** (変更の保存) をクリックします。

   変更を有効にするには、API を再デプロイします。エンドポイントアクセスモードを [厳格] に変更したため、変更が完全に反映されるまでに約 15 分かかります。

------
#### [ AWS CLI ]

次の [update-rest-api](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-rest-api.html) コマンドは、API を更新して `SecurityPolicy_TLS13_1_3_2025_09` セキュリティポリシーを使用します。

```
aws apigateway update-rest-api \
    --rest-api-id abcd1234 \
    --patch-operations '[
        {
            "op": "replace",
            "path": "/securityPolicy",
            "value": "SecurityPolicy_TLS13_1_3_2025_09"
        }, 
        {
            "op": "replace",
            "path": "/endpointAccessMode",
            "value": "STRICT"
        }
    ]'
```

出力は次のようになります。

```
{
    "id": "abcd1234",
    "name": "MyAPI",
    "description": "My API with a new security policy",
    "createdDate": "2025-02-04T11:47:06-08:00",
    "apiKeySource": "HEADER",
    "endpointConfiguration": {
        "types": [
            "REGIONAL"
        ],
        "ipAddressType": "dualstack"
    },
    "tags": {},
    "disableExecuteApiEndpoint": false,
    "securityPolicy": "SecurityPolicy_TLS13_1_3_2025_09",
    "endpointAccessMode": "STRICT"
    "rootResourceId": "efg456"
}
```

次の [update-rest-api](https://docs.aws.amazon.com/cli/latest/reference/apigateway/update-rest-api.html) コマンドは、拡張セキュリティポリシーを使用して `TLS_1_0` セキュリティポリシーを使用していた API を更新します。

```
aws apigateway update-rest-api \
    --rest-api-id abcd1234 \
    --patch-operations '[
        {
            "op": "replace",
            "path": "/securityPolicy",
            "value": "TLS_1_0"
        }, 
        {
            "op": "replace",
            "path": "/endpointAccessMode",
            "value": ""
        }
    ]'
```

出力は次のようになります。

```
{
    "id": "abcd1234",
    "name": "MyAPI",
    "description": "My API with a new security policy",
    "createdDate": "2025-02-04T11:47:06-08:00",
    "apiKeySource": "HEADER",
    "endpointConfiguration": {
        "types": [
            "REGIONAL"
        ],
        "ipAddressType": "dualstack"
    },
    "tags": {},
    "disableExecuteApiEndpoint": false,
    "securityPolicy": "TLS_1_0",
    "rootResourceId": "efg456"
}
```

------