本主題說明如何使用 Cloud Key Management Service 對稱金鑰重新加密資料。您可以調整這些非對稱金鑰範例。 如果您懷疑存在未經授權使用金鑰的情況,應重新加密受該金鑰保護的資料,然後對之前的金鑰版本執行停用或安排刪除作業。
事前準備
這種情況需要符合下列條件。
您已經使用 Cloud KMS 加密資料。
您未停用、安排刪除或刪除用於加密的金鑰版本。您可以使用這個金鑰版本對已加密的資料進行解密。
使用非對稱金鑰重新加密資料
本主題的範例說明如何使用對稱金鑰重新加密資料。使用對稱式金鑰時,Cloud KMS 會自動推斷要用於解密的金鑰版本。使用非對稱金鑰時,您必須指定金鑰版本。
- 按照 Google Cloud CLI 使用說明操作時,請務必加入
--version旗標。 - 按照 API 使用說明操作時,請使用
CryptoKeyVersions,而非CryptoKeys。如要進一步瞭解如何使用非對稱金鑰加密及解密資料,請參閱這篇文章。
使用非對稱金鑰重新加密資料的工作流程,與本主題所述的流程類似。
重新加密資料的工作流程
請按照下列步驟重新加密資料,並停用或安排刪除用於原始加密的金鑰版本。
使用之前的金鑰版本解密資料
Cloud KMS 會自動使用正確的金鑰版本解密資料,前提是您尚未停用、安排刪除,或是刪除該金鑰版本。下列範例會說明如何解密資料。這裡使用的解密程式碼,與在加密與解密中使用的程式碼相同。
gcloud
如要在指令列上使用 Cloud KMS,請先安裝或升級至最新版 Google Cloud CLI。
gcloud kms decrypt \
--key KEY_NAME \
--keyring KEY_RING \
--location LOCATION \
--ciphertext-file FILE_TO_DECRYPT \
--plaintext-file DECRYPTED_OUTPUT
更改下列內容:
KEY_NAME:要用於解密的金鑰名稱。KEY_RING:金鑰所屬金鑰環的名稱。LOCATION:包含金鑰環的 Cloud KMS 位置。FILE_TO_DECRYPT:要解密檔案的路徑。DECRYPTED_OUTPUT:您要儲存解密輸出內容的路徑。
如要瞭解所有旗標和可能的值,請執行含有 --help 旗標的指令。
C#
如要執行這段程式碼,請先設定 C# 開發環境,然後安裝 Cloud KMS C# SDK。
Go
如要執行這段程式碼,請先設定 Go 開發環境,並安裝 Cloud KMS Go SDK。
Java
如要執行這段程式碼,請先設定 Java 開發環境,然後安裝 Cloud KMS Java SDK。
Node.js
如要執行這段程式碼,請先設定 Node.js 開發環境,並安裝 Cloud KMS Node.js SDK。
PHP
如要執行這段程式碼,請先瞭解如何在 Google Cloud 上使用 PHP,並安裝 Cloud KMS PHP SDK。
Python
如要執行這段程式碼,請先設定 Python 開發環境,然後安裝 Cloud KMS Python SDK。
Ruby
如要執行這段程式碼,請先設定 Ruby 開發環境,然後安裝 Cloud KMS Ruby SDK。
API
這些範例使用 curl 做為 HTTP 用戶端,示範如何使用 API。如要進一步瞭解存取控管,請參閱「存取 Cloud KMS API」。
以 JSON 格式從 Cloud KMS 傳回的解密文字採用 base64 編碼。
如要解密已加密資料,請提出 POST 要求,並提供適當的專案和金鑰資訊,然後在要求主體的 ciphertext 欄位中指定要解密的已加密文字 (也稱為密文)。
curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME:decrypt" \
--request "POST" \
--header "authorization: Bearer TOKEN" \
--header "content-type: application/json" \
--data "{\"ciphertext\": \"ENCRYPTED_DATA\"}"
更改下列內容:
PROJECT_ID:專案 ID,用於存放您要用於解密的金鑰環和金鑰。LOCATION:包含金鑰環的 Cloud KMS 位置。KEY_RING:包含您要用於解密的金鑰的金鑰環。