管理 DNS 授权

借助 DNS 授权,您可以证明自己对 Google 管理的 证书的网域的所有权。创建 Google 管理的证书时,您可以指定一个或多个 DNS 授权,以用于预配和续订。

本页面介绍了如何创建和管理 DNS 授权,以便与 Google 管理的证书搭配使用。

如需了解详情,请参阅 网域授权

创建 DNS 授权

DNS 授权仅涵盖单个域名。您必须为要与目标证书搭配使用的每个域名创建单独的 DNS 授权。

如果您要为通配符证书(例如 *.myorg.example.com)创建 DNS 授权,请为父网域(例如 myorg.example.com)配置 DNS 授权。

如需跨多个项目独立管理证书,您可以使用 PER_PROJECT_RECORD DNS 授权。 Certificate Manager 可以在每个项目中独立处理证书的颁发和管理 Google Cloud。您在一个项目中使用的 DNS 授权和证书是自成一体的,不会与其他项目中的授权和证书进行交互。

控制台

您可以在创建证书时创建 DNS 授权或附加现有 DNS 授权。如需了解详情,请参阅 创建引用 DNS 授权的 Google 管理的证书

gcloud

您可以根据自己的需求创建以下两种类型的 DNS 授权:FIXED_RECORDPER_PROJECT_RECORD。如需了解详情,请参阅 DNS 授权

FIXED_RECORD DNS 授权

如需创建 FIXED_RECORD DNS 授权,请使用以下 gcloud certificate-manager dns-authorizations create 命令

gcloud certificate-manager dns-authorizations create AUTHORIZATION_NAME \
    --domain="DOMAIN_NAME" \
    --type=[FIXED_RECORD] \
    [--location="LOCATION"]

替换以下内容:

  • AUTHORIZATION_NAME:DNS 授权的名称。
  • DOMAIN_NAME:您要为其创建此 DNS 授权的目标网域的名称。域名必须是完全限定域名,例如 myorg.example.com
  • LOCATION:您在其中创建 DNS 授权的目标位置。 Google Cloud

创建 FIXED_RECORD DNS 授权后,请使用 gcloud certificate-manager dns-authorizations describe 命令对其进行验证:

gcloud certificate-manager dns-authorizations describe AUTHORIZATION_NAME

输出类似于以下内容。在输出中,找到 dnsResourceRecord 行,并获取要添加到 DNS 配置的 CNAME 记录(datanametype)。

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'

PER_PROJECT_RECORD DNS 授权

如需创建 PER_PROJECT_RECORD DNS 授权,请使用以下 gcloud certificate-manager dns-authorizations create 命令

gcloud certificate-manager dns-authorizations create AUTHORIZATION_NAME \
    --domain="DOMAIN_NAME" \
    --type=PER_PROJECT_RECORD \
    [--location="LOCATION"]

替换以下内容:

  • AUTHORIZATION_NAME:DNS 授权的名称。
  • DOMAIN_NAME:您要为其创建此 DNS 授权的目标网域的名称。域名必须是完全限定域名,例如 myorg.example.com
  • LOCATION:您在其中创建 DNS 授权的目标位置。 Google Cloud

创建 PER_PROJECT_RECORD DNS 授权后,请使用 gcloud certificate-manager dns-authorizations describe 命令对其进行验证:

gcloud certificate-manager dns-authorizations describe AUTHORIZATION_NAME

输出类似于以下内容。在输出中,找到 dnsResourceRecord 部分。找到 CNAME 记录,并将该记录的 详细信息(datanametype)添加到 DNS 配置

createTime: '2022-01-14T13:35:00.258409106Z'
dnsResourceRecord:
  data: 0e40fc77-a37d-4eb8-8fe1-eea2e18d12d9.4.authorize.certificatemanager.goog.
  name: _acme-challenge_ujmmovf2vn55tgye.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 命令

API

如需创建 DNS 授权,请向 dnsAuthorizations.create 方法发出 POST 请求:

POST /v1/projects/PROJECT_ID/locations/LOCATION/dnsAuthorizations?dns_authorization_id=AUTHORIZATION_NAME
{
  "domain": "DOMAIN_NAME",
  "type": "PER_PROJECT_RECORD" //optional
}

替换以下内容:

  • PROJECT_ID:您的 Google Cloud 项目的 ID。
  • LOCATION:您在其中创建 DNS 授权的目标 Google Cloud 位置。对于全球位置,请使用 global
  • AUTHORIZATION_NAME:DNS 授权的名称。
  • DOMAIN_NAME:您要为其创建此 DNS 授权的目标网域的名称。 域名必须是完全限定域名,例如 myorg.example.com

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

