部署具有 DNS 授权的全球 Google 管理的证书


本教程将介绍如何使用由 Google 管理的证书和 DNS 完成证书部署流程 “授权”作为示例。

以下负载平衡器支持使用 DNS 的 Google 管理的证书 授权:

  • 全球外部应用负载均衡器
  • 传统应用负载均衡器
  • 跨区域内部应用负载均衡器
  • 全局外部代理网络负载均衡器

要对比受支持的网域授权类型,请参阅网域 授权

如果您想要将现有证书迁移到证书管理器,请执行以下操作: 按照将证书迁移到 Certificate Manager

目标

本教程介绍如何完成以下任务:

  • 创建由受大众信任的由 Google 管理的证书 具有 DNS 授权的证书授权机构 使用证书管理器登录
  • 使用目标 HTTPS 将证书部署到受支持的负载均衡器 代理。

如需详细了解证书部署过程,请参阅部署 概览

准备工作

  1. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  2. 需要 gcloud CLI 版本 465.0.0 或更高版本才能进行部署 证书。要检查您的 gcloud CLI 版本,请运行 以下命令:

    gcloud --version
    
  3. 如需更新 gcloud CLI,请运行以下命令。

    gcloud components update
    
  4. 请确保您拥有以下角色,以便完成本 教程:

    • Certificate Manager Owner:创建和管理凭据 Certificate Manager 资源。
    • Compute Load Balancer AdminCompute Network Admin:需要 创建和管理 HTTPS 目标代理。
    • DNS Administrator:如果您要将 Cloud DNS 用作您的 DNS 解决方案。

    详情请参阅以下内容:

创建具有 DNS 授权的 Google 管理的证书

完成本部分中的步骤创建 DNS 授权和 引用该 DNS 授权的 Google 管理的证书。

创建 DNS 授权

按照本部分中的说明创建 DNS 授权。如果您要创建 通配符证书的 DNS 授权,例如 *.myorg.example.com 为父网域配置 DNS 授权,例如 myorg.example.com.

gcloud

gcloud certificate-manager dns-authorizations create AUTHORIZATION_NAME \
   --domain="DOMAIN_NAME"
gcloud certificate-manager dns-authorizations describe AUTHORIZATION_NAME

如需使用每个项目的 DNS 授权(预览版),请执行以下操作: 运行以下命令:

gcloud certificate-manager dns-authorizations create AUTHORIZATION_NAME \
   --domain="DOMAIN_NAME" \
   --type="PER_PROJECT_RECORD"
gcloud certificate-manager dns-authorizations describe AUTHORIZATION_NAME

替换以下内容:

  • AUTHORIZATION_NAME:DNS 授权的名称。
  • DOMAIN_NAME:您要注册的网域的名称 创建此 DNS 授权。域名必须是完全限定的域名 域名,例如 myorg.example.com

该命令会返回类似于以下内容的输出。使用 CNAME 记录 从输出 添加到您的 DNS 配置中

createTime: '2022-01-14T13:35:00.258409106Z'
dnsResourceRecord:
data: 0e40fc77-a37d-4eb8-8fe1-eea2e18d12d9.4.authorize.certificatemanager.goog.
name: _acme-challenge.myorg.example.com.
type: CNAME
domain: myorg.example.com
name: projects/myProject/locations/global/dnsAuthorizations/myAuthorization
updateTime: '2022-01-14T13:35:01.571086137Z'

Terraform

要创建 DNS 授权,您可以使用 google_certificate_manager_dns_authorization 资源

resource "google_certificate_manager_dns_authorization" "default" {
  name        = "${local.name}-dnsauth-${random_id.tf_prefix.hex}"
  description = "The default dns auth"
  domain      = local.domain
  labels = {
    "terraform" : true
  }
}

如需了解如何应用或移除 Terraform 配置,请参阅基本 Terraform 命令

将 CNAME 记录添加到您的 DNS 配置

如果您使用 Google Cloud 管理 DNS,请完成以下步骤 部分。否则,请参阅第三方 DNS 的相关文档 解决方案。

在完成本部分中的步骤之前,请确保您已创建 公共 DNS 区域

创建 DNS 授权后,gcloud CLI 命令会返回 相应的 CNAME 记录您必须将此 CNAME 记录添加到目标网域的 DNS 区域中的 DNS 配置,如下所示:

gcloud

  1. 启动 DNS 记录事务:
  gcloud dns record-sets transaction start --zone="DNS_ZONE_NAME"

DNS_ZONE_NAME 替换为目标 DNS 的名称 可用区。

  1. 将 CNAME 记录添加到目标 DNS 区域:
  gcloud dns record-sets transaction add CNAME_RECORD \
      --name="_acme-challenge.DOMAIN_NAME." \
      --ttl="30" \
      --type="CNAME" \
      --zone="DNS_ZONE_NAME"

