部署全球自行管理的憑證

本教學課程說明如何使用 Certificate Manager 部署全域自行管理的憑證。

下列負載平衡器支援全域自行管理的憑證:

  • 全域外部應用程式負載平衡器
  • 傳統版應用程式負載平衡器
  • 全域外部 Proxy 網路負載平衡器
  • 傳統版 Proxy 網路負載平衡器

如要部署至區域或跨區域負載平衡器,請參閱下列內容:

將自行管理的憑證上傳至 Certificate Manager

如要將憑證上傳至 Certificate Manager,請按照下列步驟操作:

主控台

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

    前往 Certificate Manager

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

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

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

  5. 在「Location」(位置) 部分,選取「Global」

  6. 在「範圍」部分,選取「預設」

  7. 在「憑證類型」部分,選取「建立自行管理的憑證」

  8. 在「憑證」欄位中,執行下列任一操作:

    • 按一下「上傳」按鈕,然後選取 PEM 格式的憑證檔案。
    • 複製並貼上 PEM 格式憑證的內容。內容開頭必須是 -----BEGIN CERTIFICATE-----,結尾必須是 -----END CERTIFICATE-----
  9. 在「私密金鑰憑證」欄位中,執行下列任一操作:

    • 按一下「上傳」按鈕,然後選取私密金鑰。私密金鑰必須採用 PEM 格式,且不得受密碼保護。
    • 複製並貼上 PEM 格式的私密金鑰內容。私密金鑰開頭須為 -----BEGIN PRIVATE KEY-----,結尾須為 -----END PRIVATE KEY-----
  10. 在「標籤」欄位中,指定要與憑證建立關聯的標籤。如要新增標籤,請按一下「新增標籤」,然後指定標籤的鍵和值。

  11. 點選「建立」

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

gcloud

如要建立全域自行管理的憑證,請使用 certificate-manager certificates create 指令

gcloud certificate-manager certificates create CERTIFICATE_NAME \
    --certificate-file="CERTIFICATE_FILE" \
    --private-key-file="PRIVATE_KEY_FILE"

更改下列內容:

  • CERTIFICATE_NAME:憑證名稱。
  • CERTIFICATE_FILE:CRT 憑證檔案的路徑和檔案名稱。
  • PRIVATE_KEY_FILE:KEY 私密金鑰檔案的路徑和檔案名稱。

Terraform

如要上傳自行管理的憑證,可以使用具有 self_managed 區塊的 google_certificate_manager_certificate 資源

API

certificates.create 方法發出 POST 要求,即可上傳憑證,如下所示:

POST /v1/projects/PROJECT_ID/locations/global/certificates?certificate_id=CERTIFICATE_NAME
{
  self_managed: {
    pem_certificate: "PEM_CERTIFICATE",
    pem_private_key: "PEM_KEY",
  }
}

更改下列內容:

  • PROJECT_ID: Google Cloud 專案的 ID。
  • CERTIFICATE_NAME:憑證名稱。
  • PEM_CERTIFICATE:憑證 PEM。
  • PEM_KEY:金鑰 PEM。

將自行管理的憑證部署至負載平衡器

如要部署全球性自行管理憑證,請使用憑證對應。

建立憑證對應關係

建立憑證對應,參照與憑證相關聯的憑證對應項目:

gcloud

如要建立憑證對應,請使用 gcloud certificate-manager maps create 指令

gcloud certificate-manager maps create CERTIFICATE_MAP_NAME

CERTIFICATE_MAP_NAME 替換為目標憑證對應的名稱。

Terraform

如要建立憑證對應關係,可以使用 google_certificate_manager_certificate_map 資源

resource "google_certificate_manager_certificate_map" "certificate_map" {
  name        = "${local.name}-certmap-${random_id.tf_prefix.hex}"
  description = "${local.domain} certificate map"
  labels = {
    "terraform" : true
  }
}

建立憑證對應關係項目

建立憑證對應關係項目,並將其與憑證和憑證對應關係建立關聯:

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 資源

resource "google_certificate_manager_certificate_map_entry" "first_entry" {
  name        = "${local.name}-first-entry-${random_id.tf_prefix.hex}"
  description = "example certificate map entry"
  map         = google_certificate_manager_certificate_map.certificate_map.name
  labels = {
    "terraform" : true
  }
  certificates = [google_certificate_manager_certificate.root_cert.id]
  hostname     = local.domain
}

如要使用萬用字元網域建立憑證對應項目,請使用 google_certificate_manager_certificate_map_entry 資源

resource "google_certificate_manager_certificate_map_entry" "second_entry" {
  name        = "${local.name}-second-entity-${random_id.tf_prefix.hex}"
  description = "example certificate map entry"
  map         = google_certificate_manager_certificate_map.certificate_map.name
  labels = {
    "terraform" : true
  }
  certificates = [google_certificate_manager_certificate.root_cert.id]
  hostname     = "*.${local.domain}"
}

確認憑證對應項目已啟用

請先確認憑證對應項目是否有效,再將對應的憑證對應項目附加至目標 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。

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 帳戶收取這個教學課程所用資源的費用,請將資源全數刪除。

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

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

  2. 從 Proxy 刪除或分離憑證對應關係。

    如要刪除憑證對應,請執行下列指令:

    gcloud compute target-https-proxies delete PROXY_NAME
    

    如要保留目標 HTTPS Proxy,請從 Proxy 分離憑證對應。

    • 如果 Proxy 直接附加任何 TLS (SSL) 憑證,卸離憑證對應後,Proxy 會繼續使用這些直接附加的 TLS (SSL) 憑證。
    • 如果沒有直接附加至 Proxy 的 TLS (SSL) 憑證,就無法從 Proxy 分離憑證對應。您必須先將至少一個 TLS (SSL) 憑證直接附加至 Proxy,才能卸離憑證對應。

    如要卸離憑證對應,請執行下列指令:

    gcloud compute target-https-proxies update PROXY_NAME \
        --clear-certificate-map
    

    PROXY_NAME 替換為目標 Proxy 的名稱。

  3. 從憑證對應關係中刪除憑證對應關係項目:

    gcloud certificate-manager maps entries delete CERTIFICATE_MAP_ENTRY_NAME \
        --map="CERTIFICATE_MAP_NAME"
    

    更改下列內容:

    • CERTIFICATE_MAP_ENTRY_NAME:憑證對應項目的名稱。
    • CERTIFICATE_MAP_NAME:憑證對應關係的名稱。
  4. 刪除憑證對應:

    gcloud certificate-manager maps delete CERTIFICATE_MAP_NAME
    

    CERTIFICATE_MAP_NAME 替換為憑證對應的名稱。

  5. 刪除上傳的憑證:

    gcloud certificate-manager certificates delete CERTIFICATE_NAME
    

    CERTIFICATE_NAME 替換為憑證名稱。