管理 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 授权,请使用 certificate-manager dns-authorizations create 命令

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

替换以下内容:

  • AUTHORIZATION_NAME:DNS 授权的名称。
  • DOMAIN_NAME:您要为其创建此 DNS 授权的目标网域的名称。域名必须是完全限定域名,例如 myorg.example.com
  • TYPE:DNS 授权类型。您可以指定 FIXED_RECORDPER_PROJECT_RECORD。如需了解详情,请参阅 DNS 授权
  • LOCATION:您创建 DNS 授权的目标位置。 Google Cloud

创建 DNS 授权后,请使用 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.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 名称字段中显示的灰显文本)与 gcloud certificate-manager dns-authorizations describe 命令的输出中显示的 dnsResourceRecord.name 字段的完整值相匹配。

    请参见以下示例:

    • 如果 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。您可以从 gcloud certificate-manager dns-authorizations describe 命令日志中复制该名称,如创建 DNS 授权中所述。
    • 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"
    
  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 位置。默认位置是 global

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 位置。默认位置是 global
  • 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 授权的名称。

后续步骤