本教學課程說明如何使用 Certificate Manager,透過DNS 授權將全球 Google 代管憑證部署至跨區域內部應用程式負載平衡器。
如要部署至全域外部負載平衡器或區域負載平衡器,請參閱下列說明:
使用 DNS 授權建立 Google 代管憑證
建立憑證前,請先建立公開 DNS 區域。接著建立 DNS 授權,並將 CNAME 記錄新增至目標 DNS 區域。
建立 DNS 授權
DNS 授權僅涵蓋單一網域名稱。您必須為要搭配目標憑證使用的每個網域名稱,分別建立 DNS 授權。
如要為萬用字元憑證 (例如 *.myorg.example.com) 建立 DNS 授權,請為父項網域設定 DNS 授權,例如 myorg.example.com。
主控台
建立憑證時,您可以建立 DNS 授權或附加現有的 DNS 授權。詳情請參閱「建立參照 DNS 授權的 Google 代管憑證」。
gcloud
您可以建立兩種類型的 DNS 授權:FIXED_RECORD 或 PER_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]
更改下列內容:
- AUTHORIZATION_NAME:DNS 授權的名稱。
- DOMAIN_NAME:您要建立這項 DNS 授權的目標網域名稱。網域名稱必須是完整網域名稱,例如- myorg.example.com。
建立 FIXED_RECORD DNS 授權後,請使用 gcloud certificate-manager dns-authorizations describe 指令驗證:
gcloud certificate-manager dns-authorizations describe AUTHORIZATION_NAME
輸出結果大致如下。在輸出內容中,找出 dnsResourceRecord 區段。找出 CNAME 記錄,然後將記錄詳細資料 (data、name 和 type) 新增至 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'
每個專案的記錄 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
更改下列內容:
- AUTHORIZATION_NAME:DNS 授權的名稱。
- DOMAIN_NAME:您要建立這項 DNS 授權的目標網域名稱。網域名稱必須是完整網域名稱,例如- myorg.example.com。
建立 PER_PROJECT_RECORD DNS 授權後,請使用 gcloud certificate-manager dns-authorizations describe 指令驗證:
gcloud certificate-manager dns-authorizations describe AUTHORIZATION_NAME
輸出結果大致如下。在輸出內容中,找出 dnsResourceRecord 區段。找出 CNAME 記錄,然後將記錄詳細資料 (data、name 和 type) 新增至 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/global/dnsAuthorizations?dns_authorization_id=AUTHORIZATION_NAME"
{
  "domain": "DOMAIN_NAME",
  "type": "PER_PROJECT_RECORD" //optional
}
更改下列內容:
- PROJECT_ID: Google Cloud 專案的 ID。
- AUTHORIZATION_NAME:DNS 授權的名稱。
- DOMAIN_NAME:您要建立這項 DNS 授權的目標網域名稱。 網域名稱必須是完整網域名稱,例如- myorg.example.com。
建立參照 DNS 授權的 Google 代管憑證
如要建立參照您在上一個步驟中建立的 DNS 授權的 Google 管理憑證,請執行下列操作:
主控台
- 前往 Google Cloud 控制台的「Certificate Manager」頁面。 
- 在「憑證」分頁中,按一下「新增憑證」。 
- 在「憑證名稱」欄位中,輸入憑證的專屬名稱。 
- 選用:在「說明」欄位中輸入憑證說明。說明可協助您識別憑證。 
- 在「Location」(位置) 部分,選取「Global」。 
- 在「範圍」部分,選取「所有區域」。 
- 在「Certificate type」(憑證類型) 部分,選取「Create Google-managed certificate」(建立 Google 代管的憑證)。 
- 在「Certificate Authority type」(憑證授權單位類型) 中,選取「Public」(公開)。 
- 在「網域名稱」欄位中,指定以半形逗號分隔的憑證網域名稱清單。每個網域名稱都必須是完整網域名稱,例如 - myorg.example.com。網域名稱也可以是萬用字元網域名稱,例如- *.example.com。
- 在「Authorization type」部分選取「DNS authorization」。 - 這個頁面會列出網域名稱的 DNS 授權。如果網域名稱沒有相關聯的 DNS 授權,請按照下列步驟建立授權: - 按一下「建立缺少的 DNS 授權」。
- 在「DNS 授權名稱」欄位中,指定 DNS 授權的名稱。
預設的 DNS 授權類型為 FIXED_RECORD。如要獨立管理多個專案的憑證,請選取「每個專案的授權」核取方塊。
- 按一下「建立 DNS 授權」。
 
- 在「標籤」欄位中,指定要與憑證建立關聯的標籤。如要新增標籤,請按一下「新增標籤」,然後指定標籤的鍵和值。 
- 點選「建立」。 - 新憑證會顯示在憑證清單中。 
gcloud
如要使用 DNS 授權建立跨區域的 Google 代管憑證,請使用 certificate-manager certificates create 指令,並加上 dns-authorizations 和 --scope 旗標:
gcloud certificate-manager certificates create CERTIFICATE_NAME \
    --domains="DOMAIN_NAME, *.DOMAIN_NAME" \
    --dns-authorizations="AUTHORIZATION_NAMES" \
    --scope=all-regions
