使用客戶自行管理的加密金鑰 (CMEK)

本頁說明客戶管理的加密金鑰 (CMEK) 如何與 Datastream 搭配運作。

CMEK 是否適合您?

CMEK 適用於擁有機密或管制資料,且必須管理加密金鑰的機構。

Google 管理的加密金鑰與客戶管理的加密金鑰

CMEK 功能可讓您將自有的加密編譯金鑰用於 Datastream 中的靜態資料。新增 CMEK 後,每當進行 API 呼叫時,Datastream 就會使用您的金鑰存取資料。

Datastream 會使用 Google 代管的資料加密金鑰 (DEK) 和金鑰加密金鑰 (KEK) 加密。加密等級分為兩種:

  1. DEK 會加密資料。
  2. KEK 會加密 DEK。

Datastream 會將加密的 DEK 與加密資料一併儲存,而 Google 則會管理 Google KEK。使用 CMEK 時,您會建立金鑰來包裝 Google KEK。您可以使用 CMEK 建立、撤銷及刪除 KEK。

包括軟體、硬體和外部金鑰在內的 CMEK,全都是透過 Cloud Key Management Service (KMS) API 管理。

哪些位置支援啟用 CMEK 的 Datastream 串流?

CMEK 適用於所有 Datastream 位置

瞭解服務帳戶

如果 Datastream 串流已啟用 CMEK,您必須使用服務帳戶,向 Cloud Key Management Service 要求金鑰存取權。

如要在專案中使用 CMEK,您必須具備服務帳戶,並將金鑰存取權授予該服務帳戶。服務帳戶必須位於專案內。服務帳戶會顯示在所有區域中。

如果您使用控制台建立串流,首次選擇「客戶管理的金鑰」選項時,Datastream 會自動建立服務帳戶 (如果服務帳戶尚不存在)。Datastream 自動建立服務帳戶時,您不需要在使用者帳戶中具備特殊權限。

瞭解金鑰

Cloud Key Management Service 中,您需要建立含有加密金鑰的金鑰環,並設定位置。在 Datastream 中建立新串流時,請選取這個金鑰來加密串流。

建立使用 CMEK 的新串流時,您需要知道金鑰 ID 和金鑰區域。新串流必須與串流相關聯的 CMEK 位於相同區域。您可以為金鑰和串流建立一個專案,也可以分別建立專案。

CMEK 採用下列格式:

projects/[CMEK_ENABLED_PROJECT]/locations/[REGION]/keyRings/[RING_NAME]/cryptoKeys/[KEYNAME]

如果 Datastream 無法存取金鑰 (例如您停用金鑰版本),Datastream 會將串流的狀態變更為 FAILED,並顯示相關聯的錯誤訊息。解決與錯誤訊息相關聯的問題,讓金鑰再次可存取後,Datastream 就會自動恢復串流。

外部金鑰管理員

您可以將儲存在外部金鑰管理工具 (例如 Fortanix、Ionic 或 Thales) 中的金鑰做為 CMEK。如要瞭解如何搭配使用外部金鑰和 Cloud Key Management Service,請參閱 Cloud External Key Manager

如何永久禁止存取以 CMEK 加密的資料?

您可能需要永久銷毀以 CMEK 加密的資料。如要這麼做,請銷毀 CMEK 版本。您無法刪除金鑰環或金鑰,但可以刪除金鑰的金鑰版本。

限制

使用 CMEK 時,請注意下列限制:

  • 您無法更新執行中串流的 CMEK。

  • 雖然您可以使用 CMEK 加密來源資料庫中的資料列,但無法使用這些金鑰加密串流中繼資料,例如串流 ID、來源資料庫的 IP 位址、來源資料庫表格的名稱等。

使用 CMEK

瞭解 CMEK 後,您就可以設定 CMEK 的服務帳戶和金鑰。此外,您也會瞭解如何設定 Datastream 以使用 CMEK。

