關於 Apigee 加密金鑰

本頁面適用於 Apigee,但不適用於 Apigee Hybrid。

查看 Apigee Edge 說明文件。

本節說明加密金鑰的類型和建立方式。

如要瞭解如何監控 EKM 健康狀態,請參閱「EKM 健康狀態監控」。

在 Apigee 設定程序中,您會產生下列 Cloud Key Management Service 加密金鑰:

金鑰類型 建立時間 說明
控制層加密金鑰

Google Cloud 控制台:

指令列介面 (CLI):

使用 資料落地時,Apigee 會使用這組金鑰,加密儲存在租戶專案 BigQuery 中的 Analytics 資料。

加密 API Proxy、目標伺服器、信任存放區和 KeyStore、分析資料,以及在執行階段之間共用的任何其他內容。

Apigee 會要求您提供兩個控制層 CMEK 金鑰。這個金鑰和 API 消費者資料加密金鑰。

控制層加密金鑰的位置應與控制層位置相符。

API 消費者資料加密金鑰

Google Cloud 控制台:

指令列介面 (CLI):

使用 資料落地時,Apigee 需要單一區域金鑰,以及 控制層加密金鑰,用於僅在單一區域提供的服務。例如 Dataflow 和 Cloud SQL。

API 消費者資料加密金鑰的位置應位於控制層位置。

執行階段資料庫加密金鑰

Google Cloud 控制台:

指令列介面 (CLI):

加密 KVM、快取和用戶端密鑰等應用程式資料,然後儲存在資料庫中。

每個組織都有一個執行階段資料庫加密金鑰,組織中的所有執行個體/區域都會共用同一個執行階段資料庫加密金鑰。

執行階段資料庫加密金鑰支援所有支援 Cloud HSM 和 Cloud EKM 的 Cloud KMS 位置。建立這組金鑰時,Google 建議使用 多區域位置 (例如 us 或 europe) 或 雙區域位置 (eur5、nam4)。

使用 資料落地時,執行階段資料庫加密金鑰的位置應位於控制層位置。

磁碟加密金鑰

Google Cloud 控制台:

指令列介面 (CLI):

執行階段執行個體資料會先加密,再寫入磁碟。

加密的資料類型包括金鑰管理系統 (KMS)、鍵/值對應 (KVM)、配額定義、值區和計數器,以及所有快取資料。KMS 資料包括 API 產品、開發人員、開發人員應用程式、OAuth 權杖 (包括存取權杖、更新權杖和授權碼) 和 API 金鑰。

這個金鑰與執行階段執行個體位於相同區域。建立新金鑰時,請將金鑰位置設為執行階段執行個體的位置。

每個執行個體/區域組合都有專屬的磁碟加密金鑰。

重點

建立磁碟和執行階段資料庫加密金鑰時,請注意下列事項:

  • Apigee 執行階段資料庫加密金鑰的位置支援所有支援 Cloud HSM 和 Cloud EKM 的 Cloud KMS 位置。
  • 磁碟加密金鑰的位置必須與使用該金鑰的執行階段執行個體位置相符。
  • 設定後,您就無法變更任一金鑰的位置。
  • 所有金鑰都必須位於金鑰環中。
  • 不同類型的金鑰必須位於不同的金鑰環中;磁碟加密金鑰不得與執行階段資料庫加密金鑰位於同一個金鑰環中。
  • 金鑰必須有 purpose。如果您使用指令列產生新金鑰,請將 purpose 設為 encryption。如果使用 Google Cloud 控制台,請選擇「Symmetric encrypt/decrypt」(對稱式加密/解密) 做為用途。
  • 金鑰是由金鑰路徑定義,其模式如下:
    projects/PROJECT_ID/locations/KEY_LOCATION/keyRings/KEYRING_NAME/cryptoKeys/KEY_NAME

列出現有金鑰

如果您已為 Apigee 建立新的 Cloud KMS 加密金鑰,可以在設定期間使用這些金鑰,而不必建立新金鑰。

如要列出金鑰環中的所有 KMS 金鑰,請按照下列步驟操作:

執行 gcloud kms keys list 指令:

gcloud kms keys list --keyring KEY_RING_NAME --location KEY_RING_LOCATION

更改下列內容:

  • KEY_RING_NAME:金鑰環的名稱,例如:my-key-ring。
  • KEY_RING_LOCATION:金鑰環的實體位置,例如 us-west1。

或者,您也可以 在 Google Cloud 控制台中查看金鑰。

在指令列產生新金鑰

您可以在指令列或 Google Cloud 控制台中建立金鑰環和金鑰。

