本教學課程說明如何使用憑證管理工具,透過 DNS 授權部署全球 Google 代管憑證。
下列全球負載平衡器支援使用 DNS 授權的 Google 代管憑證:
- 全域外部應用程式負載平衡器
- 傳統版應用程式負載平衡器
- 全域外部 Proxy 網路負載平衡器
如果您想部署至跨區域負載平衡器或區域性負載平衡器,請參閱下列文章:
目標
本教學課程將說明如何完成下列工作:
- 使用憑證管理工具,建立由公開信任的憑證授權單位核發的 Google 代管憑證,並透過 DNS 授權。
- 使用目標 HTTPS Proxy,將憑證部署至支援的負載平衡器。
事前準備
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Compute Engine, Certificate Manager APIs.
-
Install the Google Cloud CLI.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Compute Engine, Certificate Manager APIs.
-
Install the Google Cloud CLI.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
To initialize the gcloud CLI, run the following command:
gcloud init
- 建立公開 DNS 區域
Certificate Manager 擁有者 (
roles/certificatemanager.owner
)建立及管理 Certificate Manager 資源時必須使用。
Compute 負載平衡器管理員 (
roles/compute.loadBalancerAdmin
) 或 Compute 網路管理員 (roles/compute.networkAdmin
)建立及管理 HTTPS 目標 Proxy 時必須使用。
DNS 管理員 (
roles/dns.admin
)如要將 Cloud DNS 做為 DNS 解決方案,就必須提供這項資訊。
- 證照管理工具的角色和權限。
- Compute Engine 身分與存取權管理角色和權限。
- Cloud DNS 的角色和權限。
如要建立全域外部應用程式負載平衡器,請參閱「設定具有 VM 執行個體群組後端的全域外部應用程式負載平衡器」。
如要建立傳統版應用程式負載平衡器,請參閱「透過代管執行個體群組後端設定傳統版應用程式負載平衡器」一文。
如要建立全域外部 Proxy 網路負載平衡器 (SSL Proxy),請參閱「設定具有 VM 執行個體群組後端的全域外部 Proxy 網路負載平衡器 (SSL Proxy)」。
如要建立傳統版 Proxy 網路負載平衡器 (SSL Proxy),請參閱「設定具備 VM 執行個體群組後端的傳統版 Proxy 網路負載平衡器 (SSL Proxy)」一文。
必要的角色
請確認您具備下列角色,才能完成本教學課程中的任務:
如要瞭解詳情,請參考下列資源:
網域名稱
如要建立憑證,請取得您擁有的網域的完整網域名稱 (FQDN)。如果沒有網域,可以使用 Cloud Domains 註冊網域。
建立負載平衡器
本教學課程假設您已建立並設定負載平衡器的後端、健康狀態檢查、後端服務和網址對應。如果您已建立外部應用程式負載平衡器,請記下網址對應項目的名稱,因為您稍後會在本教學課程中使用這項資訊。
如果您尚未建立負載平衡器,請參閱下列頁面瞭解如何建立負載平衡器:
建立具備 DNS 授權的 Google 代管憑證
建立憑證前,請先建立公開 DNS 可用區。接著,請建立 DNS 授權,並將 CNAME 記錄新增至目標 DNS 區域。
建立 DNS 授權
DNS 授權僅涵蓋單一網域名稱。您必須為要與目標憑證搭配使用的每個網域名稱,分別建立 DNS 授權。
如果您要為萬用字元憑證 (例如 *.myorg.example.com
) 建立 DNS 授權,請為父網域設定 DNS 授權,例如 myorg.example.com
。
主控台
您可以在建立憑證時建立 DNS 授權或附加現有的 DNS 授權。詳情請參閱「建立參照 DNS 授權的 Google 代管憑證」。
gcloud
如要建立 DNS 授權,請使用 certificate-manager
dns-authorizations create
指令:
gcloud certificate-manager dns-authorizations create AUTHORIZATION_NAME \ --domain="DOMAIN_NAME"
更改下列內容:
AUTHORIZATION_NAME
:DNS 授權的名稱。DOMAIN_NAME
:您要建立 DNS 授權的目標網域名稱。網域名稱必須是完整的網域名稱,例如myorg.example.com
。
全球 Google 代管憑證會使用 FIXED_RECORD
做為預設 DNS 授權類型。如要使用 PER_PROJECT_RECORD
DNS 授權,請執行下列指令:
gcloud certificate-manager dns-authorizations create AUTHORIZATION_NAME \ --domain="DOMAIN_NAME" \ --type="PER_PROJECT_RECORD"
建立 DNS 授權後,請使用 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'
Terraform
如要建立 DNS 授權,您可以使用 google_certificate_manager_dns_authorization
資源。
如要瞭解如何套用或移除 Terraform 設定,請參閱「基本 Terraform 指令」。
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」。
在「範圍」部分,選取「預設」。
在「憑證類型」中,選取「建立 Google 代管憑證」。
在「憑證授權單位類型」中,選取「公開」。
在「網域名稱」欄位中,指定以半形逗號分隔的憑證網域名稱清單。每個網域名稱都必須是完整的網域名稱,例如
myorg.example.com
。網域名稱也可以是萬用字元網域名稱,例如*.example.com
。在「授權類型」中,選取「DNS 授權」。
這個頁面會列出網域名稱的 DNS 授權。如果網域名稱沒有相關的 DNS 授權,請按照下列步驟建立:
- 按一下「建立缺少的 DNS 授權」。
- 在「DNS 授權名稱」欄位中,指定 DNS 授權名稱。預設的 DNS 授權類型為
FIXED_RECORD
。如要個別管理多個專案的憑證,請勾選「Per project authorization」核取方塊。 - 按一下「建立 DNS 授權」。
在「Labels」欄位中,指定要與憑證建立關聯的標籤。如要新增標籤,請按一下
「Add label」,然後指定標籤的鍵和值。按一下 [建立]。
新的憑證會顯示在憑證清單中。
gcloud
如要建立 DNS 授權的全球 Google 代管憑證,請搭配 dns-authorizations
標記執行 certificate-manager certificates create
指令:
gcloud certificate-manager certificates create CERTIFICATE_NAME \ --domains="DOMAIN_NAME,*.DOMAIN_NAME" \ --dns-authorizations="AUTHORIZATION_NAMES"
更改下列內容:
CERTIFICATE_NAME
:憑證名稱。DOMAIN_NAME
:目標網域的名稱。網域名稱必須是完整網域名稱,例如myorg.example.com
,或是萬用字元網域,例如*.myorg.example.com
。星號點前置字串(*.)
代表萬用字元憑證。AUTHORIZATION_NAMES
:以半形逗號分隔的清單,列出您為憑證建立的 DNS 授權名稱。
Terraform
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", ], } }
更改下列內容:
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 區域」頁面。
按一下要新增記錄的 DNS 區域名稱。
在「Zone details」(可用區詳細資料) 頁面中,按一下「Add standard」(新增標準)。
在「Create record set」(建立記錄集) 頁面的「DNS name」(DNS 名稱) 欄位中,輸入 DNS 區域的子網域。
輸入子網域名稱時,請確認子網域名稱 (包括 DNS 名稱欄位中顯示的灰色文字) 與
dnsResourceRecord.name
欄位的完整值相符,gcloud certificate-manager dns-authorizations describe
指令的輸出內容 會顯示這項資訊。請參閱以下例子:
如果
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 名稱」欄位中的灰色文字為.myorg.example.com.
,請輸入_acme-challenge_ujmmovf2vn55tgye
。
在「Resource record type」欄位中選取「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
:建立對應 DNS 授權的 Google Cloud CLI 指令傳回的 CNAME 記錄完整資料值。VALIDATION_SUBDOMAIN_NAME
:DNS 區域的前置子網域,例如_acme-challenge
。您可以從gcloud certificate-manager dns-authorizations describe
指令記錄複製名稱,如「建立 DNS 授權」一文所述。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"
執行 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
,請確認您已正確將 CNAME
記錄新增至 DNS 設定。
如需更多疑難排解步驟,請參閱「排解憑證管理工具問題」。
將憑證部署至負載平衡器
如要部署全球 Google 代管憑證,請使用憑證對應關係部署憑證。
建立憑證對應關係
建立憑證對應關係,參照與憑證相關聯的憑證對應項目:
gcloud
如要建立憑證對應,請使用 gcloud certificate-manager maps create
指令:
gcloud certificate-manager maps create CERTIFICATE_MAP_NAME
將 CERTIFICATE_MAP_NAME
替換為目標憑證對應項目的名稱。
Terraform
如要建立憑證對應關係,您可以使用 google_certificate_manager_certificate_map
資源。
建立憑證對應關係項目
建立憑證對應項目,並將其與憑證和憑證對應關係建立關聯:
gcloud
如要建立憑證對應項目,請使用 gcloud certificate-manager maps entries create
指令:
gcloud certificate-manager maps entries create CERTIFICATE_MAP_ENTRY_NAME \ --map="CERTIFICATE_MAP_NAME" \ --certificates="CERTIFICATE_NAME" \ --hostname="HOSTNAME"
更改下列內容:
CERTIFICATE_MAP_ENTRY_NAME
:憑證對應項目的名稱。CERTIFICATE_MAP_NAME
:憑證對應項目所屬的憑證對應關係名稱。CERTIFICATE_NAME
:您要與憑證對應項目建立關聯的憑證名稱。HOSTNAME
:您要與憑證對應項目建立關聯的主機名稱。如果您想建立涵蓋萬用字元網域和根網域的憑證,請使用根網域和萬用字元指定主機名稱,例如
example.com
和*.example.com
。此外,您必須指定兩個憑證對應項目,一個用於example.com
,另一個用於*.example.com
。
Terraform
如要建立含有根網域的憑證對應項目,請使用 google_certificate_manager_certificate_map_entry
資源。
如要建立含萬用字元網域的憑證對應項目,請使用 google_certificate_manager_certificate_map_entry
資源。
確認憑證對應項目是否處於啟用狀態
請先確認憑證對應項目是否處於啟用狀態,再將對應的憑證對應項目附加至目標 Proxy。
如要驗證憑證對應項目,請使用 gcloud certificate-manager maps entries describe
指令:
gcloud certificate-manager maps entries describe CERTIFICATE_MAP_ENTRY_NAME \ --map="CERTIFICATE_MAP_NAME"
更改下列內容:
CERTIFICATE_MAP_ENTRY_NAME
:憑證對應項目的名稱。CERTIFICATE_NAME
:您要與憑證對應項目建立關聯的憑證名稱。
輸出結果會與下列內容相似:
certificates: createTime: '2021-09-06T10:01:56.229472109Z' hostname: example.com name: projects/my-project/locations/global/certificateMaps/myCertMap/certificateMapEntries/myCertMapEntry state: ACTIVE updateTime: '2021-09-06T10:01:58.277031787Z'
將憑證對應附加至目標 Proxy
您可以將憑證對應表附加至新的目標 Proxy 或現有目標 Proxy。
gcloud
如要將憑證對應設定附加至新的目標 Proxy,請使用 gcloud compute target-https-proxies create
指令:
gcloud compute target-https-proxies create PROXY_NAME \ --certificate-map="CERTIFICATE_MAP_NAME" \ --url-map="URL_MAP" \ --global
更改下列內容:
PROXY_NAME
:目標 Proxy 的名稱。CERTIFICATE_MAP_NAME
:參照憑證對應關係項目和相關憑證的憑證對應關係名稱。URL_MAP
:網址對應項目的名稱
如要將憑證對應表附加至現有的目標 HTTPS Proxy,請使用 gcloud compute target-https-proxies update
指令。如果不知道現有目標 Proxy 的名稱,請前往「目標 Proxy」頁面,並記下目標 Proxy 的名稱。
gcloud compute target-https-proxies update PROXY_NAME \ --certificate-map="CERTIFICATE_MAP_NAME" \ --global
建立或更新目標 Proxy 後,請執行下列指令來驗證:
gcloud compute target-https-proxies list
Terraform
如要將憑證對應項目附加至目標 Proxy,您可以使用 google_compute_target_https_proxy
資源。
設定目標 Proxy 時,如果您直接附加 TLS (SSL) 憑證,並透過憑證對應附加,Proxy 會使用憑證對應參照的憑證,並忽略直接附加的 TLS (SSL) 憑證。
清除所用資源
如要避免系統向您的 Google Cloud 帳戶收取您在本教學課程中使用資源的費用,請將這些資源刪除。
刪除負載平衡器及其資源。
請參閱「清除負載平衡器設定」。
從 Proxy 中刪除或分離憑證對應關係。
如要刪除憑證對應,請執行下列指令:
gcloud compute target-https-proxies delete PROXY_NAME
如果您想保留目標 HTTPS Proxy,請將憑證對應項目從 Proxy 中分離。卸除憑證對應前,請注意下列事項:
- 如果有任何 TLS (SSL) 憑證直接附加至 Proxy,則解除憑證對應會導致 Proxy 恢復使用這些直接附加的 TLS (SSL) 憑證。
- 如果沒有直接附加至 Proxy 的 TLS (SSL) 憑證,則無法將憑證對應項目從 Proxy 中分離。您必須先將至少一個 TLS (SSL) 憑證直接附加至 Proxy,才能解除憑證對應。
如要卸除憑證對應,請執行下列指令:
gcloud compute target-https-proxies update PROXY_NAME \ --clear-certificate-map
將
PROXY_NAME
替換為目標 Proxy 的名稱。從憑證對應關係中刪除憑證對應項目:
gcloud certificate-manager maps entries delete CERTIFICATE_MAP_ENTRY_NAME \ --map="CERTIFICATE_MAP_NAME"
更改下列內容:
CERTIFICATE_MAP_ENTRY_NAME
:憑證對應項目的名稱。CERTIFICATE_MAP_NAME
:憑證對應關係的名稱。
刪除憑證對應關係:
gcloud certificate-manager maps delete CERTIFICATE_MAP_NAME
將
CERTIFICATE_MAP_NAME
替換為憑證對應項目的名稱。刪除 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 授權名稱。