本頁說明客戶管理的加密金鑰 (CMEK) 如何與 Datastream 搭配運作。
CMEK 是否適合您?
CMEK 適用於需要管理加密金鑰的機密或管制資料機構。
Google 管理的加密技術與客戶管理的加密技術
CMEK 功能可讓您將自有的加密編譯金鑰用於 Datastream 中的靜態資料。新增 CMEK 後,Datastream 每次發出 API 呼叫時,都會使用您的金鑰存取資料。
Datastream 會使用 Google 代管的資料加密金鑰 (DEK) 和金鑰加密金鑰 (KEK) 來加密 Datastream。加密等級分為兩種:
- DEK 會加密資料。
- KEK 會將 DEK 加密。
Datastream 會將加密的 DEK 與加密資料一併儲存,而 Google 則會管理 Google KEK。您可以使用 CMEK 建立包裝 Google KEK 的金鑰。您可以使用 CMEK 建立、撤銷及刪除 KEK。
軟體、硬體和外部金鑰等 CMEK 皆可透過 Cloud Key Management Service (KMS) API 管理。
哪些地區支援支援 CMEK 的 Datastream 串流?
所有 Datastream 位置都支援 CMEK。
瞭解服務帳戶
如果 Datastream 串流已啟用 CMEK,您必須使用服務帳戶向 Cloud Key Management Service 要求金鑰存取權。
如要在專案中使用 CMEK,您必須擁有服務帳戶,並且將金鑰存取權授予服務帳戶。服務帳戶必須位於專案內。服務帳戶會顯示在所有區域。
如果您使用控制台建立串流,當您首次選擇「Customer-managed key」(客戶管理金鑰) 選項時,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
,並顯示相關錯誤訊息。排除與錯誤訊息相關的任何問題後,系統就會重新啟用金鑰,並自動恢復串流。
外部金鑰管理員
您可以使用儲存在外部金鑰管理工具 (例如 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。
事前準備
- 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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
- 安裝並初始化 Cloud SDK。
- 請確認您已為使用者帳戶指派 Datastream 管理員角色。
-
Enable the Cloud Key Management Service API.
- 啟用 Datastream API。
- 僅限 gcloud 和 API 使用者:請確認每個需要 CMEK 的專案都有服務帳戶。如果沒有,請參閱這篇文章,瞭解如何建立服務帳戶。
- 建立金鑰環和金鑰,並設定每個金鑰的位置。位置為 Google Cloud 區域。
- 僅限 gcloud 和 API 使用者: 授予服務帳戶金鑰存取權。
- 複製或記下金鑰 ID (
KMS_KEY_ID
) 和位置,以及金鑰環的 ID (KMS_KEYRING_ID
)。您需要這項資訊,才能將金鑰存取權授予服務帳戶。 - 前往專案,並使用下列選項在 Datastream 中建立串流:
- 與 CMEK 相同的位置
- CMEK 設定
- CMEK ID
- 服務帳戶使用者 (
roles/iam.serviceAccountUser
):包含列出服務帳戶、取得服務帳戶詳細資料,以及模擬服務帳戶的權限。 - 服務帳戶管理員 (
roles/iam.serviceAccountAdmin
):包含列出服務帳戶及取得服務帳戶詳細資料的權限。也包括建立、更新及刪除服務帳戶的權限,以及在服務帳戶中查看或變更 Datastream 政策的權限。 - 前往 Google Cloud 控制台的「加密編譯金鑰」頁面。
- 按一下 [Create key ring] (建立金鑰環)。
- 新增「Key ring name」(金鑰環名稱)。請記下這個名稱,因為您需要在授予服務帳戶金鑰存取權時使用。
- 新增「金鑰環位置」。
- 按一下「建立」,「Create key」頁面隨即開啟。
- 新增「Key name」(金鑰名稱)。
- 選取「用途」 (對稱或非對稱)。
- 選取「輪替週期」和「開始日期」。
- 按一下 [建立]。
- 在「Keys」表格中,按一下最後一欄中的三點圖示,然後選取「Copy Resource ID」或將其記下來。這是
KMS_KEY_ID
。您必須具備KMS_KEY_ID
,才能將金鑰存取權授予服務帳戶。 - 建立新的金鑰環。
請記下這個名稱,因為您需要在授予服務帳戶金鑰存取權時使用。gcloud kms keyrings create KMS_KEYRING_ID \ --location=GCP_REGION
- 在金鑰環上建立金鑰。
請記下這個名稱,因為您需要在授予服務帳戶金鑰存取權時使用。gcloud kms keys create KMS_KEY_ID \ --location=GCP_REGION \ --keyring=KMS_KEYRING_ID \ --purpose=encryption
- 如要瞭解如何停用金鑰版本,請參閱「停用已啟用的金鑰版本」。
- 如要瞭解如何重新啟用金鑰版本,請參閱「啟用已停用的金鑰版本」。
使用 CMEK 在 Datastream 中建立串流的工作流程
您在 Datastream 中的串流現在已啟用 CMEK。
建立服務帳戶
您必須為每個需要 CMEK 的專案建立服務帳戶。
如要讓使用者管理服務帳戶,請先為使用者授予以下其中一種角色:
目前,您只能使用 gcloud
指令建立 CMEK 所需的服務帳戶類型。如果您使用控制台,Datastream 會自動為您建立這個服務帳戶。
如要使用 gcloud
建立服務帳戶,請執行下列指令:
gcloud beta services identity create \ --service=datastream.googleapis.com \ --project=PROJECT_ID
先前的命令會傳回服務帳戶名稱。您會在授予服務帳戶金鑰存取權的程序中使用這個服務帳戶名稱。
建立金鑰
您可以在 Datastream 中,以與串流相同的 Google Cloud 專案或其他使用者專案建立金鑰。Cloud KMS 金鑰環位置必須與要建立串流的區域相符。多區域或全球區域金鑰不適用。如果區域不相符,就無法建立串流。
如要建立 Cloud KMS 金鑰,請按照下列步驟操作:
控制台
gcloud
將金鑰存取權授予服務帳戶
只有在使用 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
使用 CMEK 在 Datastream 中建立串流
在 Datastream 中建立串流時,您可以使用 CMEK 管理資料的加密設定。