管理 DNS 授权

本部分介绍如何创建和管理 DNS 授权以供使用 具有 Google 管理的证书

有关 DNS 授权的详细信息,请参阅 Certificate Manager 的工作原理

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

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

创建 DNS 授权

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

要跨多个项目独立管理证书,您可以使用 每个项目的 DNS 授权。 证书管理器可以处理证书颁发和管理事宜 在 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

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

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:CNAME 记录的完整值 由创建相应 DNS 的 gcloud 命令返回 授权。
    • 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 请参阅对列表结果进行排序和过滤

  • PAGE_SIZE:每页返回的结果数。

  • LIMIT:要返回的结果数上限。

  • SORT_BY:以英文逗号分隔的 name 字段列表, 对返回的结果进行排序。默认的排序顺序为升序。 如需降序排序,请在相应字段前面加上波浪号 (~)。

API

GET dnsAuthorizations.list 方法,如下所示:

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 项目。如需了解详情,请参阅 角色和权限

gcloud

gcloud certificate-manager dns-authorizations delete AUTHORIZATION_NAME

替换以下内容:

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

API

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

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

替换以下内容:

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

后续步骤