本教學課程說明如何使用 Certificate Manager,將第三方憑證遷移至Google Cloud 負載平衡器。
如要遷移第三方憑證,且不希望服務中斷,請建立與第三方憑證數量相同的 Google 管理憑證。接著,將憑證整合至單一憑證對應,並使用 DNS 將憑證對應部署至負載平衡器。最後,請更新 DNS A 和 AAAA 記錄,指向負載平衡器的 IP 位址。
如要查看支援的負載平衡器清單,請參閱「憑證管理員總覽」。
目標
本教學課程將說明如何完成下列工作:
- 使用 DNS 授權建立 Google 代管憑證。
- 為所有憑證建立一個憑證對應。
- 使用 DNS 將憑證部署至負載平衡器。
- 更新 DNS A 和 AAAA 記錄,將其指向負載平衡器的 IP 位址。
事前準備
- 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.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Compute Engine, Certificate Manager APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles. -
Install the Google Cloud CLI.
-
若您採用的是外部識別資訊提供者 (IdP),請先使用聯合身分登入 gcloud CLI。
-
執行下列指令,初始化 gcloud CLI:
gcloud init -
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Compute Engine, Certificate Manager APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles. -
Install the Google Cloud CLI.
-
若您採用的是外部識別資訊提供者 (IdP),請先使用聯合身分登入 gcloud CLI。
-
執行下列指令,初始化 gcloud CLI:
gcloud init Certificate Manager 擁有者 (
roles/certificatemanager.owner)建立及管理 Certificate Manager 資源時必須具備這項權限。
Compute 負載平衡器管理員 (
roles/compute.loadBalancerAdmin) 或 Compute 網路管理員 (roles/compute.networkAdmin)建立及管理 HTTPS 目標 Proxy 時必須使用。
DNS 管理員 (
roles/dns.admin)如要使用 Cloud DNS 做為 DNS 解決方案,則必須啟用這項服務。
- Certificate Manager 的角色和權限。
- Compute Engine 的Compute Engine IAM 角色和權限。
- Cloud DNS 的角色和權限。
AUTHORIZATION_NAME:DNS 授權的名稱。DOMAIN_NAME:您要建立這個 DNS 授權的目標網域名稱。網域名稱必須是完整網域名稱,例如myorg.example.com。AUTHORIZATION_NAME:DNS 授權的名稱。DOMAIN_NAME:您要建立這個 DNS 授權的目標網域名稱。網域名稱必須是完整網域名稱,例如myorg.example.com。PROJECT_ID: Google Cloud 專案的 ID。AUTHORIZATION_NAME:DNS 授權的名稱。DOMAIN_NAME:您要建立這個 DNS 授權的目標網域名稱。網域名稱必須是完整網域名稱,例如myorg.example.com。前往 Google Cloud 控制台的「Certificate Manager」頁面。
在「憑證」分頁中,按一下「新增憑證」。
在「憑證名稱」欄位中,輸入憑證的專屬名稱。
選用:在「Description」(說明) 欄位中輸入憑證的說明。說明可協助您識別憑證。
在「Location」(位置) 部分,選取「Global」。
在「範圍」部分,選取「預設」。
在「Certificate type」(憑證類型) 部分,選取「Create Google-managed certificate」(建立 Google 代管的憑證)。
在「憑證授權單位類型」中,選取「公開」。
在「網域名稱」欄位中,指定以半形逗號分隔的憑證網域名稱清單。每個網域名稱都必須是完整網域名稱,例如
myorg.example.com。網域名稱也可以是萬用字元網域名稱,例如*.example.com。在「授權類型」部分,選取「DNS 授權」。
這個頁面會列出網域名稱的 DNS 授權。如果網域名稱沒有相關聯的 DNS 授權,請按照下列步驟建立授權:
- 按一下「建立缺少的 DNS 授權」。
- 在「DNS 授權名稱」欄位中,指定 DNS 授權的名稱。
預設的 DNS 授權類型為
FIXED_RECORD。如要獨立管理多個專案的憑證,請選取「每個專案的授權」核取方塊。 - 按一下「建立 DNS 授權」。
在「標籤」欄位中,指定要與憑證建立關聯的標籤。如要新增標籤,請按一下「新增標籤」,然後指定標籤的鍵和值。
點選「建立」。
新憑證會顯示在憑證清單中。
CERTIFICATE_NAME:憑證名稱。DOMAIN_NAME:目標網域名稱。網域名稱必須是完整網域名稱,例如myorg.example.com,或是萬用字元網域,例如*.myorg.example.com。星號點前置字串(*.)代表萬用字元憑證。AUTHORIZATION_NAMES:以半形逗號分隔的清單,列出您為憑證建立的 DNS 授權名稱。PROJECT_ID: Google Cloud 專案的 ID。CERTIFICATE_NAME:憑證名稱。DOMAIN_NAME:目標網域名稱。網域名稱必須是完整網域名稱,例如myorg.example.com,或是萬用字元網域,例如*.myorg.example.com。星號點前置字串 (*.) 代表萬用字元憑證。AUTHORIZATION_NAMES:以半形逗號分隔的 DNS 授權名稱清單。前往 Google Cloud 控制台的「DNS zones」(DNS 區域) 頁面。
按一下要新增記錄的 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 unit」(TTL 單位) 清單中選取時間單位,例如
30 minutes。在「Canonical name」(標準名稱) 欄位中,輸入
dnsResourceRecord.data欄位的完整值,如gcloud certificate-manager dns-authorizations describe指令的輸出內容所示。如要輸入其他資訊,請按一下「Add item」(新增項目)。
點按「Create」(建立)。
啟動 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 區域的名稱。前往 Google Cloud 控制台的「Certificate Manager」頁面。
在「認證」分頁中,查看「狀態」欄中的認證。
CERTIFICATE_MAP_ENTRY_NAME:憑證對應項目名稱。CERTIFICATE_MAP_NAME:憑證對應項目所附加的憑證對應名稱。CERTIFICATE_NAME:要與憑證對應關係項目建立關聯的憑證名稱。HOSTNAME:您要與憑證對應項目建立關聯的主機名稱。如要建立涵蓋萬用字元網域和根網域的憑證,請指定含有根網域和萬用字元的主機名稱,例如
example.com和*.example.com。此外,您必須指定兩個憑證對應項目,一個用於example.com,另一個用於*.example.com。CERTIFICATE_MAP_ENTRY_NAME:憑證對應項目名稱。CERTIFICATE_NAME:要與憑證對應關係項目建立關聯的憑證名稱。PROXY_NAME:目標 Proxy 的名稱。CERTIFICATE_MAP_NAME:參照憑證對應關係項目和相關聯憑證的憑證對應關係名稱。URL_MAP:網址對應表的名稱DOMAIN_NAME:目標網域的名稱IP_ADDRESS:負載平衡器的 IP 位址
必要的角色
請確認您具備下列角色,才能完成本教學課程中的工作:
如要瞭解詳情,請參考下列資源:
建立 Google 代管的憑證
建立與第三方憑證相同數量的Google 代管憑證,並使用 DNS 授權 (建議) 或自行管理的憑證。建立憑證前,請先建立 DNS 授權,並將 CNAME 記錄新增至網域的授權 DNS 區域。
本節列出建立全域 Google 代管憑證的步驟和指令。如要建立區域或跨區域的 Google 代管憑證,請參閱「建立 Google 代管憑證」。
建立 DNS 授權
DNS 授權僅涵蓋單一網域名稱。您必須為要搭配目標憑證使用的每個網域名稱,分別建立 DNS 授權。
如要為萬用字元憑證 (例如 *.myorg.example.com) 建立 DNS 授權,請為父項網域 (例如 myorg.example.com) 設定 DNS 授權。
控制台
建立憑證時,您可以建立 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]
更改下列內容:
建立 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
更改下列內容:
建立 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'
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
}
更改下列內容:
建立參照 DNS 授權的 Google 代管憑證
如要建立參照您在先前步驟中建立的 DNS 授權的全域 Google 代管憑證,請執行下列步驟:
控制台
gcloud
如要使用 DNS 授權建立全域 Google 代管憑證,請執行 certificate-manager certificates create 指令,並加上 dns-authorizations 旗標:
gcloud certificate-manager certificates create CERTIFICATE_NAME \
--domains="DOMAIN_NAME,*.DOMAIN_NAME" \
--dns-authorizations="AUTHORIZATION_NAMES"
更改下列內容:
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",
],
}
}
更改下列內容:
在 DNS 設定中新增 CNAME 記錄
如果使用第三方 DNS 解決方案管理 DNS,請參閱相關文件,瞭解如何在 DNS 設定中新增 CNAME 記錄。如果您使用Google Cloud 管理 DNS,請完成本節中的步驟。
控制台
如要建立記錄集,請按照下列步驟操作:
gcloud
建立 DNS 授權時,gcloud CLI 指令會傳回對應的 CNAME 記錄。如要在目標網域的 DNS 區域中新增 CNAME 記錄到 DNS 設定,請按照下列步驟操作:
Terraform
如要將 CNAME 記錄新增至 DNS 設定,可以使用 google_dns_record_set 資源。
驗證憑證狀態
將憑證部署至負載平衡器之前,請先確認憑證是否有效。憑證狀態可能需要幾分鐘的時間才會變更為 ACTIVE。
控制台
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 管理的憑證,請按照本節中的步驟操作,並使用憑證對應部署憑證。
如要將 Google 管理的憑證部署至區域外部應用程式負載平衡器或區域內部應用程式負載平衡器,或是跨區域內部應用程式負載平衡器,請直接將憑證附加至目標 Proxy。
建立憑證對應關係
建立憑證對應,參照與憑證相關聯的憑證對應項目:
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"
更改下列內容:
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"
更改下列內容:
輸出結果會與下列內容相似:
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。
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
更改下列內容:
如要將憑證對應附加至現有目標 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) 憑證。
測試部署的憑證
針對您部署的每個憑證,使用下列指令,在負載平衡器的 IP 位址上,測試憑證涵蓋的每個網域連線:
openssl s_client -showcerts -servername DOMAIN_NAME -connect IP_ADDRESS:443
更改下列內容:
如要進一步瞭解如何測試連線,請參閱「使用 OpenSSL 進行測試」
更新 DNS 記錄
將流量從第三方服務切換至 Cloud Load Balancing。請參閱「更新 DNS A 和 AAAA 記錄,將其指向負載平衡器的 IP 位址」。