每種金鑰都必須有專屬的金鑰環。舉例來說,磁碟加密金鑰可以儲存在一個金鑰環中,但執行階段資料庫加密金鑰必須儲存在另一個金鑰環中。

下列步驟說明如何建立金鑰環和金鑰,以及如何授予 Apigee 服務代理程式使用新金鑰的權限。為控制層 (如果使用資料落地)、執行階段資料庫和執行階段磁碟建立金鑰環和金鑰。

  1. 使用 gcloud kms keyrings create 指令建立新的金鑰環:

    控制層

    啟用 資料落地功能後,請為控制層建立金鑰環,並為消費者資料區域建立另一個金鑰環。

    gcloud kms keyrings create CONTROL_PLANE_KEY_RING_NAME \
    --location CONTROL_PLANE_LOCATION \
    --project PROJECT_ID
    gcloud kms keyrings create CONSUMER_DATA_KEY_RING_NAME \
    --location CONSUMER_DATA_REGION \
    --project PROJECT_ID

    更改下列內容:

    • CONTROL_PLANE_KEY_RING_NAME:控制層金鑰環名稱。
    • CONTROL_PLANE_LOCATION:Apigee 控制層資料的實體儲存位置。
    • PROJECT_ID: Google Cloud 專案 ID。
    • CONSUMER_DATA_KEY_RING_NAME:消費者資料金鑰環名稱。
    • CONSUMER_DATA_REGION:控制層區域的子區域。您必須同時指定 CONTROL_PLANE_LOCATION 和 CONSUMER_DATA_REGION。

    執行階段資料庫

    gcloud kms keyrings create RUNTIMEDB_KEY_RING_NAME \
      --location RUNTIMEDB_KEY_LOCATION \
      --project PROJECT_ID

    更改下列內容:

    • RUNTIMEDB_KEY_RING_NAME:要建立的資料庫金鑰環名稱。
    • RUNTIMEDB_KEY_LOCATION:資料庫金鑰環的實體位置。
    • PROJECT_ID: Google Cloud 專案 ID。

    Apigee 加密金鑰的位置支援所有支援 Cloud HSM 和 Cloud EKM 的 Cloud KMS 位置。

    執行階段磁碟

    gcloud kms keyrings create RUNTIMEDISK_KEY_RING_NAME \
      --location RUNTIMEDISK_KEY_LOCATION \
      --project PROJECT_ID

    更改下列內容:

    • RUNTIMEDISK_KEY_RING_NAME:要建立的磁碟金鑰環名稱。
    • RUNTIMEDISK_KEY_LOCATION:磁碟金鑰環的實體位置。
    • PROJECT_ID: Google Cloud 專案 ID。

    確認磁碟金鑰環的位置與執行個體相同。每個執行個體和金鑰環都應有自己的位置。

    gcloud kms keyrings list \
    --location  \
    --project $PROJECT_ID

    gcloud kms keyrings describe $DISK_KEY_RING_NAME \
    --location  \
    --project $PROJECT_ID
  2. 金鑰環名稱不得與貴組織的其他金鑰環重複。如果您建立其他區域,這些區域的金鑰環名稱不得與現有的金鑰環名稱相同。

  3. 使用 kms keys create 指令建立金鑰:

    控制層

    啟用 資料落地功能後,請為控制層建立金鑰環,並為消費者資料區域建立另一個金鑰環。

    gcloud kms keys create CONTROL_PLANE_KEY_NAME \
    --keyring CONTROL_PLANE_KEY_RING_NAME \
    --location CONTROL_PLANE_LOCATION \
    --purpose "encryption" \
    --project PROJECT_ID
    gcloud kms keys create CONSUMER_DATA_KEY_NAME \
    --keyring CONSUMER_DATA_KEY_RING_NAME \
    --location CONSUMER_DATA_REGION \
    --purpose "encryption" \
    --project PROJECT_ID

    更改下列內容:

    • CONTROL_PLANE_KEY_NAME:控制層金鑰名稱。
    • CONTROL_PLANE_KEY_RING_NAME:控制層金鑰環名稱。
    • CONTROL_PLANE_LOCATION:Apigee 控制層資料的實體儲存位置。
    • PROJECT_ID: Google Cloud 專案 ID。
    • CONSUMER_DATA_KEY_NAME:消費者資料金鑰名稱。
    • CONSUMER_DATA_KEY_RING_NAME:消費者資料金鑰環名稱。
    • CONSUMER_DATA_REGION:控制層區域的子區域。您必須同時指定 CONTROL_PLANE_LOCATION 和 CONSUMER_DATA_REGION。

    執行階段資料庫

    gcloud kms keys create RUNTIMEDB_KEY_NAME \
      --keyring RUNTIMEDB_KEY_RING_NAME \
      --location RUNTIMEDB_KEY_LOCATION \
      --purpose "encryption" \
      --project PROJECT_ID

    更改下列內容:

    • RUNTIMEDB_KEY_NAME:要建立的資料庫金鑰名稱。
    • RUNTIMEDB_KEY_RING_NAME:要建立的資料庫金鑰環名稱。
    • RUNTIMEDB_KEY_LOCATION:資料庫金鑰環的實體位置。
    • PROJECT_ID: Google Cloud 專案 ID。

    執行階段磁碟

    gcloud kms keys create RUNTIMEDISK_KEY_NAME \
      --keyring RUNTIMEDISK_KEY_RING_NAME \
      --location RUNTIMEDISK_KEY_LOCATION \
      --purpose "encryption" \
      --project PROJECT_ID

    更改下列內容:

    • RUNTIMEDISK_KEY_NAME:要建立的磁碟金鑰名稱。
    • RUNTIMEDISK_KEY_RING_NAME:要建立的磁碟金鑰環名稱。
    • RUNTIMEDISK_KEY_LOCATION:磁碟金鑰環的實體位置。
    • PROJECT_ID: Google Cloud 專案 ID。

    這個指令會建立金鑰,並將金鑰新增至金鑰環。

    參照金鑰時,請使用金鑰 ID。

  4. 使用 gcloud kms keys add-iam-policy-binding 指令,授予 Apigee 服務代理使用新金鑰的權限:

    控制層

    啟用 資料落地功能後,請為控制層建立一個金鑰環,並為消費者資料區域建立另一個金鑰環。

    gcloud kms keys add-iam-policy-binding CONTROL_PLANE_KEY_NAME \
    --location CONTROL_PLANE_LOCATION \
    --keyring CONTROL_PLANE_KEY_RING_NAME \
    --member "serviceAccount:service-PROJECT_NUMBER@gcp-sa-apigee." \
    --role roles/cloudkms.cryptoKeyEncrypterDecrypter \
    --project PROJECT_ID
    
    gcloud kms keys add-iam-policy-binding CONSUMER_DATA_KEY_NAME \
    --location CONSUMER_DATA_REGION \
    --keyring CONSUMER_DATA_KEY_RING_NAME \
    --member "serviceAccount:service-PROJECT_NUMBER@gcp-sa-apigee." \
    --role roles/cloudkms.cryptoKeyEncrypterDecrypter \
    --project PROJECT_ID
    

    更改下列內容:

    • CONTROL_PLANE_KEY_NAME:控制層金鑰名稱。
    • CONTROL_PLANE_LOCATION:Apigee 控制層資料的實體儲存位置。
    • CONTROL_PLANE_KEY_RING_NAME:控制層金鑰環名稱。
    • PROJECT_NUMBER: Google Cloud 專案編號。
    • PROJECT_ID: Google Cloud 專案 ID。
    • CONSUMER_DATA_KEY_NAME:消費者資料金鑰名稱。
    • CONSUMER_DATA_REGION:控制層區域的子區域。您必須同時指定 CONTROL_PLANE_LOCATION 和 CONSUMER_DATA_REGION。
    • CONSUMER_DATA_KEY_RING_NAME:消費者資料金鑰環名稱。

    執行階段資料庫

    gcloud kms keys add-iam-policy-binding RUNTIMEDB_KEY_NAME \
      --location RUNTIMEDB_KEY_LOCATION \
      --keyring RUNTIMEDB_KEY_RING_NAME \
      --member serviceAccount:service-PROJECT_NUMBER@gcp-sa-apigee. \
      --role roles/cloudkms.cryptoKeyEncrypterDecrypter \
      --project PROJECT_ID

    更改下列內容:

    • RUNTIMEDB_KEY_NAME:要建立的資料庫金鑰名稱。
    • RUNTIMEDB_KEY_RING_NAME:要建立的資料庫金鑰環名稱。
    • RUNTIMEDB_KEY_LOCATION:資料庫金鑰環的實體位置。
    • PROJECT_NUMBER: Google Cloud 專案編號。
    • PROJECT_ID: Google Cloud 專案 ID。

    執行階段磁碟

    gcloud kms keys add-iam-policy-binding RUNTIMEDISK_KEY_NAME \
      --location RUNTIMEDISK_KEY_LOCATION \
      --keyring RUNTIMEDISK_KEY_RING_NAME \
      --member serviceAccount:service-PROJECT_NUMBER@gcp-sa-apigee. \
      --role roles/cloudkms.cryptoKeyEncrypterDecrypter \
      --project PROJECT_ID

    更改下列內容:

    • RUNTIMEDISK_KEY_NAME:要建立的磁碟金鑰名稱。
    • RUNTIMEDISK_KEY_RING_NAME:要建立的磁碟金鑰環名稱。
    • RUNTIMEDISK_KEY_LOCATION:磁碟金鑰環的實體位置。
    • PROJECT_NUMBER: Google Cloud 專案編號。
    • PROJECT_ID: Google Cloud 專案 ID。

    這個指令會將金鑰繫結至 Apigee 服務代理。

    成功完成這項要求後,gcloud 會傳回類似下列內容的回應:

    Updated IAM policy for key [runtime].
    bindings:
    - members:
    - serviceAccount:service-1234567890@gcp-sa-apigee.
    role: roles/cloudkms.cryptoKeyEncrypterDecrypter
    etag: BwWqgEuCuwk=
    version: 1

    如果收到類似下方的錯誤訊息:

    INVALID_ARGUMENT: Role roles/cloudkms.cryptokms.cryptoKeyEncrypterDecrypter is not supported for this resource.

    請務必在服務帳戶電子郵件地址中使用專案編號,而非專案名稱。

    如要確認金鑰已繫結至 Apigee 服務代理,請按照下列步驟操作:

    gcloud kms keys get-iam-policy $DISK_KEY_NAME \
      --keyring $DISK_KEY_RING_NAME \
      --location  \
      --project $PROJECT_ID

    gcloud kms keys describe $DISK_KEY_NAME \
      --keyring $DISK_KEY_RING_NAME \
      --location  \
      --project $PROJECT_ID