替换以下内容:

  • CNAME_RECORD:CNAME 记录的完整数据值 (由创建相应 DNS 的 Google Cloud CLI 命令返回) 授权。
  • DOMAIN_NAME:目标网域的名称。通过 域名必须是完全限定域名,例如 myorg.example.com.您还必须添加 目标域名。
  • DNS_ZONE_NAME:目标 DNS 区域的名称。

请参阅以下示例:

  gcloud dns record-sets transaction add 0e40fc77-a37d-4eb8-8fe1-eea2e18d12d9.4.authorize.certificatemanager.goog. \
      --name="_acme-challenge.myorg.example.com." \
      --ttl="30" \
      --type="CNAME" \
      --zone="myorg-example-com"
  
  1. 运行 DNS 记录事务以保存更改:
  gcloud dns record-sets transaction execute --zone="DNS_ZONE_NAME"
  

DNS_ZONE_NAME 替换为目标 DNS 的名称 可用区。

Terraform

要将 CNAME 记录添加到 DNS 配置,您可以使用 google_dns_record_set 资源

resource "google_dns_record_set" "cname" {
  name         = google_certificate_manager_dns_authorization.default.dns_resource_record[0].name
  managed_zone = google_dns_managed_zone.default.name
  type         = google_certificate_manager_dns_authorization.default.dns_resource_record[0].type
  ttl          = 300
  rrdatas      = [google_certificate_manager_dns_authorization.default.dns_resource_record[0].data]
}

创建引用 DNS 授权的 Google 管理的证书

要创建引用 DNS 授权的 Google 管理的证书,请执行以下操作: 创建过滤器,请执行以下操作:

控制台

  1. 在 Google Cloud 控制台中,前往 Certificate Manager 页面。

    前往“证书管理器”

  2. 在显示的页面上,选择证书标签页。

  3. 点击添加证书

  4. 输入证书的名称

    该名称在项目中必须是唯一的。

  5. 可选:输入证书的说明。说明 可帮助您稍后识别特定证书。

  6. 对于位置,选择全局

  7. 范围部分,选择以下任一选项:

    1. 默认:为全球外部应用负载平衡器传统版应用负载平衡器全球外部代理网络负载平衡器选择默认值
    2. 所有区域:为跨区域内部应用负载平衡器选择所有区域
  8. 对于证书类型,选择创建 Google 管理的证书

  9. 对于证书授权机构类型,选择公开

  10. 指定证书的域名。请输入以英文逗号分隔 目标网域的列表。此外,每个域名都必须是 域名,例如 myorg.example.com

  11. 对于授权类型,选择 DNS 授权。如果 域名具有关联的 DNS 授权,系统会自动获取该授权。如果域名没有关联的 DNS 授权,请执行以下操作:

    1. 点击创建缺失的 DNS 授权以显示“创建 DNS” 授权对话框。
    2. DNS 授权名称字段中,指定 DNS 授权名称。
    3. 点击创建 DNS 授权。 验证 DNS 名称是否与域名相关联。
  12. 指定要与证书关联的标签。您可以添加 多个标签(如果需要)。要添加标签,请点击 添加标签按钮,然后为标签指定 keyvalue

  13. 点击创建。验证新证书是否显示在证书列表中。

gcloud

对于全局外部应用负载平衡器、传统应用负载平衡器或 全局外部代理网络负载平衡器

运行以下命令:

 gcloud certificate-manager certificates create CERTIFICATE_NAME 
--domains=DOMAIN_NAME
--dns-authorizations=AUTHORIZATION_NAME

替换以下内容:

  • CERTIFICATE_NAME:证书的唯一名称。
  • DOMAIN_NAME:证书的目标网域。 域名必须是完全限定域名,例如 myorg.example.com.
  • AUTHORIZATION_NAME:DNS 的名称 您为此证书创建的授权。

如需创建带有通配符域名的 Google 管理的证书,请使用 。通配符域名 证书涵盖指定网域的所有一级子网域。

gcloud certificate-manager certificates create CERTIFICATE_NAME \
    --domains="*.DOMAIN_NAME,DOMAIN_NAME" \
    --dns-authorizations=AUTHORIZATION_NAME

替换以下内容:

  • CERTIFICATE_NAME:证书的唯一名称。
  • DOMAIN_NAME:证书的目标网域。通过 星号圆点前缀 (*.) 表示通配符证书。网域 必须是完全限定域名,例如 myorg.example.com
  • AUTHORIZATION_NAME:DNS 授权的名称 您为此证书创建的凭据。

