部署使用 DNS 授權的地區 Google 代管憑證

本教學課程說明如何使用 Certificate Manager,透過DNS 授權將區域性 Google 代管憑證部署至區域性外部應用程式負載平衡器,或區域性內部應用程式負載平衡器。

如要部署至全域外部負載平衡器或跨區域負載平衡器,請參閱下列說明:

建立區域性 Google 代管憑證

建立憑證前,請先建立公開 DNS 區域。接著建立 DNS 授權,並將 CNAME 記錄新增至目標 DNS 區域。

建立 DNS 授權

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

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

如果是區域性 Google 代管憑證,您只能建立 PER_PROJECT_RECORD 類型的 DNS 授權。

主控台

建立憑證時,您可以建立 DNS 授權或附加現有的 DNS 授權。詳情請參閱「建立參照 DNS 授權的 Google 代管憑證」。

gcloud

如要建立 PER_PROJECT_RECORD DNS 授權,請使用下列 gcloud certificate-manager dns-authorizations create 指令

gcloud certificate-manager dns-authorizations create AUTHORIZATION_NAME \
    --domain="DOMAIN_NAME" \
    --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'

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"
}

更改下列內容:

  • PROJECT_ID: Google Cloud 專案的 ID。
  • LOCATION:建立 DNS 授權的目標 Google Cloud 位置。
  • AUTHORIZATION_NAME:DNS 授權的名稱。
  • DOMAIN_NAME:您要建立這項 DNS 授權的目標網域名稱。網域名稱必須是完整網域名稱,例如 myorg.example.com

建立參照 DNS 授權的 Google 代管憑證

如要建立參照您在上一個步驟中建立的 DNS 授權的 Google 管理憑證,請執行下列操作:

主控台

  1. 前往 Google Cloud 控制台的「Certificate Manager」頁面。

    前往 Certificate Manager

  2. 在「憑證」分頁中,按一下「新增憑證」

  3. 在「憑證名稱」欄位中,輸入憑證的專屬名稱。

  4. 選用:在「說明」欄位中輸入憑證說明。說明可協助您識別憑證。

  5. 在「位置」部分,選取「區域」

  6. 從「Region」(區域) 清單中選取您的區域。

  7. 在「Certificate type」(憑證類型) 部分,選取「Create Google-managed certificate」(建立 Google 代管的憑證)

  8. 在「Certificate Authority type」(憑證授權單位類型) 中,選取「Public」(公開)

  9. 在「網域名稱」欄位中,指定以半形逗號分隔的憑證網域名稱清單。每個網域名稱都必須是完整網域名稱,例如 myorg.example.com。網域名稱也可以是萬用字元網域名稱,例如 *.example.com

  10. 在「Authorization type」部分選取「DNS authorization」

    這個頁面會列出網域名稱的 DNS 授權。如果網域名稱沒有相關聯的 DNS 授權,請按照下列步驟建立授權:

    1. 按一下「建立缺少的 DNS 授權」
    2. 在「DNS 授權名稱」欄位中,指定 DNS 授權的名稱。
    3. 按一下「建立 DNS 授權」
  11. 在「標籤」欄位中,指定要與憑證建立關聯的標籤。如要新增標籤,請按一下「新增標籤」,然後指定標籤的鍵和值。

  12. 點選「建立」

    新憑證會顯示在憑證清單中。

gcloud

如要使用 DNS 授權建立區域性 Google 代管憑證,請執行 certificate-manager certificates create 指令,並加上 dns-authorizationslocation 旗標:

gcloud certificate-manager certificates create CERTIFICATE_NAME \
    --domains="DOMAIN_NAME, *.DOMAIN_NAME" \
    --dns-authorizations="AUTHORIZATION_NAMES" \
    --location=LOCATION

更改下列內容:

  • CERTIFICATE_NAME:憑證名稱。
  • DOMAIN_NAME:目標網域的名稱。網域名稱必須是完整網域名稱,例如 myorg.example.com,或是萬用字元網域,例如 *.myorg.example.com。星號點前置字串 (*.) 代表萬用字元憑證。
  • AUTHORIZATION_NAMES:以半形逗號分隔的 DNS 授權名稱清單。
  • LOCATION:目標 Google Cloud 位置。

API

certificates.create 方法發出 POST 要求,建立憑證,如下所示:

POST /v1/projects/PROJECT_ID/locations/LOCATION/certificates?certificate_id=CERTIFICATE_NAME
{
 "managed": {
  "domains": ["DOMAIN_NAME"],
  "dnsAuthorizations": [
   "projects/PROJECT_ID/locations/LOCATION/dnsAuthorizations/AUTHORIZATION_NAME",
  ],
 }
}

更改下列內容:

  • PROJECT_ID: Google Cloud 專案的 ID。
  • CERTIFICATE_NAME:憑證名稱。
  • DOMAIN_NAME:目標網域的名稱。網域名稱必須是完整網域名稱,例如 myorg.example.com,或是萬用字元網域,例如 *.myorg.example.com。星號點前置字串 (*.) 代表萬用字元憑證。
  • LOCATION:目標 Google Cloud 位置。
  • AUTHORIZATION_NAMES:以半形逗號分隔的 DNS 授權名稱清單。

