本教學課程說明如何使用 Certificate Manager,透過DNS 授權將區域性 Google 代管憑證部署至區域性外部應用程式負載平衡器,或區域性內部應用程式負載平衡器。
如要部署至全域外部負載平衡器或跨區域負載平衡器,請參閱下列內容:
目標
本教學課程將說明如何完成下列工作:
- 使用憑證管理員,透過 DNS 授權建立由公開信任的憑證授權單位核發的 Google 代管憑證。如要建立 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.
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 - 建立公開 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 解決方案,則必須啟用這項服務。
- Certificate Manager 的角色和權限。
- Compute Engine 的Compute Engine IAM 角色和權限。
- Cloud DNS 的角色和權限。
如要建立區域性外部應用程式負載平衡器,請參閱「設定具有 VM 執行個體群組後端的區域性外部應用程式負載平衡器」。
如要建立區域性內部應用程式負載平衡器,請參閱「設定具有 VM 執行個體群組後端的區域性內部應用程式負載平衡器」。
AUTHORIZATION_NAME:DNS 授權的名稱。DOMAIN_NAME:您要建立這個 DNS 授權的目標網域名稱。網域名稱必須是完整網域名稱,例如myorg.example.com。LOCATION:您建立 DNS 授權的目標 Google Cloud 位置。您必須提供具體的目標位置,例如us-central1。PROJECT_ID: Google Cloud 專案的 ID。LOCATION:您建立 DNS 授權的目標 Google Cloud 位置。您必須提供具體的目標位置,例如us-central1。AUTHORIZATION_NAME:DNS 授權的名稱。DOMAIN_NAME:您要建立這個 DNS 授權的目標網域名稱。網域名稱必須是完整網域名稱,例如myorg.example.com。前往 Google Cloud 控制台的「Certificate Manager」頁面。
在「憑證」分頁中,按一下「新增憑證」。
在「憑證名稱」欄位中,輸入憑證的專屬名稱。
選用:在「Description」(說明) 欄位中輸入憑證的說明。說明可協助您識別憑證。
在「位置」部分,選取「區域」。
從「Region」(區域) 清單中選取您的區域。
在「Certificate type」(憑證類型) 部分,選取「Create Google-managed certificate」(建立 Google 代管的憑證)。
在「憑證授權單位類型」中,選取「公開」。
在「網域名稱」欄位中,指定以半形逗號分隔的憑證網域名稱清單。每個網域名稱都必須是完整網域名稱,例如
myorg.example.com。網域名稱也可以是萬用字元網域名稱,例如*.example.com。在「授權類型」部分,選取「DNS 授權」。
這個頁面會列出網域名稱的 DNS 授權。如果網域名稱沒有相關聯的 DNS 授權,請按照下列步驟建立授權:
- 按一下「建立缺少的 DNS 授權」。
- 在「DNS 授權名稱」欄位中,指定 DNS 授權的名稱。
- 按一下「建立 DNS 授權」。
在「標籤」欄位中,指定要與憑證建立關聯的標籤。如要新增標籤,請按一下「新增標籤」,然後指定標籤的鍵和值。
點選「建立」。
新憑證會顯示在憑證清單中。
CERTIFICATE_NAME:憑證名稱。DOMAIN_NAME:目標網域名稱。網域名稱必須是完整網域名稱,例如myorg.example.com,或是萬用字元網域,例如*.myorg.example.com。星號點前置字串 (*.) 代表萬用字元憑證。AUTHORIZATION_NAMES:以半形逗號分隔的 DNS 授權名稱清單。LOCATION:目標 Google Cloud 位置。PROJECT_ID: Google Cloud 專案的 ID。CERTIFICATE_NAME:憑證名稱。DOMAIN_NAME:目標網域名稱。網域名稱必須是完整網域名稱,例如myorg.example.com,或是萬用字元網域,例如*.myorg.example.com。星號點前置字串 (*.) 代表萬用字元憑證。LOCATION:目標 Google Cloud 位置。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_NAME:憑證名稱。LOCATION:您建立 Google 代管憑證的目標 Google Cloud 位置。PROXY_NAME:目標 Proxy 的名稱。CERTIFICATE_NAME:憑證名稱。URL_MAP:網址對應表名稱。建立負載平衡器時,您已建立網址對應。LOCATION:您要建立 HTTPS 目標 Proxy 的目標 Google Cloud 位置。刪除負載平衡器及其資源。
請參閱「清除負載平衡設定」。
刪除 Google 代管的憑證:
控制台
前往 Google Cloud 控制台的「Certificate Manager」頁面。
在「憑證」分頁中,選取憑證的核取方塊。
按一下「Delete」(刪除)。
在出現的對話方塊中,按一下 [Delete] (刪除) 以進行確認。
gcloud
gcloud certificate-manager certificates delete CERTIFICATE_NAME \ --location=LOCATION更改下列內容:
CERTIFICATE_NAME:憑證名稱。LOCATION:目標 Google Cloud 位置。
刪除 DNS 授權:
gcloud certificate-manager dns-authorizations delete AUTHORIZATION_NAME --location=LOCATION
更改下列內容:
AUTHORIZATION_NAME:DNS 授權的名稱。LOCATION:您建立 DNS 授權的目標 Google Cloud 位置。
必要的角色
請確認您具備下列角色,才能完成本教學課程中的工作:
如要瞭解詳情,請參考下列資源:
網域名稱
如要建立憑證,請取得您擁有的網域完整網域名稱 (FQDN)。如果您沒有網域,可以使用 Cloud Domains 註冊網域。
建立負載平衡器
本教學課程假設您已建立及設定負載平衡器的後端、健康狀態檢查、後端服務和網址對應。請記下網址對應項的名稱,本教學課程稍後會用到。
建立區域性 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"
更改下列內容:
建立 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/LOCATION/dnsAuthorizations?dns_authorization_id=AUTHORIZATION_NAME"
{
"domain": "DOMAIN_NAME",
"type": "PER_PROJECT_RECORD"
}
更改下列內容:
建立參照 DNS 授權的 Google 代管憑證
如要建立參照您在上一個步驟中建立的 DNS 授權的 Google 管理憑證,請執行下列操作:
控制台
gcloud
如要建立具有 DNS 授權的區域性 Google 代管憑證,請執行 certificate-manager certificates create 指令,並使用 dns-authorizations 和 location 旗標:
gcloud certificate-manager certificates create CERTIFICATE_NAME \
--domains="DOMAIN_NAME, *.DOMAIN_NAME" \
--dns-authorizations="AUTHORIZATION_NAMES" \
--location=LOCATION
更改下列內容:
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",
],
}
}
更改下列內容:
在 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 \
--location=LOCATION
更改下列內容:
輸出結果會與下列內容相似:
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
更改下列內容:
如要將憑證附加至現有的目標 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 帳戶收取本教學課程所用資源的費用,請刪除這些資源。