

# その他の検証モード
<a name="mtls-validation-modes"></a>

必須モードは CloudFront 相互 TLS のデフォルトです。CloudFront はすべてのクライアント証明書を検証し、失敗した接続を拒否します。ただし、mTLS 認証クライアントと未認証クライアントが混在するアプリケーションや、オリジンサーバーが独自の mTLS 検証を実行する環境など、追加のユースケースをサポートするために、CloudFront は 2 つの追加モードをサポートしています。

**オプションモード**は、混合クライアント集団が存在するアプリケーション用に設計されています。例えば、認証されていないブラウザにはパブリックコンテンツを提供する一方、API エンドポイントへのアクセスは有効な証明書を提示するクライアントに限定するポータルなどです。または、クライアントを mTLS に徐々にオンボーディングし、移行中に認証された接続と認証されていない接続の両方を許可する必要がある移行シナリオがあります。

**パススルーモード**は、オリジンサーバーが、既に mTLS 検証を実行しているお客様向けに設計されています。例えば、オンプレミスのリバースプロキシ、他の CDN、または既に証明書の検証を処理している Application Load Balancer から移行するサービスなどです。パススルーモードでは、エッジで検証ロジックを再実装することなく CloudFront をアプリケーションの前に配置できます。

## オプションモード
<a name="optional-mode-details"></a>

### クライアント証明書の検証オプションのモード
<a name="optional-mode-overview"></a>

CloudFront は、提示されたクライアント証明書を検証する代替オプションのクライアント証明書検証モードを提供しますが、証明書を提示しないクライアントへのアクセスを許可します。

### オプションモードの動作
<a name="optional-mode-behavior-details"></a>
+ 有効な証明書を持つクライアントへの接続を許可します (無効な証明書は拒否されます)。
+ 証明書のないクライアントの接続を許可します。
+ 単一のディストリビューションを通じて混合クライアント認証シナリオを許可します。

オプションモードは、mTLS 認証への段階的な移行、証明書を持つクライアントと証明書のないクライアントのサポート、レガシークライアントとの下位互換性の維持に最適です。

**注記**  
オプションモードでは、クライアントが証明書を提示しなくても Connection Functions が呼び出されます。これにより、クライアントの IP アドレスのログ記録や、証明書が提示されるかどうかに基づく異なるポリシーの適用などのカスタムロジックを実装できます。

### オプションモードを設定するには (コンソール)
<a name="configure-optional-mode-console-new"></a>

1. ディストリビューション設定で、**[全般]** タブに移動し、**[編集]** を選択します。

1. **[接続]** コンテナ内の **[ビューワー相互認証 (mTLS)]** セクションまでスクロールします。

1. **[クライアント証明書の検証モード]** で、**[オプション]** を選択します。

1. 変更の保存。

### オプションモードを設定するには (AWS CLI)
<a name="configure-optional-mode-cli-new"></a>

次の例は、オプションモードの設定方法を示しています。

```
"ViewerMtlsConfig": {
    "Mode": "optional",
    ...other settings
}
```

**証明書ヘッダーをカスタマイズする**

ビューワーリクエストの CloudFront Functions にある mTLS ヘルパー関数を使用して、オリジンに到達する前に証明書ヘッダーの名前を変更、再フォーマット、または結合します。これは、異なるヘッダー名または証明書エンコード形式を使用する他のサービスから移行する場合に役立ちます。

## パススルーモード
<a name="passthrough-mode-details"></a>

パススルーモードを使用すると、オリジンに既存の mTLS 実装があるお客様は CloudFront を使用できます。CloudFront は TLS 接続を終了し、クライアント証明書を HTTP ヘッダーとしてオリジンに転送します。証明書の検証はすべて、オリジンが行います。これには、チェーン検証、失効チェック、カスタムポリシーの適用などが含まれます。

### パススルーモードの仕組み
<a name="passthrough-how-it-works"></a>