使用 Google Cloud 控制台產生新金鑰

您可以按照「 建立對稱式加密金鑰」一文所述,使用控制台產生新金鑰。

使用控制台建立新金鑰時:

  • 針對執行階段資料庫加密金鑰,請將位置設為支援 Cloud HSM 和 Cloud EKM 的任何 Cloud KMS 位置。使用者介面不允許您選擇金鑰的其他位置,因此會與您在金鑰環中選擇的位置相符。
  • 建立金鑰後,請在「Cryptographic keys」(加密編譯金鑰) 窗格中,按一下金鑰旁的 「More」(更多),然後選取「Copy Resource Name」(複製資源名稱),即可取得金鑰路徑。

取得金鑰 ID

使用 Cloud KMS API 或 Google Cloud CLI 參照 Cloud Key Management Service 資源時,請使用資源 ID。您可以使用 gcloud kms keys list 指令取得金鑰 ID:

控制層

啟用 資料落地功能後,控制層和消費者資料區域會分別有一個金鑰環。

gcloud kms keys list \
--location=CONTROL_PLANE_LOCATION \
--keyring=CONTROL_PLANE_KEY_RING_NAME \
--project=PROJECT_ID

gcloud kms keys list \
--location=CONSUMER_DATA_REGION \
--keyring=CONSUMER_DATA_KEY_RING_NAME \
--project=PROJECT_ID

