管理 DNS 授權

DNS 授權可讓您證明Google 管理的憑證網域擁有權。建立 Google 代管的憑證時,可以指定一或多個 DNS 授權,用於佈建和續約。

本頁說明如何建立及管理 DNS 授權,以搭配 Google 代管的憑證使用。

詳情請參閱「網域授權」。

建立 DNS 授權

DNS 授權僅涵蓋單一網域名稱。您必須為要搭配目標憑證使用的每個網域名稱,分別建立 DNS 授權。

如要為萬用字元憑證 (例如 *.myorg.example.com) 建立 DNS 授權,請為父項網域設定 DNS 授權,例如 myorg.example.com

如要跨多個專案獨立管理憑證,可以使用 PER_PROJECT_RECORD DNS 授權。憑證管理員可獨立處理 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 行,並取得 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'

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

在 DNS 設定中新增 CNAME 記錄

如果使用第三方 DNS 解決方案管理 DNS,請參閱相關文件,瞭解如何在 DNS 設定中新增 CNAME 記錄。如果您使用Google Cloud 管理 DNS,請完成本節中的步驟。

主控台

如要建立記錄集,請按照下列步驟操作:

  1. 前往 Google Cloud 控制台的「DNS zones」頁面。

    前往 Cloud DNS 區域

  2. 按一下要新增記錄的 DNS 區域名稱。

  3. 在「Zone details」(區域詳細資料) 頁面中,按一下「Add standard」(新增標準)

  4. 在「Create record set」(建立記錄集) 頁面的「DNS name」(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 name」(DNS 名稱) 欄位中灰顯的文字為 .myorg.example.com.,請輸入 _acme-challenge_ujmmovf2vn55tgye

  5. 在「資源記錄類型」欄位中選取「CNAME」

  6. 在「TTL」TTL欄位中,輸入資源記錄存留時間的正數值,也就是記錄可快取的時間。

  7. 從「TTL 單位」清單中選取時間單位,例如 30 minutes

  8. 在「Canonical name」(標準名稱) 欄位中,輸入 dnsResourceRecord.data 欄位顯示的完整值,如gcloud certificate-manager dns-authorizations describe 指令的輸出內容所示。

  9. 如要輸入其他資訊,請按一下「新增項目」

  10. 點選「建立」

gcloud

建立 DNS 授權時,gcloud CLI 指令會傳回對應的 CNAME 記錄。如要在目標網域的 DNS 區域中,將 CNAME 記錄新增至 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:Google Cloud CLI 指令傳回的 CNAME 記錄完整資料值,該指令會建立對應的 DNS 授權。
    • VALIDATION_SUBDOMAIN_NAME:DNS 區域的前置子網域,例如 _acme-challenge。如要複製名稱,請參閱「建立 DNS 授權」一文,瞭解如何從 gcloud certificate-manager dns-authorizations describe 指令記錄中複製名稱。
    • 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 位置。如要列出所有區域的 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 授權的名稱。

後續步驟