更改下列內容:
- CERTIFICATE_NAME:憑證名稱。
- DOMAIN_NAME:目標網域的名稱。網域名稱必須是完整網域名稱,例如- myorg.example.com,或是萬用字元網域,例如- *.myorg.example.com。星號點前置字串 (*.) 代表萬用字元憑證。
- AUTHORIZATION_NAMES:以半形逗號分隔的 DNS 授權名稱清單。
API
對 certificates.create 方法發出 POST 要求,建立憑證,如下所示:
POST /v1/projects/PROJECT_ID/locations/global/certificates?certificate_id=CERTIFICATE_NAME
{
 "managed": {
  "domains": ["DOMAIN_NAME"],
  "dnsAuthorizations": [
   "projects/PROJECT_ID/locations/global/dnsAuthorizations/AUTHORIZATION_NAME",
  ],
  "scope": "ALL_REGIONS"
 }
}
更改下列內容:
- PROJECT_ID: Google Cloud 專案的 ID。
- CERTIFICATE_NAME:憑證名稱。
- DOMAIN_NAME:目標網域的名稱。網域名稱必須是完整網域名稱,例如- myorg.example.com,或是萬用字元網域,例如- *.myorg.example.com。星號點前置字串 (*.) 代表萬用字元憑證。
- AUTHORIZATION_NAMES:以半形逗號分隔的 DNS 授權名稱清單。
在 DNS 設定中新增 CNAME 記錄
如果使用第三方 DNS 解決方案管理 DNS,請參閱相關文件,瞭解如何在 DNS 設定中新增 CNAME 記錄。如果您使用Google Cloud 管理 DNS,請完成本節中的步驟。
主控台
如要建立記錄集,請按照下列步驟操作:
- 前往 Google Cloud 控制台的「DNS zones」頁面。 
- 按一下要新增記錄的 DNS 區域名稱。 
- 在「Zone details」(區域詳細資料) 頁面中,按一下「Add standard」(新增標準)。 
- 在「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。
 
- 在「資源記錄類型」欄位中選取「CNAME」。 
- 在「TTL」TTL欄位中,輸入資源記錄存留時間的正數值,也就是記錄可快取的時間。 
- 從「TTL 單位」清單中選取時間單位,例如 - 30 minutes。
- 在「Canonical name」(標準名稱) 欄位中,輸入 - dnsResourceRecord.data欄位的完整值,如- gcloud certificate-manager dns-authorizations describe指令的輸出內容所示。
- 如要輸入其他資訊,請按一下「新增項目」。 
- 點選「建立」。 
gcloud
建立 DNS 授權時,gcloud CLI 指令會傳回對應的 CNAME 記錄。如要在目標網域的 DNS 區域中,將 CNAME 記錄新增至 DNS 設定,請按照下列步驟操作:
- 啟動 DNS 記錄交易: - gcloud dns record-sets transaction start --zone="DNS_ZONE_NAME" - 將 - DNS_ZONE_NAME替換為目標 DNS 區域的名稱。
- 將 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_RECORD和- PER_PROJECT_RECORDDNS 授權之間的差異,請參閱下列範例。這兩個範例的唯一差異是- --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"
- 執行 DNS 記錄交易,儲存變更: - gcloud dns record-sets transaction execute --zone="DNS_ZONE_NAME" - 將 - DNS_ZONE_NAME替換為目標 DNS 區域的名稱。
Terraform
如要將 CNAME 記錄新增至 DNS 設定,可以使用 google_dns_record_set 資源。
驗證憑證狀態
將憑證部署至負載平衡器之前,請先確認憑證是否有效。憑證狀態可能需要幾分鐘的時間才會變更為 ACTIVE。
主控台
- 前往 Google Cloud 控制台的「Certificate Manager」頁面。 
- 在「認證」分頁中,查看「狀態」欄中的認證。 
gcloud
如要驗證憑證狀態,請執行下列指令:
gcloud certificate-manager certificates describe CERTIFICATE_NAME
將 CERTIFICATE_NAME 替換為目標 Google 管理的憑證名稱。
輸出結果會與下列內容相似:
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/global/dnsAuthorizations/myCert
  domains:
  - myorg.example.com
  state: ACTIVE
name: projects/myProject/locations/global/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 \
    --url-map=URL_MAP \
    --certificate-manager-certificates=CERTIFICATE_NAME \
    --global
更改下列內容:
- PROXY_NAME:目標 Proxy 的名稱。
- URL_MAP:網址對應表名稱。建立負載平衡器時,您已建立網址對應。
- CERTIFICATE_NAME:憑證名稱。
如要將憑證附加至現有的目標 HTTPS Proxy,請使用 gcloud
compute target-https-proxies update 指令。如果不知道現有目標 Proxy 的名稱,請前往「目標 Proxy」頁面,並記下目標 Proxy 的名稱。
gcloud compute target-https-proxies update PROXY_NAME \
    --global \
    --certificate-manager-certificates=CERTIFICATE_NAME
建立或更新目標 Proxy 後,請執行下列指令進行驗證:
gcloud compute target-https-proxies list
清除所用資源
如要避免系統向您的 Google Cloud 帳戶收取這個教學課程所用資源的費用,請將資源全數刪除。
- 刪除負載平衡器及其資源。 - 請參閱「清除負載平衡設定」。 
- 刪除 Google 代管的憑證: - 主控台- 前往 Google Cloud 控制台的「Certificate Manager」頁面。 
- 在「憑證」分頁中,勾選憑證的核取方塊。 
- 點選「刪除」。 
- 在出現的對話方塊中,按一下 [Delete] (刪除) 以進行確認。 
 - gcloud- gcloud certificate-manager certificates delete CERTIFICATE_NAME - 將 - CERTIFICATE_NAME替換為目標憑證的名稱。
- 刪除 DNS 授權: - gcloud certificate-manager dns-authorizations delete AUTHORIZATION_NAME - 將 - AUTHORIZATION_NAME替換為目標 DNS 授權的名稱。