管理 DNS 授权

本部分介绍如何创建和管理与 Google 管理的证书结合使用的 DNS 授权。

如需详细了解 DNS 授权,请参阅 Certificate Manager 的工作原理

如需了解如何使用 Certificate Manager 部署证书,请参阅部署概览

如需详细了解本页面上使用的 gcloud CLI 命令,请参阅 Certificate Manager API

创建 DNS 授权

如需创建 DNS 授权,请完成本部分中的步骤。由于每个 DNS 授权仅涵盖一个域名,因此您必须为要用于目标证书的每个域名创建 DNS 授权。

如需独立管理多个项目的证书,您可以使用项目级 DNS 授权(预览版)。Certificate Manager 可以在 Google Cloud 中独立为每个项目颁发和管理证书。您在项目中使用的 DNS 授权和证书是独立的,不会与其他项目中的资源交互。

如需完成此任务,您必须对目标 Google Cloud 项目拥有以下角色之一:

  • Certificate Manager Editor
  • Certificate Manager Owner

如需了解详情,请参阅角色和权限

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

此命令会返回您必须添加到 DNS 配置的 CNAME 记录。例如:

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

dnsAuthorizations.create 方法发出 POST 请求,以创建 DNS 授权,如下所示:

POST /v1/projects/PROJECT_ID/locations/global/dnsAuthorizations?dns_authorization_id=AUTHORIZATION_NAME"
{
  "domain": "DOMAIN_NAME",
}

替换以下内容:

  • PROJECT_ID:目标 Google Cloud 项目的 ID。
  • AUTHORIZATION_NAME:描述此 DNS 授权的唯一名称。
  • DOMAIN_NAME:您将为其创建此 DNS 授权的网域的名称。域名必须是完全限定域名,例如 myorg.example.com

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

当您创建 DNS 授权时,Google Cloud 会返回验证子网域的对应 CNAME 记录。您必须将此 CNAME 记录添加到目标网域的 DNS 区域中的 DNS 配置中。如果您使用 Google Cloud 管理 DNS,请完成本部分中的步骤。否则,请参阅第三方 DNS 解决方案的文档。

如需详细了解 Certificate Manager 如何使用此 CNAME 记录来验证网域所有权,请参阅 Google 管理的证书的网域授权

gcloud

  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="_acme-challenge.DOMAIN_NAME." \
       --ttl="30" \
       --type="CNAME" \
       --zone="DNS_ZONE_NAME"
    

    替换以下内容:

    • CNAME_RECORD:创建相应 DNS 授权的 gcloud 命令返回的 CNAME 记录的完整值。
    • DOMAIN_NAME:目标网域的名称。域名必须是完全限定域名,例如 myorg.example.com。您还必须在目标域名后面添加尾随句点。
    • DNS_ZONE_NAME:目标 DNS 区域的名称。
  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 授权

如需更新 DNS 授权,请完成本部分中的步骤。您可以按如下方式更新 DNS 授权:

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

如需完成此任务,您必须对目标 Google Cloud 项目拥有以下角色之一:

  • Certificate Manager Editor
  • Certificate Manager Owner

如需了解详情,请参阅角色和权限

gcloud

 gcloud certificate-manager dns-authorizations update AUTHORIZATION_NAME \
     --update-labels="LABELS" \
     --description="DESCRIPTION"

替换以下内容:

  • AUTHORIZATION_NAME:目标 DNS 授权的名称。
  • LABELS:可选标志,指定此 DNS 授权的标签。
  • DESCRIPTION:可选标志,指定此 DNS 授权的说明。

API

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

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

替换以下内容:

  • PROJECT_ID:目标 Google Cloud 项目的 ID。
  • AUTHORIZATION_NAME:目标 DNS 授权的名称。
  • DESCRIPTION:可选字段,指定此 DNS 授权的说明。
  • LABEL_KEY:应用于此 DNS 授权的标签键。
  • LABEL_VALUE:应用于此 DNS 授权的标签值。

列出 DNS 授权

如需列出已配置的 DNS 授权,请完成本部分中的步骤。

如需完成此任务,您必须对目标 Google Cloud 项目拥有以下角色之一:

  • Certificate Manager Viewer
  • Certificate Manager Editor
  • Certificate Manager Owner

如需了解详情,请参阅角色和权限

gcloud

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

替换以下内容:

  • 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 字段列表,系统将按照这些字段对返回的结果进行排序。默认排序顺序为升序。 如需降序排序,请在字段前添加波浪号 (~)。

API

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

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

替换以下内容:

  • PROJECT_ID:目标 Google Cloud 项目的 ID。
  • FILTER:用于将返回的结果限制为特定值的表达式。
  • PAGE_SIZE:每页返回的结果数。
  • SORT_BY:以英文逗号分隔的字段名称列表,按这些名称对返回的结果进行排序。默认排序顺序为升序。 如需降序排序,请在字段前添加波浪号 (~)。

删除 DNS 授权

如需删除 DNS 授权,请完成本部分中的步骤。如需删除分配给一个或多个 Google 管理的证书的 DNS 授权,您必须先删除这些证书,然后才能删除该 DNS 授权。

如需完成此任务,您必须拥有目标 Google Cloud 项目的 Certificate Manager Owner 角色。如需了解详情,请参阅角色和权限

gcloud

gcloud certificate-manager dns-authorizations delete AUTHORIZATION_NAME

替换以下内容:

  • AUTHORIZATION_NAME:目标 DNS 授权的名称。

API

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

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

替换以下内容:

  • PROJECT_ID:目标 Google Cloud 项目的 ID。
  • AUTHORIZATION_NAME:目标 DNS 授权的名称。

后续步骤