建立 EKM 連線

本頁面說明如何設定 Cloud External Key Manager (Cloud EKM),透過虛擬私有雲 (VPC) 網路連線至外部金鑰管理 (EKM) 供應商。

在支援透過虛擬私有雲使用 EKM 的 Cloud KMS 位置,您可以透過虛擬私有雲使用外部金鑰。詳情請參閱「Cloud KMS 位置」頁面。

如要將現有的 EXTERNAL 金鑰遷移至 EXTERNAL_VPC 保護層級 (預先發布版),請先完成這些設定步驟。

術語

  • EKM 連線

    Cloud KMS 資源,用於設定與外部金鑰管理工具的連線。在 Google Cloud 控制台中,這稱為「透過虛擬私有雲連至 EKM 的連線」。

  • 虛擬私有雲專案

    專案,其中包含用於連線至外部金鑰管理工具的虛擬私有雲資源。

  • 重要專案

    在 Cloud KMS 中,存放 EKM 連線資源和 Cloud EKM 金鑰的專案。金鑰專案可以與虛擬私有雲專案相同,但並非必要。

  • 加密貨幣領域

    外部金鑰管理合作夥伴中的資源容器。加密空間會以專屬路徑識別。Crypto Space 路徑的格式因外部金鑰管理合作夥伴而異,例如 v0/cryptospaces/YOUR_UNIQUE_PATH。

事前準備

完成下列步驟後,即可開始使用 Cloud EKM 金鑰保護資料。

建立新專案

  1. 前往 Google Cloud 控制台的「Manage resources」(管理資源) 頁面。

    前往「Manage resources」(管理資源)

  2. 建立新的 Google Cloud 專案,或選取現有專案。

  3. 確認 Google Cloud 專案已啟用計費功能。

  4. 進一步瞭解 Cloud EKM 定價。

啟用 Cloud KMS

  1. 為專案啟用 Cloud Key Management Service API。

    啟用 Cloud Key Management Service API

  2. 記下專案的 Cloud EKM 服務帳戶。在下列範例中,請將 PROJECT_NUMBER 替換為Google Cloud 專案的專案編號。每次使用 Google Cloud 控制台建立 Cloud EKM 金鑰時,也會顯示這項資訊。

    service-PROJECT_NUMBER@gcp-sa-ekms.
    

確保 gcloud CLI 為最新版本 {: class="hide-from-toc"}

如要使用 Google Cloud CLI,請執行下列指令,確保 CLI 為最新版本:

gcloud

gcloud components update

準備虛擬私有雲網路

設定虛擬私有雲網路時,有兩種選項:

根據預設,新專案會包含自動模式虛擬私有雲網路,其中預先填入防火牆規則。如果虛擬私有雲網路不會用於正式環境,預設的自動模式虛擬私有雲網路是最快的入門方式。

如果外部金鑰管理工具在地端部署環境中執行,且您將使用混合雲連線連線至該工具,則應使用自訂模式虛擬私有雲網路,因為這類網路可讓您控管子網路 IP 位址範圍。

請按照下列步驟設定虛擬私有雲:

  1. 啟用私人 Google 存取權

    外部金鑰管理工具必須驗證每項要求中的 OIDC 權杖。如要驗證權杖,外部金鑰管理工具必須從 www.googleapis.com 網域名稱擷取 OAuth2 公開金鑰。如果外部金鑰管理工具在 Google Cloud 中執行,且無法透過網際網路存取 (例如沒有外部 IP 或遭防火牆封鎖的 VM),請按照設定私人 Google 存取權的操作說明操作。

  2. IP 範圍 35.199.192.0/19 的防火牆設定

    Cloud EKM 的要求會來自這個範圍。針對外部金鑰管理工具監聽的通訊埠,建立 TCP 的輸入和輸出允許防火牆規則。

設定混合式連線

如果外部金鑰管理工具在地端部署環境中執行,請使用混合雲連線解決方案,將虛擬私有雲與地端部署網路連線。設定連線能力後,請按照下列額外步驟操作:

  1. 啟用 Private Google Access

    外部金鑰管理工具必須驗證每項要求中的 OIDC 權杖。如要驗證權杖,外部金鑰管理工具必須從 www.googleapis.com 網域名稱擷取 OAuth2 公開金鑰。如果外部金鑰管理工具在地端部署環境中執行,且無法透過網際網路存取,請按照這篇文章的指示,為地端部署主機設定私人 Google 存取權。

  2. IP 範圍 35.199.192.0/19 的防火牆設定

    Cloud EKM 的要求來自這個範圍。設定地端部署網路防火牆或類似設備,允許 TCP 流量傳送至外部金鑰管理工具監聽的通訊埠。

  3. 確認虛擬私有雲有傳回 IP 範圍 35.199.192.0/19 的路由

    地端部署網路必須有 35.199.192.0/19 目的地的路由。想瞭解如何遵循這項規定,請參閱「地端部署目標的傳回路由策略」一節。

