管理 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

Google 管理的全球证书的默认 DNS 授权类型为 FIXED_RECORD。如需使用按项目 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

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

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

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 授权:向 DELETE dnsAuthorizations.delete 方法,如下所示:

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

替换以下内容:

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

后续步骤