

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 為 CloudFront 分佈啟用交互 TLS
<a name="enable-mtls-distributions"></a>

## 先決條件和要求
<a name="mtls-prerequisites-requirements"></a>

CloudFront 的交互 TLS 驗證模式要求所有用戶端在 TLS 交握期間呈現有效的憑證，並拒絕沒有有效憑證的連線。在 CloudFront 分佈上啟用交互 TLS 之前，請確定您有：
+ 使用憑證授權單位憑證建立信任存放區
+ 將信任存放區與您的 CloudFront 分佈建立關聯
+ 確保所有分佈快取行為都使用僅限 HTTPS 的檢視器通訊協定政策
+ 確保您的分佈使用 HTTP/2 （預設設定，HTTP/3 不支援檢視器 mTLS)

**注意**  
相互 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 管理主控台 ，並在 開啟 CloudFront 主控台[https://console.aws.amazon.com/cloudfront/v4/home](https://console.aws.amazon.com/cloudfront/v4/home)。

1. 從分佈清單中，選取您要修改的分佈。

1. 確定針對所有快取行為，檢視器通訊協定政策設定為將 **HTTP 重新導向至 HTTPS** 或**僅限 HTTPS**。（您可以選擇**快取行為**索引標籤，以使用 HTTP 通訊協定政策檢視和更新任何快取行為。)

1. 選擇**一般**索引標籤。

1. 在 **Settings** (設定) 區段中，選擇 **Edit** (編輯)。

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 請求並執行憑證驗證。

**注意**  
交互 TLS 不支援 HTTP 和 HTTPS 檢視器通訊協定政策，因為 HTTP 連線無法執行憑證驗證。

## 後續步驟
<a name="enable-mtls-next-steps"></a>

在 CloudFront 分佈上啟用檢視器 TLS 之後，您可以關聯連線函數來實作自訂憑證驗證邏輯。Connection Functions 可讓您使用自訂驗證規則、憑證撤銷檢查和記錄來擴展內建 mTLS 身分驗證功能。如需建立和關聯連線函數的詳細資訊，請參閱 [關聯 CloudFront 連線函數](connection-functions.md)。