事前準備

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  5. Verify that billing is enabled for your Google Cloud project.

  6. 安裝並初始化 Cloud SDK。
  7. 確認您的使用者帳戶已獲派 Datastream 管理員角色。

    前往「IAM」頁面

  8. Enable the Cloud Key Management Service API.

    Enable the API

  9. 啟用 Datastream API。

    啟用 API

  10. 使用 CMEK 在 Datastream 中建立串流的工作流程

    1. gcloud 和 API 使用者專用:請務必為每個需要 CMEK 的專案建立服務帳戶。如果沒有,請參閱這篇文章,瞭解如何建立服務帳戶。
    2. 建立金鑰環和金鑰,並為每個金鑰設定位置。位置為 Google Cloud 區域。
    3. 僅限 gcloud 和 API 使用者: 授予服務帳戶金鑰存取權
    4. 複製或記下金鑰的 ID (KMS_KEY_ID) 和位置,以及金鑰環的 ID (KMS_KEYRING_ID)。將金鑰存取權授予服務帳戶時,您需要這項資訊。
    5. 前往專案並在 Datastream 中建立串流,然後選取下列選項:
      1. 與 CMEK 相同的地點
      2. CMEK 設定
      3. CMEK ID

    Datastream 中的串流現在已啟用 CMEK。

    建立服務帳戶

    您需要為每個需要 CMEK 的專案建立服務帳戶。

    如要讓使用者管理服務帳戶,請先為使用者授予以下其中一種角色:

    • 服務帳戶使用者 (roles/iam.serviceAccountUser):包含列出服務帳戶、取得服務帳戶詳細資料,以及模擬服務帳戶的權限。
    • 服務帳戶管理員 (roles/iam.serviceAccountAdmin):包括列出服務帳戶及取得服務帳戶詳細資料的權限。此外,還包括建立、更新及刪除服務帳戶的權限,以及檢視或變更服務帳戶 Datastream 政策的權限。

    目前您只能使用 gcloud 指令,為 CMEK 建立所需的服務帳戶類型。如果您使用控制台,Datastream 會自動為您建立這個服務帳戶。

    如要使用 gcloud 建立服務帳戶,請執行下列指令:

    gcloud beta services identity create \
    --service=datastream.googleapis.com \
    --project=PROJECT_ID

    上一個指令會傳回服務帳戶名稱。您會在「授予金鑰服務帳戶存取權」程序中使用這個服務帳戶名稱。

    建立金鑰

    您可以在與 Datastream 中的串流相同的 Google Cloud 專案中建立金鑰,也可以在其他使用者專案中建立金鑰。Cloud KMS 金鑰環位置必須與您要建立串流的區域相符。多區域或全域金鑰不適用。如果區域不相符,就無法建立串流。

    如何建立 Cloud KMS 金鑰:

    控制台

    1. 前往 Google Cloud 控制台的「加密金鑰」頁面。
    2. 按一下 [Create key ring] (建立金鑰環)
    3. 新增「Key ring name」(金鑰環名稱)。請記下這個名稱,因為您需要這個名稱,才能授予金鑰服務帳戶存取權。
    4. 新增金鑰環位置
    5. 按一下「建立」,「建立金鑰」頁面隨即開啟。
    6. 新增金鑰名稱
    7. 選取「Purpose」(用途) (對稱或非對稱)。
    8. 選取「輪替週期」和「開始日期」
    9. 點選「建立」
    10. 在「金鑰」表格中,按一下最後一欄的三點圖示,然後選取「複製資源 ID」或記下該 ID。這是 KMS_KEY_ID。授予金鑰服務帳戶存取權時,需要 KMS_KEY_ID

    gcloud

    1. 建立新的金鑰環。
      gcloud kms keyrings create KMS_KEYRING_ID \
      --location=GCP_REGION
        
      請記下這個名稱,因為您需要這個名稱,才能授予金鑰服務帳戶的存取權。
    2. 在金鑰環上建立金鑰。
      gcloud kms keys create KMS_KEY_ID \
      --location=GCP_REGION \
      --keyring=KMS_KEYRING_ID \
      --purpose=encryption
        
      請記下這個名稱,因為您需要這個名稱,才能授予金鑰服務帳戶的存取權。

    授予金鑰服務帳戶存取權

    如果您使用 gcloud 或 API,才需要執行這項程序。

    如要授予服務帳戶存取權,請使用下列程式碼:

    gcloud kms keys add-iam-policy-binding KMS_KEY_ID \
    --location=GCP_REGION \
    --keyring=KMS_KEYRING_ID \
    --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-datastream.iam.gserviceaccount.com \
    --role=roles/cloudkms.cryptoKeyEncrypterDecrypter

    在 Datastream 中建立使用 CMEK 的串流

    在 Datastream 中建立串流時,您可以使用 CMEK 管理資料加密。

    後續步驟