金鑰 ID 的語法如下 (類似檔案路徑):

projects/PROJECT_ID/locations/CONTROL_PLANE_LOCATION/keyRings/CONTROL_PLANE_KEY_RING_NAME/cryptoKeys/CONTROL_PLANE_KEY_NAME

執行階段資料庫

gcloud kms keys list \
--location=RUNTIMEDB_KEY_LOCATION \
--keyring=RUNTIMEDB_KEY_RING_NAME \
--project=PROJECT_ID

金鑰 ID 的語法如下 (類似檔案路徑):

projects/PROJECT_ID/locations/RUNTIMEDB_KEY_LOCATION/keyRings/RUNTIMEDB_KEY_RING_NAME/cryptoKeys/RUNTIMEDB_KEY_NAME

執行階段磁碟

gcloud kms keys list \
  --location=RUNTIMEDISK_KEY_LOCATION \
  --keyring=RUNTIMEDISK_KEY_RING_NAME \
  --project=PROJECT_ID

金鑰 ID 的語法如下 (類似檔案路徑):

projects/PROJECT_ID/locations/RUNTIMEDISK_KEY_LOCATION/keyRings/RUNTIMEDISK_KEY_RING_NAME/cryptoKeys/RUNTIMEDISK_KEY_NAME

例如:

NAME: projects/my-project/locations/us-west1/keyRings/my-key-ring/cryptoKeys/my-key
PURPOSE: ENCRYPT_DECRYPT
ALGORITHM: GOOGLE_SYMMETRIC_ENCRYPTION
PROTECTION_LEVEL: SOFTWARE
LABELS:
PRIMARY_ID: 1
PRIMARY_STATE: ENABLED

您也可以在 Google Cloud 控制台取得金鑰 ID。詳情請參閱「取得 Cloud KMS 資源 ID」。