对于跨区域内部应用负载平衡器

运行以下命令:

  gcloud certificate-manager certificates create CERTIFICATE_NAME 
--domains=DOMAIN_NAME
--dns-authorizations=AUTHORIZATION_NAME
--scope=all-regions

替换以下内容:

  • CERTIFICATE_NAME:证书的唯一名称。
  • DOMAIN_NAME:证书的目标网域。 域名必须是完全限定域名,例如 myorg.example.com.
  • AUTHORIZATION_NAME:DNS 的名称 您为此证书创建的授权。

如需创建带有通配符域名的 Google 管理的证书,请使用 。通配符域名 证书涵盖指定网域的所有一级子网域。

  gcloud certificate-manager certificates create CERTIFICATE_NAME \
      --domains="*.DOMAIN_NAME,DOMAIN_NAME" \
      --dns-authorizations=AUTHORIZATION_NAME \
      --scope=all-regions

替换以下内容:

  • CERTIFICATE_NAME:证书的唯一名称。
  • DOMAIN_NAME:证书的目标网域。通过 星号圆点前缀 (*.) 表示通配符证书。通过 域名必须是完全限定域名,例如 myorg.example.com.
  • AUTHORIZATION_NAME:DNS 授权的名称 您为此证书创建的凭据。

Terraform

使用 google_certificate_manager_certificate 资源

resource "google_certificate_manager_certificate" "root_cert" {
  name        = "${local.name}-rootcert-${random_id.tf_prefix.hex}"
  description = "The wildcard cert"
  managed {
    domains = [local.domain, "*.${local.domain}"]
    dns_authorizations = [
      google_certificate_manager_dns_authorization.default.id
    ]
  }
  labels = {
    "terraform" : true
  }
}

验证证书是否有效

在将证书部署到负载均衡器之前,请使用以下命令验证证书本身是否处于活跃状态。系统最多可能需要数小时 证书状态更改为 ACTIVE

gcloud certificate-manager certificates describe CERTIFICATE_NAME

CERTIFICATE_NAME 替换为目标的名称 Google 管理的证书。

该命令会返回类似于以下内容的输出:

expireTime: '2022-05-07T05:03:49Z'
managed:
  authorizationAttemptInfo:
  -   domain: myorg.example.com
    state: AUTHORIZED
  dnsAuthorizations:
  -   projects/my-project/locations/global/dnsAuthorizations/myAuth
  domains:
  -   myorg.example.com
  state: ACTIVE
name: projects/myProject/locations/global/certificates/myCert
pemCertificate: |
  -----BEGIN CERTIFICATE-----
  [...]
  -----END CERTIFICATE-----
sanDnsnames:
-   myorg.example.com
updateTime: '2021-10-20T12:19:55.083385630Z'

将证书部署到负载均衡器

本部分详细介绍了部署由 Google 管理的 证书上传到负载均衡器。

在继续执行本部分中的任务之前,请确保您已完成 “管理”部分中列出的任务 创建具有 DNS 授权的 Google 管理的证书 部分。

您可以根据负载均衡器类型,按如下方式部署证书:

  • 对于以下负载平衡器,请使用 证书映射: <ph type="x-smartling-placeholder">
      </ph>
    • 全球外部应用负载均衡器
    • 全局外部代理网络负载均衡器
    • 传统应用负载均衡器
  • 对于跨区域内部应用负载平衡器,通过以下方式部署证书: 将其直接附加到目标代理

使用证书映射部署证书

本部分介绍了使用证书部署证书的步骤 地图。

创建证书映射

创建证书映射 引用证书映射条目 与您的证书关联的资源:

gcloud

gcloud certificate-manager maps create CERTIFICATE_MAP_NAME

CERTIFICATE_MAP_NAME 替换为目标的名称 证书映射。

Terraform

如需创建证书映射,您可以使用 google_certificate_manager_certificate_map 资源

resource "google_certificate_manager_certificate_map" "certificate_map" {
  name        = "${local.name}-certmap-${random_id.tf_prefix.hex}"
  description = "${local.domain} certificate map"
  labels = {
    "terraform" : true
  }
}

创建证书映射条目

创建证书映射条目 并将其与您的 证书为 以及您的证书映射

gcloud

gcloud certificate-manager maps entries create CERTIFICATE_MAP_ENTRY_NAME \
   --map="CERTIFICATE_MAP_NAME" \
   --certificates="CERTIFICATE_NAME" \
   --hostname="HOSTNAME"

替换以下内容:

  • CERTIFICATE_MAP_ENTRY_NAME: 证书映射条目
  • CERTIFICATE_MAP_NAME:映射到的证书的名称 该证书映射条目会附加
  • CERTIFICATE_NAME:所需证书的名称 关联此证书映射条目
  • HOSTNAME:您要关联的主机名 包含此证书映射条目

