關於 Apigee 加密金鑰

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

查看 Apigee Edge 說明文件。

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

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

鍵類型 建立時間 說明
控制平面加密金鑰

Google Cloud 主控台:

指令列介面 (CLI):

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

加密 API 代理程式、目標伺服器、信任存放區和 Keystore、分析資料,以及跨執行階段共用的任何其他內容。

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

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

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

    Updated IAM policy for key [runtime].
    bindings:
    - members:
    - serviceAccount:[email protected]
    role: roles/cloudkms.cryptoKeyEncrypterDecrypter
    etag: BwWqgEuCuwk=
    version: 1

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

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

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

    如要確認金鑰是否已繫結至 Apigee Service Agent,請按照下列步驟操作:

    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」。