地端部署目標的傳回路徑策略

  • 如果是使用靜態轉送的 Cloud VPN 通道,請在地端部署網路中手動建立路由,將目的地設為 35.199.192.0/19,下一個躍點設為 Cloud VPN 通道。如果是使用策略路由的 Cloud VPN 通道,請設定 Cloud VPN 的本機流量選取器和地端部署 VPN 閘道的遠端流量選取器,加入 35.199.192.0/19。

  • 如果 Cloud VPN 通道使用動態轉送或 Cloud Interconnect,請在管理通道或 VLAN 連結的 Cloud Router 的 BGP 工作階段中,為 35.199.192.0/19 設定自訂 advertisement 模式。

設定外部金鑰管理工具

請按照 EKM 供應商的操作說明設定 EKM。

設定加密空間

如果您透過合作夥伴代管的 EKM 安排使用 Cloud EKM,合作夥伴會在佈建過程中為您完成這些步驟。

如果 EKM 供應商與 Cloud KMS 的 EKM 金鑰管理功能相容,則必須在 EKM 中執行下列設定步驟:

  • 在 EKM 中,為 Cloud KMS 代管資源建立加密空間。

  • 授予 Cloud KMS 服務帳戶存取加密空間和其中建立的金鑰。

  • 設定金鑰存取依據政策,定義應允許或拒絕哪些存取依據。

每個步驟的確切程序取決於您的 EKM。詳情請參閱 EKM 供應商的說明文件。

建立 Service Directory 服務端點

在虛擬私有雲專案中建立及設定 Service Directory 服務端點,指向外部金鑰管理工具的私人 IP 位址和通訊埠。如果多個 EKM 副本前方有負載平衡器,請使用負載平衡器的 IP 位址和通訊埠。確認 Service Directory 服務端點的網路欄位已填入內容。

授權 Cloud EKM 存取虛擬私有雲

對於每個金鑰專案,您必須授權 Cloud EKM 代表該專案存取虛擬私有雲,即使金鑰專案和虛擬私有雲專案相同也一樣。授權存取權後,金鑰專案中的金鑰就能使用虛擬私有雲專案中的虛擬私有雲。

  1. 使用 gcloud CLI,確保專案有 Cloud EKM 服務帳戶。

    gcloud beta services identity create \
        --service=cloudkms.googleapis.com \
        --project=KEY_PROJECT_ID
    
  2. 使用 gcloud CLI,將虛擬私有雲專案中的 servicedirectory.viewer 和 servicedirectory.pscAuthorizedService 授予 service-KEY_PROJECT_NUMBER@gcp-sa-ekms.。如要瞭解如何取得專案 ID 和編號,請參閱「建立及管理專案」。

    gcloud projects add-iam-policy-binding VPC_PROJECT_ID \
        --member=serviceAccount:service-KEY_PROJECT_NUMBER@gcp-sa-ekms. \
        --role=roles/servicedirectory.viewer
    
    gcloud projects add-iam-policy-binding VPC_PROJECT_ID \
        --member=serviceAccount:service-KEY_PROJECT_NUMBER@gcp-sa-ekms. \
        --role=roles/servicedirectory.pscAuthorizedService
    

建立 EKM 連線

如要將外部金鑰管理工具連線至 Cloud EKM,請在金鑰專案中建立 EKM 連線。

控制台

  1. 前往 Google Cloud 控制台的「KMS infrastructure」(KMS 基礎架構) 頁面。

    前往 KMS 基礎架構

  2. 按一下「 建立連線」。

  3. 在「Connection name」(連線名稱) 部分,輸入連線名稱。

  4. 在「Region」(區域) 部分,選取 EKM 連線的位置。與這個連線相關聯的任何 Cloud KMS 金鑰,都必須與連線位於相同位置。

  5. 在「Service resource ID (self_link)」(服務資源 ID (self_link)) 欄位中,輸入在「建立 Service Directory 服務端點」一節中建立的 Service Directory 服務值。服務目錄服務必須與連線位於相同位置。

  6. 在「Hostname」(主機名稱) 欄位中,新增外部金鑰管理工具的主機名稱。

  7. 在「Certificates」(憑證) 中,按一下「Add certificate」(新增憑證),為外部金鑰管理工具上傳一或多個 X.509 伺服器憑證。憑證必須採用 DER 格式。

  8. 在「EKM management mode」(EKM 管理模式) 部分,選取「Manual」(手動),即可將 EKM 連線用於手動管理的外部金鑰;選取「Cloud KMS」,則可將 EKM 連線用於協調的外部金鑰。

  9. 如果您在「EKM management mode」(EKM 管理模式) 選取「Cloud KMS」,請在「Crypto space path」(加密空間路徑) 欄位中,輸入 EKM 提供的加密空間路徑。

  10. 選用。如要將 EKM 連線設為這項專案和位置的預設連線,請勾選「Set connection as the default」(設為預設連線) 核取方塊。如果目前有其他 EKM 連線設為這項專案和位置的預設連線,這個 EKM 連線會取代現有的預設連線。

  11. 點選「建立」。