如果您使用第三方 DNS 解决方案来管理 DNS,请参阅其文档,将 CNAME 记录添加到 DNS 配置。如果您使用 Google Cloud 来管理 DNS,请完成本部分中的步骤。

控制台

要创建记录集,请按以下步骤操作:

  1. 在 Google Cloud 控制台中,前往 DNS 区域 页面。

    转到 Cloud DNS 可用区

  2. 点击要在其中添加记录的 DNS 区域的名称。

  3. 区域详情 页面上,点击添加标准

  4. 创建记录集 页面的 DNS 名称 字段中,输入 DNS 区域的子网域。

    输入子网域名称时,请确保子网域名称( 包括灰显文本 )与 DNS 名称 字段中显示的 dnsResourceRecord.name 字段的完整值一致,该值显示在 output of the gcloud certificate-manager dns-authorizations describe command 中。

    请参见以下示例:

    • 如果 dnsResourceRecord.name 字段值为 _acme-challenge.myorg.example.com.,并且 DNS 名称字段中的灰显文本为 .example.com.,则输入 _acme-challenge.myorg

    • 如果 dnsResourceRecord.name 字段值为 _acme-challenge.myorg.example.com.,并且 DNS 名称 字段中的灰显文本为 .myorg.example.com.,则输入 _acme-challenge

    • 如果 dnsResourceRecord.name 字段的值为 _acme-challenge_ujmmovf2vn55tgye.myorg.example.com.,并且 DNS 名称 字段中的 灰显文本为 .myorg.example.com.,则输入 _acme-challenge_ujmmovf2vn55tgye

  5. 资源记录类型 字段中,选择 CNAME

  6. TTL 字段中,输入一个正数值表示资源记录的生存时间,即该资源记录可缓存的时间期限。

  7. TTL 单位 列表中,选择时间单位,例如 30 minutes

  8. 规范名称字段中,输入 dnsResourceRecord.data字段的完整值,该值显示在gcloud certificate-manager dns-authorizations describe命令的输出中

  9. 要输入其他信息,请点击添加一项

  10. 点击创建

gcloud

创建 DNS 授权后,gcloud CLI 命令会返回相应的 CNAME 记录。如需将 CNAME 记录添加到目标网域的 DNS 区域中的 DNS 配置,请按照以下步骤操作:

  1. 发起 DNS 记录事务:

    gcloud dns record-sets transaction start --zone="DNS_ZONE_NAME"
    

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

  2. 将 CNAME 记录添加到目标 DNS 区域:

    gcloud dns record-sets transaction add CNAME_RECORD \
        --name="VALIDATION_SUBDOMAIN_NAME.DOMAIN_NAME." \
        --ttl="30" \
        --type="CNAME" \
        --zone="DNS_ZONE_NAME"
    

    替换以下内容:

    • CNAME_RECORD:用于创建相应 DNS 授权的 Google Cloud CLI 命令所返回的 CNAME 记录的完整数据值。
    • VALIDATION_SUBDOMAIN_NAME:DNS 区域的前缀子网域,例如 _acme-challenge。您可以按照创建 DNS 授权中的说明,从 gcloud certificate-manager dns-authorizations describe 命令日志中复制名称 。
    • DOMAIN_NAME:目标网域的名称。域名必须是完全限定域名,例如 myorg.example.com。您还必须在目标域名后添加尾随英文句点。
    • DNS_ZONE_NAME:目标 DNS 区域的名称。

    如需详细了解 FIXED_RECORDPER_PROJECT_RECORD DNS 授权之间的区别,请参阅以下示例。这两个示例之间的唯一区别是 --name 标志的值。

    FIXED_RECORD 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"
    

    PER_PROJECT_RECORD DNS 授权

    gcloud dns record-sets transaction add 0e40fc77-a37d-4eb8-8fe1-eea2e18d12d9.4.authorize.certificatemanager.goog. \
        --name="_acme-challenge_ujmmovf2vn55tgye.myorg.example.com." \
        --ttl="30" \
        --type="CNAME" \
        --zone="myorg-example-com"
    
  3. 运行 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 授权

更新 DNS 授权时,您可以执行以下操作:

  • 指定新标签
  • 指定新说明

gcloud

如需更新 DNS 授权,请使用 certificate-manager dns-authorizations update 命令

gcloud certificate-manager dns-authorizations update AUTHORIZATION_NAME \
    [--update-labels="LABELS"] \
    [--description="DESCRIPTION"] \
    [--location="LOCATION"]

