

# 为 CloudFront 分配租户申请证书
<a name="managed-cloudfront-certificates"></a>

创建分配租户时，该租户从多租户分配继承共享 AWS Certificate Manager（ACM）证书。此共享证书为与多租户分配关联的所有租户提供 HTTPS。

在创建或更新 CloudFront 分配租户以添加域时，可以从 ACM 添加托管式 CloudFront 证书。然后，CloudFront 将代表您从 ACM 获得经 HTTP 验证的证书。可以将此租户级别 ACM 证书用于自定义域配置。CloudFront 简化了续订工作流程，有助于将证书保持为最新状态并确保内容交付不间断。

**注意**  
您拥有证书，但它*只能*与 CloudFront 资源结合使用，并且*无法*导出私有密钥。

可以在创建或更新分配租户时申请证书。

**Topics**
+ [添加域和证书（分配租户）](#vanity-domain-tls-tenant)
+ [完成域设置](#complete-domain-ownership)
+ [将域指向 CloudFront](#point-domains-to-cloudfront)
+ [域注意事项（分配租户）](#tenant-domain-considerations)
+ [通配符域（分配租户）](#tenant-wildcard-domains)

## 添加域和证书（分配租户）
<a name="vanity-domain-tls-tenant"></a>

以下过程演示了如何为分配租户添加域和更新证书。

**添加域和证书（分配租户）**

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

1. 在 **SaaS** 下，选择**分配租户**。

1. 搜索分配租户。使用搜索栏中的下拉菜单，按域、名称、分配 ID、证书 ID、连接组 ID 或 Web ACL ID 进行筛选。

1. 选择分配租户名称。

1. 对于**域**，选择**管理域**。

1. 对于**证书**，选择是否要为分配租户使用**自定义 TLS 证书**。该证书会验证您是否获得授权可使用该域名。该证书必须存在于美国东部（弗吉尼亚州北部）区域中。

1. 对于**域**，选择**添加域**并输入域名。根据您的域，以下消息将出现在您输入的域名下方。
   + 证书涵盖此域。
   + 证书涵盖此域，等待验证。
   + 证书不涵盖此域。（这意味着您必须验证域所有权。）

1. 选择**更新分配租户**。

   在租户详细信息页面的**域**之下，您可以看到以下字段：
   + **域所有权**：域所有权的状态。在 CloudFront 可以提供内容之前，必须使用 TLS 证书验证来验证域所有权。
   + **DNS 状态**：域的 DNS 记录必须指向 CloudFront，才能正确地路由流量。

1. 如果域所有权未得以验证，请在租户详细信息页面的**域**之下，选择**完成域设置**，然后完成以下过程来将 DNS 记录指向您的 CloudFront 域名。

## 完成域设置
<a name="complete-domain-ownership"></a>

按照这些过程来验证您拥有分配租户的域。根据您的域，选择以下过程之一。

**注意**  
如果域已使用 Amazon Route 53 别名记录指向 CloudFront，则必须在域名前面添加带有 `_cf-challenge.` 的 DNS TXT 记录。此 TXT 记录可验证域名是否已关联到 CloudFront。对每个域重复此步骤。以下内容显示如何更新 TXT 记录：  
记录名称：`_cf-challenge.DomainName`
记录类型：`TXT`
记录值：`CloudFrontRoutingEndpoint`
例如，TXT 记录类似于：`_cf-challenge.example.com TXT d111111abcdef8.cloudfront.net`  
您可以在控制台中的分配租户详细信息页面上找到 CloudFront 路由端点，也可以使用《Amazon CloudFront API Reference》**中的 [ListConnectionGroups](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_ListConnectionGroups.html) API 操作来找到该端点。

**提示**  
如果您是 SaaS 提供商，并且想要在不要求客户（租户）直接向其 DNS 中添加 TXT 记录的情况下支持证书颁发，请执行以下操作：  
如果您拥有域 `example-saas-provider.com`，请将子域分配给您的租户，例如 `customer-123.example-saas-provider.com`
在 DNS 中，将 `_cf-challenge.customer-123.example-saas-provider.com TXT d111111abcdef8.cloudfront.net` TXT 记录添加到 DNS 配置中。
接下来，您的客户（租户）可以更新其自己的 DNS 记录，以便将其域名映射到您提供的子域。  
`www.customer-domain.com CNAME customer-123.example-saas-provider.com`

------
#### [ I have existing traffic ]

如果域无法容忍停机时间，请选择此选项。您必须有权访问源/Web 服务器。使用以下过程验证域所有权。

**当有现有流量时完成域设置**

1. 对于**指定 Web 流量**，选择**我有现有流量**，然后选择**下一步**。

1. 对于**验证域所有权**，请选择以下选项之一：
   + **使用现有证书**：搜索现有 ACM 证书，或输入涵盖所列域的证书 ARN。
   + **手动上传文件**：选择您是否拥有将文件上传到 Web 服务器的直接访问权限。

     对于每个域，创建一个纯文本文件（其中包含来自**令牌位置**的验证令牌），然后将其上传到位于现有服务器上指定**文件路径**处的源。此文件的路径可能如以下示例所示：`/.well-known/pki-validation/acm_9c2a7b2ec0524d09fa6013efb73ad123.txt`。完成该步骤后，ACM 会验证令牌，然后为该域颁发 TLS 证书。
   + **HTTP 重定向**：如果您不具有将文件上传到 Web 服务器的直接访问权限，或者您正在使用 CDN 或代理服务，请选择此选项。

     对于每个域，在现有服务器上创建 301 重定向。复制**重定向自**下的已知路径，并指向**重定向至**下的指定证书端点。重定向可能类似于以下示例：

     ```
     If the URL matches: example.com/.well-known/pki-validation/leabe938a4fe077b31e1ff62b781c123.txt
     Then the settings are:Forwarding URL
     Then 301 Permanent Redirect:To validation.us-east-1.acm-validations.aws/123456789012/.well-known/pki-validation/leabe938a4fe077b31e1ff62b781c123.txt
     ```
**注意**  
可以选择**检查证书状态**来验证 ACM 何时为该域颁发证书。

1. 选择**下一步**。

1. 完成[将域指向 CloudFront](#point-domains-to-cloudfront) 的步骤。

------
#### [ I don't have traffic ]

如果您要添加新域，请选择此选项。CloudFront 将为您管理证书验证。

**在没有流量的情况下完成域设置**

1. 在**指定 Web 流量**中，选择**我还没有流量**。

1. 对于每个域名，请完成[将域指向 CloudFront](#point-domains-to-cloudfront) 的步骤。

1. 在更新每个域名的 DNS 记录后，选择**下一步**。

1. 等待颁发证书。
**注意**  
可以选择**检查证书状态**来验证 ACM 何时为该域颁发证书。

1. 选择**提交**。

------

## 将域指向 CloudFront
<a name="point-domains-to-cloudfront"></a>

更新您的 DNS 记录，以便将来自每个域的流量路由到 CloudFront 路由端点。您可以有多个域名，但它们必须全部解析到此端点。

**将域指向 CloudFront**

1. 复制 CloudFront 路由端点值，例如 d111111abcdef8.cloudfront.net。

1. 更新您的 DNS 记录，以便将来自每个域的流量路由到 CloudFront 路由端点。

   1. 登录到域注册商或 DNS 提供商管理控制台。

   1. 导航到域的 DNS 管理部分。
      + **对于子域**：创建 CNAME 记录。例如：
        + **名称**：子域（例如 `www` 或 `app`）
        + **值/目标**：CloudFront 路由端点
        + **记录类型**：CNAME
        + **TTL**：3600（或任何适合用例的值）
      + **对于顶级域/根域**：这需要唯一的 DNS 配置，因为不能在根域或顶级域级别使用标准 CNAME 记录。由于大多数 DNS 提供商不支持 ALIAS 记录，因此建议在 Route 53 中创建 ALIAS 记录。例如：
        + **名称**：顶级域（例如 `example.com`）
        + **记录类型**：A
        + **别名**：是
        + **别名目标**：CloudFront 路由端点
        + **路由策略**：简单（或任何适合用例的策略）

   1. 验证 DNS 更改是否已传播。（这通常在 TTL 过期时发生。有时可能需要 24-48 小时。） 使用 `dig` 或 `nslookup` 之类的工具。

      ```
      dig www.example.com
      # Should eventually return a CNAME pointing to your CloudFront routing endpoint
      ```

1. 返回 CloudFront 控制台并选择**提交**。当域处于活动状态时，CloudFront 会更新域状态，以表明域已准备好提供流量。

有关更多信息，请参阅 DNS 提供商的文档：
+ [Cloudflare](https://developers.cloudflare.com/dns/manage-dns-records/how-to/create-dns-records/)
+ [ClouDNS](https://www.cloudns.net/wiki/article/9/)
+ [DNSimple](https://support.dnsimple.com/categories/dns/)
+ [Gandi.net](https://www.gandi.net/)
+ [GoDaddy](https://www.godaddy.com/help/manage-dns-records-680)
+ [Google Cloud DNS](https://cloud.google.com/dns/docs/records)
+ [Namecheap](https://www.namecheap.com/support/knowledgebase/article.aspx/767/10/how-to-change-dns-for-a-domain/)

## 域注意事项（分配租户）
<a name="tenant-domain-considerations"></a>

当域处于活动状态时，域控制已建立，CloudFront 将响应查看器对该域的所有请求。一旦激活，域就无法停用或更改为非活动状态。当域已在使用中时，该域无法与其它 CloudFront 资源关联。要将该域与其它分配相关联，请使用 [UpdateDomainAssociation](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_UpdateDomainAssociation.html) 请求将该域从一个 CloudFront 资源移到另一个 CloudFront 资源。

当域处于非活动状态时，CloudFront 将不会响应查看器对该域的请求。当域处于非活动状态时，请注意以下情况：
+ 如果您有待处理的证书请求，CloudFront 将响应对已知路径的请求。当请求处于待处理状态时，域无法与任何其它 CloudFront 资源关联。
+ 如果您没有待处理的证书请求，CloudFront 将不会响应对该域的请求。可以将该域与其它 CloudFront 资源相关联。
+ 对于每个分配租户，您只能有*一个待处理的证书请求*。您必须先取消现有待处理的请求，然后才能为其它域请求另一个证书。取消现有证书请求不会删除关联的 ACM 证书。可以使用 ACM API 将其删除。
+ 如果您将新证书应用于分配租户，这将取消与先前证书的关联。可以重用该证书来涵盖其它分配租户的域。

与续订经 DNS 验证的证书一样，当证书续订成功时，您会收到通知。然而，您不需要做任何其它事情。CloudFront 将自动管理域的证书续订。

**注意**  
您无需调用 ACM API 操作，即可创建或更新证书资源。您可以通过使用 [CreateDistributionTenant](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_CreateDistributionTenant.html) 和 [UpdateDistributionTenant](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_UpdateDistributionTenant.html) API 操作来管理证书，以便为托管式证书请求指定详细信息。

## 通配符域（分配租户）
<a name="tenant-wildcard-domains"></a>

在以下情况下，分配租户支持通配符域：
+ 当通配符包含在从父多租户分配继承的共享证书中时
+ 当您为分配租户使用有效的现有自定义 TLS 证书时