gcloud

如要在指令列使用 Cloud KMS,請先安裝或升級至最新版 Google Cloud CLI。

如要為手動管理的外部金鑰建立 EKM 連線,請執行下列指令:

gcloud beta kms ekm-connections create EKM_CONNECTION \
    --location LOCATION \
    --service-directory-service SERVICE_DIRECTORY_SERVICE \
    --hostname HOSTNAME \
    --server-certificates-files SERVER_CERTIFICATE_FILES \
    --key-management-mode manual

更改下列內容:

  • EKM_CONNECTION:EKM 連線名稱。
  • LOCATION:要建立 EKM 連線的 Cloud KMS 位置。與這個連線相關聯的任何 Cloud KMS 金鑰,都必須與連線位於相同位置。
  • SERVICE_DIRECTORY_SERVICE:連線的 Service Directory 服務資源 ID。
  • HOSTNAME:外部金鑰管理工具的主機名稱。
  • SERVER_CERTIFICATE_FILES:以半形逗號分隔的檔案清單,其中包含外部金鑰管理工具的 X.509 伺服器憑證。憑證必須採用 DER 格式。

如要為協調的外部金鑰建立 EKM 連線,請執行下列指令:

gcloud beta kms ekm-connections create EKM_CONNECTION \
    --location LOCATION \
    --service-directory-service SERVICE_DIRECTORY_SERVICE \
    --hostname HOSTNAME \
    --server-certificates-files SERVER_CERTIFICATE_FILES \
    --key-management-mode cloud-kms \
    --crypto-space-path CRYPTO_SPACE_PATH

更改下列內容:

  • EKM_CONNECTION:EKM 連線名稱。
  • LOCATION:要建立 EKM 連線的 Cloud KMS 位置。與這個連線相關聯的任何 Cloud KMS 金鑰,都必須與連線位於相同位置。
  • SERVICE_DIRECTORY_SERVICE:連線的 Service Directory 服務資源 ID。
  • HOSTNAME:外部金鑰管理工具的主機名稱。
  • SERVER_CERTIFICATE_FILES:以半形逗號分隔的檔案清單,其中包含外部金鑰管理工具的 X.509 伺服器憑證。憑證必須採用 DER 格式。
  • CRYPTO_SPACE_PATH:EKM 供應商提供的加密空間路徑。

如要瞭解所有旗標和可能的值,請執行含有 --help 旗標的指令。

API

這些範例使用 curl 做為 HTTP 用戶端,示範如何使用 API。如要進一步瞭解存取控管,請參閱「存取 Cloud KMS API」。

如要為協調的外部金鑰建立 EKM 連線,請執行下列指令:

curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/ekmConnections" \
    --request "POST" \
    --header "authorization: Bearer TOKEN" \
    --header "content-type: application/json" \
    --header "x-goog-user-project: PROJECT_ID" \
    --data '{
      "name": "EKM_CONNECTION",
      "serviceResolvers": [
        {
          "serviceDirectoryService": "SERVICE_DIRECTORY_SERVICE",
          "hostname": "HOSTNAME",
          "serverCertificates": [
            {
              SERVER_CERTIFICATES
            }
          ]
        }
      ]
      "keyManagementMode": "CLOUD_KMS",
      "cryptoSpacePath": "CRYPTO_SPACE_PATH"
    }'

更改下列內容:

  • PROJECT_ID:要建立 EKM 連線的專案 ID。
  • LOCATION:要建立 EKM 連線的 Cloud KMS。
  • EKM_CONNECTION:EKM 連線的名稱。
  • SERVER_CERTIFICATES:最多 10 個 Certificate 物件的清單,代表分葉伺服器憑證。
  • HOSTNAME:外部金鑰管理工具的主機名稱。
  • CRYPTO_SPACE_PATH:EKM 供應商提供的加密空間路徑。

如要為手動管理的外部金鑰建立 EKM 連線,請執行下列指令:

curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/ekmConnections" \
    --request "POST" \
    --header "authorization: Bearer TOKEN" \
    --header "content-type: application/json" \
    --header "x-goog-user-project: PROJECT_ID" \
    --data '{
      "name": "EKM_CONNECTION",
      "serviceResolvers": [
        {
          "serviceDirectoryService": "SERVICE_DIRECTORY_SERVICE",
          "hostname": "HOSTNAME",
          "serverCertificates": [
            {
              SERVER_CERTIFICATES
            }
          ]
        }
      ]
    }'

更改下列內容:

  • PROJECT_ID:要建立 EKM 連線的專案 ID。
  • LOCATION:要建立 EKM 連線的 Cloud KMS。
  • EKM_CONNECTION:EKM 連線的名稱。
  • SERVER_CERTIFICATES:最多 10 個 Certificate 物件的清單,代表分葉伺服器憑證。
  • HOSTNAME:外部金鑰管理工具的主機名稱。

詳情請參閱 EkmConnection.create API 說明文件。

憑證狀態

上傳 EKM 連線的憑證後,您可以前往 KMS 基礎架構頁面,查看 EKM 連線的整體憑證狀態,以及各個憑證的狀態。

在每個連線的「Certificate status」(憑證狀態) 欄中,會顯示 EKM 連線的整體狀態。如果 EKM 連線的狀態不是「Active」(有效),建議您更新 EKM 連線的憑證。

EKM 連線和個別憑證可能會有下列狀態:

  • 有效:憑證有效,且尚未接近到期日。
  • 30 天內到期:憑證有效,但到期日在未來 30 天內。
  • 已過期:憑證已過期,不再有效。建議您更新所有過期的憑證。
  • 尚未生效:憑證尚未啟用。如果憑證的開始日期是未來日期,就可能發生這種情況。

如果憑證已失效,請在Google Cloud 控制台更新 EKM 連線。

控制台

  1. 前往 Google Cloud 控制台的「KMS infrastructure」(KMS 基礎架構) 頁面。

    前往 KMS 基礎架構

  2. 按一下要更新憑證的 EKM over VPC 連線名稱。

  3. 按一下「編輯連線」。

  4. 按一下「Add certificate」(新增憑證),為外部金鑰管理工具上傳一或多個 X.509 伺服器憑證。憑證必須採用 DER 格式。

  5. 移除過期的憑證。將滑鼠游標懸停在過期的憑證上,然後選取右側的「Delete」(刪除) 圖示。

  6. 按一下「Update connection」(更新連線),更新透過虛擬私有雲連至 EKM 的連線。

將 EKM 連線設為預設

您可以將 EKM 連線設為特定專案和位置的預設連線。為專案和位置設定預設 EKM 連線後,在該位置的金鑰環中建立的新 Cloud EKM by VPC 金鑰,會使用指定的 EKM 連線,除非選取其他 EKM 連線。

如要將 EKM 連線設為專案和位置的預設連線,請完成下列步驟:

控制台

  1. 前往 Google Cloud 控制台的「KMS infrastructure」(KMS 基礎架構) 頁面。

    前往 KMS 基礎架構

  2. 按一下要設為預設值的 EKM 連線。

  3. 按一下「編輯連線」。

  4. 在「Default connection」(預設連線) 下方,勾選「Set connection as the default for LOCATION」(將連線設為 LOCATION 的預設連線) 核取方塊。

  5. 按一下「Update connection」(更新連線)。

gcloud

gcloud kms ekm-config update
  --location=LOCATION
  --default-ekm-connection=projects/PROJECT_ID/locations/LOCATION/ekmConnections/DEFAULT_EKM_CONNECTION

更改下列內容:

  • LOCATION:要設定預設 EKM 連線的 Cloud KMS。
  • PROJECT_ID:要設定預設 EKM 連線的專案名稱。
  • DEFAULT_EKM_CONNECTION:要設為這個位置預設值的 EKM 連線名稱。EKM 連線的位置必須與 LOCATION 中指定的位置相符。

REST

如要設定位置的預設 EKM 連線,請使用 EkmConfig.patch 方法:

curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/ekmConfig" \
    --request "PATCH" \
    --header "authorization: Bearer TOKEN" \
    --header "content-type: application/json" \
    --data '{"defaultEkmConnection": "projects/PROJECT_ID/locations/LOCATION/ekmConnections/DEFAULT_EKM_CONNECTION"}'

更改下列內容:

  • PROJECT_ID:要設定預設 EKM 連線的專案 ID。
  • LOCATION:要設定預設 EKM 連線的 Cloud KMS。
  • DEFAULT_EKM_CONNECTION:要設為這個位置預設值的 EKM 連線名稱。EKM 連線的位置必須與 LOCATION 中指定的位置相符。

如果這個位置已有其他 EKM 連線設為預設,所選 EKM 連線會取代該連線,成為預設連線。特定專案和位置只能有一個預設 EKM 連線。

後續步驟