替换以下内容:

  • AUTHORIZATION_NAME:DNS 授权的名称。
  • LABELS:此 DNS 授权的标签。此标志不是必需的。
  • DESCRIPTION:此 DNS 授权的说明。 此标志不是必需的。
  • LOCATION:目标 Google Cloud 位置。默认位置是 global

API

如需更新 DNS 授权,请向 dnsAuthorizations.patch 方法发出 PATCH 请求,如下所示:

PATCH /v1/projects/PROJECT_ID/locations/LOCATION/dnsAuthorizations/AUTHORIZATION_NAME?updateMask=labels,description
{
    description: "DESCRIPTION",
    labels: { "LABEL_KEY": "LABEL_VALUE" }
}

替换以下内容:

  • PROJECT_ID:您的 Google Cloud 项目的 ID。
  • LOCATION:目标 Google Cloud 位置。默认位置是 global
  • AUTHORIZATION_NAME:DNS 授权的名称。
  • DESCRIPTION:一个可选字段,用于指定此 DNS 授权的说明。
  • LABEL_KEY:应用于此 DNS 授权的标签键。
  • LABEL_VALUE:应用于此 DNS 授权的标签值。

列出 DNS 授权

您可以查看项目中的所有 DNS 授权及其详细信息。

gcloud

如需列出 DNS 授权,请使用 certificate-manager dns-authorizations list 命令

gcloud certificate-manager dns-authorizations list \
    --filter="FILTER" \
    --page-size="PAGE_SIZE" \
    --limit="LIMIT" \
    --sort-by="SORT_BY" \
    [--location="LOCATION"]

替换以下内容:

  • FILTER:一个表达式,用于将返回的结果限制为特定值。

    例如,您可以按以下条件过滤结果:

    • 网域:--filter='domain=myorg.example.com'
    • 标签和创建时间:--filter='labels.key:value AND create_time > "2021-09-01T00:00:00Z"'

    如需查看更多可与 Certificate Manager 搭配使用的过滤示例,请参阅 Cloud Key Management Service 文档中的对列表结果进行排序和过滤

  • PAGE_SIZE:您希望每页返回的结果数

  • LIMIT:您希望返回的最大结果数

  • SORT_BY:一个以英文逗号分隔的 name 字段列表,返回的结果将按这些字段排序。默认排序顺序为升序;如需按降序排序,请在字段前加上波浪号 (~)。

  • LOCATION:目标 Google Cloud 位置。如需列出所有区域的 DNS 授权,请使用 - 作为值。默认值为 -。此标志不是必需的。

API

如需列出所有已配置的 DNS 授权,请向 dnsAuthorizations.list 方法发出 GET 请求,如下所示:

GET /v1/projects/PROJECT_ID/locations/LOCATION/dnsAuthorizations?filter=FILTER&pageSize=PAGE_SIZE&sortBy=SORT_BY

替换以下内容:

  • PROJECT_ID:您的 Google Cloud 项目的 ID。
  • LOCATION:目标 Google Cloud 位置。如需查看所有位置的所有 DNS 授权,请指定单个连字符 (-)。
  • FILTER:一个表达式,用于将返回的结果限制为特定值。

    例如,您可以按以下条件过滤结果:

    • 网域:--filter='domain=myorg.example.com'
    • 标签和创建时间:--filter='labels.key:value AND create_time > "2021-09-01T00:00:00Z"'
  • PAGE_SIZE:您希望每页返回的结果数

  • SORT_BY:一个以英文逗号分隔的 name 字段列表,返回的结果将按这些字段排序。默认排序顺序为升序;如需按降序排序,请在字段前加上波浪号 (~)。

删除 DNS 授权

如需删除分配给 Google 管理的证书的 DNS 授权, 请先删除证书 ,然后再删除 DNS 授权。

gcloud

如需删除 DNS 授权,请使用 certificate-manager dns-authorizations delete 命令

gcloud certificate-manager dns-authorizations delete AUTHORIZATION_NAME \
    [--location="LOCATION"]

替换以下内容:

  • AUTHORIZATION_NAME:DNS 授权的名称。
  • LOCATION:目标 Google Cloud 位置。默认位置是 global

API

如需删除 DNS 授权,请向 dnsAuthorizations.delete 方法发出 DELETE 请求,如下所示:

DELETE /v1/projects/PROJECT_ID/locations/LOCATION/dnsAuthorizations/AUTHORIZATION_NAME

替换以下内容:

  • PROJECT_ID:您的 Google Cloud 项目的 ID。
  • LOCATION:目标 Google Cloud 位置。默认位置是 global
  • AUTHORIZATION_NAME:DNS 授权的名称。

后续步骤