本頁面適用於 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 HSM 和 Cloud EKM 的 Cloud KMS 位置。Google 建議您在建立此金鑰時,使用
多區域位置 (例如 使用 資料居留地時,執行階段資料庫加密金鑰的位置應位於控制平面位置內。 |
磁碟加密金鑰 |
Google Cloud 主控台: 指令列介面 (CLI): |
在將執行階段例項資料寫入磁碟前加密。 加密的資料類型包括 Key Management System (KMS)、鍵/值對應 (KVM)、配額定義、桶和計數器,以及所有快取資料。KMS 資料包括 API 產品、開發人員、開發人員應用程式、OAuth 權杖 (包括存取權杖、重新整理權杖和授權碼) 和 API 金鑰。 這個金鑰位於與執行階段執行個體相同的區域;建立新金鑰時,請將金鑰位置與執行階段執行個體的位置相符。 每個執行個體/區域組合都有專屬的磁碟加密金鑰。 |
重點
建立磁碟和執行階段資料庫加密金鑰時,請注意下列事項:
- Apigee 執行階段資料庫加密金鑰的位置支援所有支援 Cloud HSM 和 Cloud 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 服務代理程式使用新金鑰的存取權。為控制層 (如果使用資料落地)、執行階段資料庫和執行階段磁碟建立鑰匙圈和金鑰。
-
使用
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。
執行階段磁碟
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
-
使用
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。
-
使用
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 HSM 和 Cloud 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」。