關於 Apigee 加密金鑰

本頁內容適用於 Apigee,但不適用於 Apigee Hybrid

查看 Apigee Edge 說明文件。

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

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

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

Google Cloud 主控台:

指令列介面 (CLI):

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

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

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

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

API 消費者資料加密金鑰

Google Cloud 主控台:

指令列介面 (CLI):

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

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

執行階段資料庫加密金鑰

Google Cloud 主控台:

指令列介面 (CLI):

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

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

執行階段資料庫加密金鑰支援所有支援 Cloud HSMCloud EKM 的 Cloud KMS 位置。Google 建議您建立這個金鑰時,使用 多區域位置 (例如 useurope) 或 雙區域位置 (eur5nam4)。

使用 資料存放位置時,執行階段資料庫加密金鑰的位置應位於控制平面位置內。

磁碟加密金鑰

Google Cloud 主控台:

指令列介面 (CLI):

在將執行階段執行個體資料寫入磁碟前加密。

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

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

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

重點

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

  • Apigee 執行階段資料庫加密金鑰的位置支援所有支援 Cloud HSMCloud EKM 的 Cloud KMS 位置。
  • 磁碟加密金鑰的位置必須與使用該金鑰的執行階段執行個體位置相符。
  • 設定完成後,您就無法變更任一金鑰的位置。
  • 所有金鑰都必須位於金鑰環中。
  • 不同類型的金鑰必須位於不同的金鑰環中;磁碟加密金鑰不得與執行階段資料庫加密金鑰位於同一個金鑰環中。
  • 按鍵必須有 purpose。如果您使用指令列產生新金鑰,請將 purpose 設為 encryption。如果您使用 Google Cloud 控制台,請選擇「對稱式加密/解密」做為用途。
  • 索引鍵是由金鑰路徑定義,使用下列模式:
    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:專案 ID。 Google Cloud
    • 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:專案 ID。 Google Cloud

    Apigee 加密金鑰的位置支援所有支援 Cloud HSMCloud 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:專案 ID。 Google Cloud

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

    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:專案 ID。 Google Cloud
    • 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:專案 ID。 Google Cloud

    執行階段磁碟

    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:專案 ID。 Google Cloud

    這項指令會建立金鑰並新增至金鑰環。

    如要參照金鑰,請使用金鑰 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.iam.gserviceaccount.com" \
    --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.iam.gserviceaccount.com" \
    --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:專案 ID。 Google Cloud
    • 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.iam.gserviceaccount.com \
      --role roles/cloudkms.cryptoKeyEncrypterDecrypter \
      --project PROJECT_ID

    更改下列內容:

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

    執行階段磁碟

    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.iam.gserviceaccount.com \
      --role roles/cloudkms.cryptoKeyEncrypterDecrypter \
      --project PROJECT_ID

    更改下列內容:

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

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

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

    Updated IAM policy for key [runtime].
    bindings:
    - members:
    - serviceAccount:service-1234567890@gcp-sa-apigee.iam.gserviceaccount.com
    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 HSMCloud EKM 的任何 Cloud KMS 位置。使用者介面不會讓您選擇金鑰的其他位置,因此會與您在金鑰環中選擇的位置相符。
  • 建立金鑰後,請在「加密編譯金鑰」窗格中,按一下金鑰旁的「更多」,然後選取「複製資源名稱」,取得金鑰路徑。

取得金鑰 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」。