

# 为 CloudFront 分配启用源双向 TLS
<a name="origin-enable-mtls-distributions"></a>

通过 AWS Certificate Manager 获取客户端证书并将原始服务器配置为要求双向 TLS 后，您可以在 CloudFront 分配上启用源 mTLS。

## 先决条件和要求
<a name="origin-mtls-prerequisites-requirements"></a>

在 CloudFront 分配上启用源 mTLS 之前，请确保您具有：
+ 存储在美国东部（弗吉尼亚州北部）区域（us-east-1）的 AWS Certificate Manager 中的客户端证书
+ 配置为要求双向 TLS 身份验证和验证客户端证书的原始服务器
+ 原始服务器，提供来自公开信任的证书颁发机构的证书
+ 修改 CloudFront 分配的权限
+ 源 mTLS 仅适用于商务版、高级版方案或按实际使用量付费定价方案。

**注意**  
可以为自定义源（包括在 AWS 外部托管的源）和支持双向 TLS 的 AWS 源（例如应用程序负载均衡器和 API Gateway）配置源 mTLS。

**重要**  
源 mTLS 不支持以下 CloudFront 功能：  
**gRPC 流量：**启用了源 mTLS 的源不支持 gRPC 协议
**WebSocket 连接**：启用了源 mTLS 的源不支持 WebSocket 协议
**VPC 源：**源 mTLS 不能与 VPC 源一起使用
**使用 Lambda@Edge 的源请求和源响应触发器**：源 mTLS 不支持源请求和源响应位置中的 Lambda@Edge 函数
**嵌入式 POP：**嵌入式 POP 不支持源 mTLS

## 启用源 mTLS
<a name="origin-enable-mtls-per-origin"></a>

每源配置支持您为同一分配中的不同源指定不同的客户端证书。当源有不同的身份验证要求时，这种方法可以提供最大的灵活性。

### 对于新分配（控制台）
<a name="origin-enable-mtls-new-distributions"></a>

1. 登录 AWS 管理控制台，并通过以下网址打开 CloudFront 控制台：[https://console.aws.amazon.com/cloudfront/v4/home](https://console.aws.amazon.com/cloudfront/v4/home)。

1. 选择**创建分配**

1. 选择定价方案：选择**商业版**或**高级版**或**按实际使用量付费** [免费方案不提供源 mTLS]

1. 在“源设置”部分，选择源类型为“其它”

1. 在**源设置**部分，选择**自定义源设置**

1. 配置第一个源（域名、协议等）

1. 在源配置中，找到 **mTLS**

1. 将 **mTLS** 切换为开启

1. 对于**客户端证书**，从 AWS Certificate Manager 中选择您的证书

1. （可选）添加具有其自己的源 mTLS 配置的其它源

1. 填写其余分配设置，然后选择**创建分配**

### 对于现有分配（控制台）
<a name="origin-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. 从分配列表中，选择要修改的分配。[注意：请确保您的分配采用**专业版、高级版或按实际使用量付费**定价方案。否则，您必须先升级您的定价方案，然后才能启用源 mTLS]

1. 选择**源**选项卡

1. 选择要配置的源，然后选择**编辑**

1. 在源设置中，找到 **mTLS**

1. 将 **mTLS** 切换为开启

1. 对于**客户端证书**，从 AWS Certificate Manager 中选择您的证书。[注意：只会列出 EKU（扩展密钥用法）属性设置为“TLS 客户端身份验证”的客户端证书]

1. 选择**保存更改**

1. 根据需要对其它源重复此操作

## 使用 AWS CLI
<a name="origin-enable-mtls-cli"></a>

对于每源配置，请在每个源的配置中指定源 mTLS 设置：

```
{
  "Origins": {
    "Quantity": 2,
    "Items": [
      {
        "Id": "origin-1",
        "DomainName": "api.example.com",
        "CustomOriginConfig": {
          "HTTPSPort": 443,
          "OriginProtocolPolicy": "https-only"
        },
        "OriginMtlsConfig": {
          "ClientCertificateArn": "arn:aws:acm:us-east-1:123456789012:certificate/cert-1"
        }
      },
      {
        "Id": "origin-2",
        "DomainName": "backend.example.com",
        "CustomOriginConfig": {
          "HTTPSPort": 443,
          "OriginProtocolPolicy": "https-only"
        },
        "OriginMtlsConfig": {
          "CertificateArn": "arn:aws:acm:us-east-1:123456789012:certificate/cert-2"
        }
      }
    ]
  }
}
```

**注意**  
如果服务器不请求客户端证书，CloudFront 将不会提供该证书，从而支持正常进行连接。

## 后续步骤
<a name="origin-enable-mtls-next-steps"></a>

在 CloudFront 分配上启用源 mTLS 后，可以使用 CloudFront 访问日志监控身份验证事件。