在 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 區域的名稱。

    如要進一步瞭解 FIXED_RECORDPER_PROJECT_RECORD DNS 授權之間的差異,請參閱下列範例。這兩個範例的唯一差異是 --name 旗標的值。

    FIXED_RECORD 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"
    

    每個專案的記錄 DNS 授權

    gcloud dns record-sets transaction add 0e40fc77-a37d-4eb8-8fe1-eea2e18d12d9.4.authorize.certificatemanager.goog. \
        --name="_acme-challenge_ujmmovf2vn55tgye.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]
}

驗證憑證狀態

將憑證部署至負載平衡器之前,請先確認憑證是否有效。憑證狀態可能需要幾分鐘的時間才會變更為 ACTIVE

主控台

  1. 前往 Google Cloud 控制台的「Certificate Manager」頁面。

    前往 Certificate Manager

  2. 在「認證」分頁中,查看「狀態」欄中的認證。

gcloud

如要驗證憑證狀態,請執行下列指令:

gcloud certificate-manager certificates describe CERTIFICATE_NAME \
    --location=LOCATION

更改下列內容:

  • CERTIFICATE_NAME:憑證名稱。
  • LOCATION:您建立 Google 代管憑證的目標 Google Cloud 位置。

輸出結果會與下列內容相似:

createTime: '2021-10-20T12:19:53.370778666Z'
expireTime: '2022-05-07T05:03:49Z'
managed:
  authorizationAttemptInfo:
  - domain: myorg.example.com
    state: AUTHORIZED
  dnsAuthorizations:
    - projects/myProject/locations/LOCATION/dnsAuthorizations/myCert
  domains:
  - myorg.example.com
  state: ACTIVE
name: projects/myProject/locations/LOCATION/certificates/myCert
pemCertificate: |
  -----BEGIN CERTIFICATE-----
  [...]
  -----END CERTIFICATE-----
sanDnsnames:
  - myorg.example.com
updateTime: '2021-10-20T12:19:55.083385630Z'

如果數小時後憑證狀態仍未變成 ACTIVE,請檢查您是否已在 DNS 設定中正確新增 CNAME 記錄。

如需更多疑難排解步驟,請參閱「排解憑證管理工具問題」。

將憑證部署至負載平衡器

如要將區域性 Google 管理的憑證部署至區域性外部應用程式負載平衡器或區域性內部應用程式負載平衡器,請直接將憑證附加至目標 Proxy。

將憑證直接附加至目標 Proxy

您可以將憑證附加至新的或現有的目標 Proxy。

如要將憑證附加至新的目標 Proxy,請使用 gcloud compute target-https-proxies create 指令

gcloud compute target-https-proxies create PROXY_NAME \
    --certificate-manager-certificates=CERTIFICATE_NAME \
    --url-map=URL_MAP \
    --region=LOCATION

更改下列內容:

  • PROXY_NAME:目標 Proxy 的名稱。
  • CERTIFICATE_NAME:憑證名稱。
  • URL_MAP:網址對應表名稱。建立負載平衡器時,您已建立網址對應。
  • LOCATION:要建立 HTTPS 目標 Proxy 的目標 Google Cloud 位置。

如要將憑證附加至現有的目標 HTTPS Proxy,請使用 gcloud compute target-https-proxies update 指令。如果不知道現有目標 Proxy 的名稱,請前往「目標 Proxy頁面,並記下目標 Proxy 的名稱。

gcloud compute target-https-proxies update PROXY_NAME \
    --region=LOCATION \
    --certificate-manager-certificates=CERTIFICATE_NAME

建立或更新目標 Proxy 後,請執行下列指令進行驗證:

gcloud compute target-https-proxies list

清除所用資源

如要避免系統向您的 Google Cloud 帳戶收取這個教學課程所用資源的費用,請將資源全數刪除。

  1. 刪除負載平衡器及其資源。

    請參閱「清除負載平衡設定」。

  2. 刪除 Google 代管的憑證:

    主控台

    1. 前往 Google Cloud 控制台的「Certificate Manager」頁面。

      前往 Certificate Manager

    2. 在「憑證」分頁中,勾選憑證的核取方塊。

    3. 點選「刪除」。

    4. 在出現的對話方塊中,按一下 [Delete] (刪除) 以進行確認。

    gcloud

    gcloud certificate-manager certificates delete CERTIFICATE_NAME \
        --location=LOCATION
    

    更改下列內容:

    • CERTIFICATE_NAME:憑證名稱。
    • LOCATION:目標 Google Cloud 位置。
  3. 刪除 DNS 授權:

    gcloud certificate-manager dns-authorizations delete AUTHORIZATION_NAME
       --location=LOCATION
    

    更改下列內容:

    • AUTHORIZATION_NAME:DNS 授權的名稱。
    • LOCATION:您建立 DNS 授權的目標 Google Cloud 位置。