Terraform

如需创建证书映射条目,您可以使用 google_certificate_manager_certificate_map_entry 资源

resource "google_certificate_manager_certificate_map_entry" "first_entry" {
  name        = "${local.name}-first-entry-${random_id.tf_prefix.hex}"
  description = "example certificate map entry"
  map         = google_certificate_manager_certificate_map.certificate_map.name
  labels = {
    "terraform" : true
  }
  certificates = [google_certificate_manager_certificate.root_cert.id]
  hostname     = local.domain
}

验证证书映射条目是否处于活跃状态

在将相应的证书映射关联到目标代理之前,请使用以下命令验证证书映射条目是否处于活跃状态:

gcloud certificate-manager maps entries describe CERTIFICATE_MAP_ENTRY_NAME \
    --map="CERTIFICATE_MAP_NAME"

替换以下内容:

  • CERTIFICATE_MAP_ENTRY_NAME:目标的名称 证书映射条目
  • CERTIFICATE_MAP_NAME:映射到的证书的名称 该证书映射条目会附加

该命令会返回类似于以下内容的输出:

certificates:
createTime: '2021-09-06T10:01:56.229472109Z'
hostname: example.com
name: projects/my-project/locations/global/certificateMaps/myCertMap/certificateMapEntries/myCertMapEntry
state: ACTIVE
updateTime: '2021-09-06T10:01:58.277031787Z'

将证书映射附加到目标代理

将配置的证书映射附加到目标代理:

gcloud

  1. 在 Google Cloud 控制台中,转到目标代理页面。

    前往“目标”页面 指标

  2. 请记下目标代理的名称。

  3. 将证书映射附加到目标代理:

  gcloud compute target-https-proxies update PROXY_NAME \
      --certificate-map="CERTIFICATE_MAP_NAME" \
      --global
  

替换以下内容:

  • PROXY_NAME:目标代理的名称。
  • CERTIFICATE_MAP_NAME:证书的名称 引用您的证书映射条目和 证书。

Terraform

如需将证书映射附加到目标代理,您可以使用 google_compute_target_https_proxy 资源

如果有任何现有的 TLS (SSL) 证书直接附加到 则代理会优先考虑 证书映射,而非直接附加的 TLS (SSL) 证书。

将证书直接附加到目标代理

如需将证书直接附加到代理,请运行以下命令:

gcloud compute target-https-proxies update PROXY_NAME \
    --url-map=URL_MAP \
    --global \
    --certificate-manager-certificates=CERTIFICATE_NAME

替换以下内容:

  • PROXY_NAME:代理的唯一名称。
  • URL_MAP:网址映射的名称。您已创建网址映射 创建负载均衡器时创建的凭据。
  • CERTIFICATE_NAME:证书的名称。

清理

如需还原您在本教程中所做的更改,请完成以下操作 步骤:

  1. 从代理中分离证书映射。

    在分离证书映射之前,请注意以下事项:

    • 如果有任何 TLS (SSL) 证书直接附加到代理, 分离证书映射会导致代理继续使用这些证书 直接附加的 TLS (SSL) 证书。
    • 如果没有直接附加到代理的 TLS (SSL) 证书, 证书映射无法与代理分离。您必须先 必须先将至少一个 TLS (SSL) 证书直接附加到代理, 您可以分离证书映射

    如需分离证书映射,请运行以下命令:

    gcloud compute target-https-proxies update PROXY_NAME \
       --clear-certificate-map
    

    PROXY_NAME 替换为目标代理的名称。

  2. 从证书映射中删除证书映射条目:

    gcloud certificate-manager maps entries delete CERTIFICATE_MAP_ENTRY_NAME \
       --map="CERTIFICATE_MAP_NAME"
    

    替换以下内容:

    • CERTIFICATE_MAP_ENTRY_NAME:目标的名称 证书映射条目。
    • CERTIFICATE_MAP_NAME:目标的名称 证书映射。
  3. 删除证书映射:

    gcloud certificate-manager maps delete CERTIFICATE_MAP_NAME
    

    CERTIFICATE_MAP_NAME 替换为目标的名称 证书映射。

  4. 删除 Google 管理的证书:

    gcloud certificate-manager certificates delete CERTIFICATE_NAME
    

    CERTIFICATE_NAME 替换为目标的名称 证书。

  5. 删除 DNS 授权:

    gcloud certificate-manager dns-authorizations delete AUTHORIZATION_NAME
    

    AUTHORIZATION_NAME 替换为目标的名称 DNS 授权。

后续步骤