1. クライアントは CloudFront に接続し、TLS ハンドシェイク中にクライアント証明書を提示します。

1. CloudFront は、証明書を信頼ストアに対して検証せずに TLS ハンドシェイクを完了します。

1. CloudFront は、クライアント証明書と証明書チェーンをリクエストの HTTP ヘッダーとして追加します。

1. リクエストはオリジンに転送されます。コンテンツはキャッシュされません。

1. オリジンは証明書を検証し、リクエストを処理します。

クライアントは証明書を提示しなくても接続できます。オリジンまたは Connection Function は、証明書が空のシナリオを処理します。

**注記**  
パススルーモードでは、クライアントが証明書を提示しなくても Connection Functions が呼び出されます。これにより、クライアントの IP アドレスのログ記録や、証明書が提示されるかどうかに基づく異なるポリシーの適用などのカスタムロジックを実装できます。

### 設定要件
<a name="passthrough-configuration-requirements"></a>
+ **信頼ストアなし** - ディストリビューションは、信頼ストアとの関連付けがゼロである必要があります。
+ **キャッシュが無効** - すべてのキャッシュ動作は、`CachingDisabled` マネージドキャッシュポリシーを使用する必要があります。
+ **Origin Shield 禁止** - Origin Shield を有効にすることはできません。
+ **Lambda@Edge 禁止** - Lambda@Edge 関数の関連付けは許可されていません。
+ **オリジンリクエストポリシーが必要** - `Client-Cert` ヘッダーと `Client-Cert-Chain` ヘッダーをオリジンが受信できるように、オリジンリクエストポリシーでこれらを許可リストに追加する必要があります。
+ **証明書チェーンの深度** - CloudFront では、クライアント証明書チェーンをオリジンに転送するために最大深度 4 を使用できます。

### パススルーモードを有効にする
<a name="enable-passthrough-mode"></a>

#### コンソール
<a name="enable-passthrough-console"></a>

1. マネージド `CachingDisabled` キャッシュポリシーを使用するようにすべてのキャッシュ動作を更新します。

1. CloudFront コンソールを開き、ディストリビューションを選択します。

1. **[一般]** タブを選択し、設定の下にある **[編集]** を選択します。

1. **[ビューワー相互認証 (mTLS)]** で、**[パススルー]** を選択します。

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

#### AWS CLI
<a name="enable-passthrough-cli"></a>

すべてのキャッシュ動作がマネージド `CachingDisabled` ポリシーを参照していることを確認し、ディストリビューション設定を更新します。

```
{
  "ViewerMtlsConfig": {
    "Mode": "passthrough"
  }
}
```

### オリジンに転送されるヘッダー
<a name="passthrough-headers-forwarded"></a>

CloudFront は、オリジンに送信されるリクエストに次のヘッダーを追加します。
+ `Client-Cert` - クライアントによって提示された base64 エンコードされたエンドエンティティ (リーフ) 証明書。
+ `Client-Cert-Chain` - 構造化フィールドリストとしての証明書チェーン (リーフを除く)。各証明書は base64 でエンコードされています。`Client-Cert-Chain` はリストタイプのヘッダーです。リクエストに複数回出現する可能性があります。すべての値を連結すると、元のチェーン順序が保持されます。クライアントが単一の証明書のみを提示する場合、`Client-Cert-Chain` は省略されます。

CloudFront は、実際の証明書データを追加する前に、クライアントリクエストから受信した `Client-Cert` または `Client-Cert-Chain` ヘッダーをすべて削除します。これにより、ヘッダーのなりすましを防ぐことができます。

**証明書ヘッダーをカスタマイズする**

ビューワーリクエストの CloudFront Functions にある mTLS ヘルパー関数を使用して、オリジンに到達する前に証明書ヘッダーの名前を変更、再フォーマット、または結合します。これは、異なるヘッダー名または証明書エンコード形式を使用する他のサービスから移行する場合に役立ちます。