

# CloudFront ディストリビューションの相互 TLS を有効にする
<a name="enable-mtls-distributions"></a>

## 前提条件と要件
<a name="mtls-prerequisites-requirements"></a>

CloudFront の相互 TLS 検証モードでは、すべてのクライアントが TLS ハンドシェイク中に有効な証明書を提示する必要があり、有効な証明書がない接続を拒否します。CloudFront ディストリビューションで相互 TLS を有効にする前に、以下を確認してください。
+ 認証局証明書を含むトラストストアを作成した
+ トラストストアを CloudFront ディストリビューションに関連付けた
+ すべての分散キャッシュ動作が HTTPS のみのビューワープロトコルポリシーを使用していることを確認した
+ ディストリビューションが HTTP/2 を使用していることを確認した (デフォルト設定、ビューワー mTLS は HTTP/3 ではサポートされていません)

**注記**  
相互 TLS 認証には、ビューワーと CloudFront 間で HTTPS 接続が必要です。HTTP 接続をサポートするキャッシュ動作を持つディストリビューションで mTLS を有効にすることはできません。

## 相互 TLS を有効にする (コンソール)
<a name="enable-mtls-console"></a>

### 新しいディストリビューションの場合
<a name="enable-mtls-new-distributions"></a>

CloudFront コンソールで新しいディストリビューションを作成するプロセスでビューワー mTLS を設定することはできません。まず、任意の方法 (コンソール、CLI、API) でディストリビューションを作成し、ディストリビューション設定を編集して、以下の既存のディストリビューションの手順に従ってビューワー mTLS を有効にします。

### 既存のディストリビューションの場合
<a name="enable-mtls-existing-distributions"></a>

1. AWS マネジメントコンソールにサインインし、[https://console.aws.amazon.com/cloudfront/v4/home](https://console.aws.amazon.com/cloudfront/v4/home) で CloudFront コンソールを開きます。

1. ディストリビューションリストから、変更するディストリビューションを選択します。

1. すべてのキャッシュ動作についてビューワープロトコルポリシーが **[HTTP を HTTPS にリダイレクト]** または **[HTTPS のみ]** に設定されている必要があります。(**[キャッシュ動作]** タブを選択すると、HTTP プロトコルポリシーでキャッシュ動作を表示および更新できます。)

1. **[全般]** タブを選択します。

1. **[設定]** セクションで、**[編集]** を選択します。

1. **[接続]** セクションで、**ビューワー相互認証 (mTLS)** を検索します。

1. **[相互認証を有効にする]** をオンに切り替えます。

1. **[クライアント証明書の検証モード]** で、**[必須]** (すべてのクライアントが証明書を提示する必要がある) または **[オプション]** (クライアントはオプションで証明書を提示できる) を選択します。

1. **[トラストストア]** で、以前に作成したトラストストアを選択します。

1. (オプション) CloudFront が TLS ハンドシェイク中に CA 名をクライアントに送信する場合は、**[トラストストア CA 名をアドバタイズ]** を切り替えます。

1. (オプション) 有効期限が切れた証明書を使用した接続を許可する場合は、**証明書の有効期限を無視**します。

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

## 相互 TLS を有効にする (AWS CLI)
<a name="enable-mtls-cli"></a>

### 新しいディストリビューションの場合
<a name="enable-mtls-cli-new"></a>

次の例は、mTLS 設定を含むディストリビューション設定ファイル (distribution-config.json) を作成する方法を示します。

```
{
  "CallerReference": "cli-example-1",
  "Origins": {
    "Quantity": 1,
    "Items": [
      {
        "Id": "my-origin",
        "DomainName": "example.com",
        "CustomOriginConfig": {
          "HTTPPort": 80,
          "HTTPSPort": 443,
          "OriginProtocolPolicy": "https-only"
        }
      }
    ]
  },
  "DefaultCacheBehavior": {
    "TargetOriginId": "my-origin",
    "ViewerProtocolPolicy": "https-only",
    "MinTTL": 0,
    "ForwardedValues": {
      "QueryString": false,
      "Cookies": {
        "Forward": "none"
      }
    }
  },
  "ViewerCertificate": {
    "CloudFrontDefaultCertificate": true
  },
  "ViewerMtlsConfig": {
    "Mode": "required", 
    "TrustStoreConfig": {
        "TrustStoreId": {TRUST_STORE_ID},
        "AdvertiseTrustStoreCaNames": true,
        "IgnoreCertificateExpiry": true
    }
  },
  "Enabled": true
}
```

次のコマンド例を使用し、mTLS を有効にしてディストリビューションを作成します。

```
aws cloudfront create-distribution --distribution-config file://distribution-config.json
```

### 既存のディストリビューションの場合
<a name="enable-mtls-cli-existing"></a>

次のコマンド例を使用し、現在のディストリビューション設定を取得します。

```
aws cloudfront get-distribution-config --id E1A2B3C4D5E6F7 --output json > dist-config.json
```

ファイルを編集して mTLS 設定を追加します。次の例のセクションをディストリビューション設定に追加します。

```
"ViewerMtlsConfig": {
    "Mode": "required", 
    "TrustStoreConfig": {
        "TrustStoreId": {TRUST_STORE_ID},
        "AdvertiseTrustStoreCaNames": true,
        "IgnoreCertificateExpiry": true
    }
}
```

ファイルから ETag フィールドを削除しますが、その値は個別に保存します。

次のコマンド例を使用し、新しい設定でディストリビューションを更新します。

```
aws cloudfront update-distribution \
    --id E1A2B3C4D5E6F7 \
    --if-match YOUR-ETAG-VALUE \
    --distribution-config file://dist-config.json
```

## ビューワープロトコルポリシー
<a name="viewer-protocol-policies"></a>

相互 TLS を使用する場合、すべてのディストリビューションキャッシュ動作を HTTPS のみのビューワープロトコルポリシーで設定する必要があります。
+ **HTTP を HTTPS にリダイレクト** - 証明書の検証を実行する前に HTTP リクエストを HTTPS にリダイレクトします。
+ **HTTPS のみ** - HTTPS リクエストのみを受け入れて証明書の検証を実行します。

**注記**  
HTTP 接続では証明書の検証を実行できないため、HTTP および HTTPS ビューワープロトコルポリシーは相互 TLS ではサポートされません。

## 次のステップ
<a name="enable-mtls-next-steps"></a>

CloudFront ディストリビューションでビューワー TLS を有効にしたら、Connection Functions を関連付けてカスタム証明書検証ロジックを実装できます。Connection Functions により、カスタム検証ルール、証明書失効チェック、ログ記録を使用して、組み込み mTLS 認証機能を拡張できます。Connection Functions の作成と関連付けの詳細については、「[CloudFront Connection Function を関連付ける](connection-functions.md)」を参照してください。