為區域性密鑰新增 CMEK 加密

本頁說明如何使用客戶管理的加密金鑰 (CMEK) 建立新密鑰,以及如何更新現有密鑰以使用 CMEK 金鑰。

總覽

CMEK 可為儲存為區域密鑰的機密資料提供多一層安全防護,並進一步控管這類資料。您可以使用 CMEK 達成下列目標:

  • 完全控管用於保護機密資訊的加密金鑰。
  • 使用您自己的金鑰管理系統,享有更嚴格的安全政策、稽核功能和法規遵循功能。
  • 將金鑰保留在自家基礎架構中,以符合資料主權法規。
  • 為加密金鑰定義精細的存取權控管機制,指定可使用金鑰的對象和用途。

限制:

使用 CMEK 和區域密鑰時,有下列限制:

事前準備

  1. 為每個專案啟用 Secret Manager API
  2. 在專案、資料夾或機構中指派 Secret Manager 管理員角色 (roles/secretmanager.admin)。
  3. 使用下列其中一種方式向 Secret Manager API 進行驗證:

    • 如果您使用用戶端程式庫存取 Secret Manager API,請設定應用程式預設憑證
    • 如果您使用 Google Cloud CLI 存取 Secret Manager API,請使用 Google Cloud CLI 憑證進行驗證。
    • 如要驗證 REST 呼叫,請使用 Google Cloud CLI 憑證或應用程式預設憑證。
  4. 如要啟用 CMEK,並建立這個步驟所需的 CMEK 金鑰和金鑰環,請參閱「為 Secret Manager 啟用客戶自行管理的加密金鑰」。

使用 CMEK 加密建立區域性密鑰

如要建立使用 CMEK 加密的新密鑰,請採用下列其中一種做法:

控制台

  1. 前往 Google Cloud 控制台的「Secret Manager」頁面。

    前往 Secret Manager

  2. 在「Secret Manager」頁面中,按一下「區域性密鑰」分頁標籤,然後按一下「建立區域性密鑰」

  3. 在「建立區域密鑰」頁面的「名稱」欄位中,輸入密鑰名稱。 密鑰名稱可以包含大小寫英文字母、數字、連字號和底線,名稱長度上限為 255 個字元。

  4. 輸入密鑰的值 (例如 abcd1234)。密鑰值可採用任何格式,但不得超過 64 KiB。您也可以使用「上傳檔案」選項,上傳含有密鑰值的文字檔。這項動作會自動建立密鑰版本。

  5. 從「Region」(區域) 清單中,選擇要儲存區域密鑰的位置。

  6. 在「Encryption」(加密) 底下,選取「Customer-managed encryption key (CMEK)」(客戶管理的加密金鑰 (CMEK)),然後從「Encryption key」(加密金鑰) 清單中選擇 CMEK 金鑰。請確認 CMEK 金鑰位於指定位置,且 Secret Manager 專案具備使用該金鑰的必要權限。

  7. 按一下「建立密鑰」

gcloud

使用下方的任何指令資料之前,請先替換以下項目:

  • SECRET_ID:密鑰的 ID 或密鑰的完整 ID
  • LOCATION:要建立密鑰的 Google Cloud 位置
  • CMEK_KEY:Cloud Key Management Service 中特定 CMEK 金鑰的完整路徑,用於保護密碼

執行下列指令:

Linux、macOS 或 Cloud Shell

gcloud secrets create SECRET_ID --location=LOCATION \
    --regional-kms-key-name=CMEK_KEY

Windows (PowerShell)

gcloud secrets create SECRET_ID --location=LOCATION `
    --regional-kms-key-name=CMEK_KEY

Windows (cmd.exe)

gcloud secrets create SECRET_ID --location=LOCATION ^
    --regional-kms-key-name=CMEK_KEY

REST

使用任何要求資料之前,請先替換以下項目:

  • LOCATION:要建立密鑰的 Google Cloud 位置
  • PROJECT_ID:專案 ID。 Google Cloud
  • SECRET_ID:密鑰的 ID 或密鑰的完整 ID。
  • KMS_PROJECT_ID:執行 Cloud Key Management Service 的 Google Cloud 專案 ID。
  • KMS_KEY_LOCATION:Cloud KMS 金鑰的位置名稱。這必須與密鑰位於相同位置。
  • YOUR_KEY_RING:Cloud KMS 中儲存 CMEK 金鑰的金鑰環名稱。
  • YOUR_CMEK_KEY:您在 Cloud KMS 中所選金鑰環內建立的特定客戶管理加密金鑰 (CMEK)。

HTTP 方法和網址:

POST https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/secrets?secretId=SECRET_ID

JSON 要求主體:

{"customer_managed_encryption": {"kms_key_name": "projects/KMS_PROJECT_ID/locations/KMS_KEY_LOCATION/keyRings/YOUR_KEY_RING/cryptoKeys/YOUR_CMEK_KEY"}}

如要傳送要求,請選擇以下其中一個選項:

curl

將要求主體儲存在名為 request.json 的檔案中,然後執行下列指令:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/secrets?secretId=SECRET_ID"

PowerShell

將要求主體儲存在名為 request.json 的檔案中,然後執行下列指令:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/secrets?secretId=SECRET_ID" | Select-Object -Expand Content

您應該會收到如下的 JSON 回應:

{
  "name": "projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID",
  "createTime": "2024-03-27T13:30:07.437859Z",
  "etag": "\"1614a467b60423\""
  "customerManagedEncryption": {
    "kmsKeyName": "projects/KMS_PROJECT_ID/locations/KMS_KEY_LOCATION/keyRings/secret-manager-cmek/cryptoKeys/my-cmek-key"
  }
}

更新現有密鑰以使用 CMEK

如要更新現有密鑰以使用 CMEK,請使用下列其中一種方法:

控制台

  1. 前往 Google Cloud 控制台的「Secret Manager」頁面。

    前往 Secret Manager

  2. 在「Secret Manager」頁面中,按一下「區域性密鑰」分頁標籤。

  3. 如要編輯密鑰,請使用下列其中一種做法:

    • 在清單中找出密鑰,然後點選與該密鑰相關的「動作」選單。在「動作」選單中,按一下「編輯」

    • 按一下密鑰名稱,前往密鑰詳細資料頁面。在密鑰詳細資料頁面中,按一下「編輯密鑰」

  4. 在「編輯密鑰」頁面中,前往「加密」部分。

  5. 在「Encryption」(加密) 底下,選取「Customer-managed encryption key (CMEK)」(客戶管理的加密金鑰 (CMEK)),然後從「Encryption key」(加密金鑰) 清單中選取 CMEK 金鑰。請確認 CMEK 金鑰位於指定位置,且 Secret Manager 專案具備使用該金鑰的必要權限。

  6. 按一下「更新密鑰」

gcloud

使用下方的任何指令資料之前,請先替換以下項目:

  • SECRET_ID:密鑰的 ID 或密鑰的完整 ID
  • LOCATION:密鑰的 Google Cloud 位置
  • CMEK_KEY:Cloud Key Management Service 中特定 CMEK 金鑰的完整路徑,用於保護密碼

執行下列指令:

Linux、macOS 或 Cloud Shell

gcloud secrets update SECRET_ID --location=LOCATION \
    --regional-kms-key-name=CMEK_KEY

Windows (PowerShell)

gcloud secrets update SECRET_ID --location=LOCATION `
    --regional-kms-key-name=CMEK_KEY

Windows (cmd.exe)

gcloud secrets update SECRET_ID --location=LOCATION ^
    --regional-kms-key-name=CMEK_KEY

REST

使用任何要求資料之前,請先替換以下項目:

  • LOCATION:密鑰的 Google Cloud 位置
  • PROJECT_ID:專案 ID。 Google Cloud
  • SECRET_ID:密鑰的 ID 或密鑰的完整 ID。
  • KMS_PROJECT_ID:執行 Cloud Key Management Service 的 Google Cloud 專案 ID。
  • KMS_KEY_LOCATION:Cloud KMS 金鑰的位置。這必須與密鑰位於相同位置。
  • YOUR_KEY_RING:Cloud KMS 中儲存 CMEK 金鑰的金鑰環名稱。
  • YOUR_CMEK_KEY:您在 Cloud KMS 中所選金鑰環內建立的特定客戶管理加密金鑰 (CMEK)。

HTTP 方法和網址:

PATCH https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID?updateMask=customer_managed_encryption

JSON 要求主體:

{"customer_managed_encryption": {"kms_key_name": "projects/KMS_PROJECT_ID/locations/KMS_KEY_LOCATION/keyRings/YOUR_KEY_RING/cryptoKeys/YOUR_CMEK_KEY"}}"

如要傳送要求,請選擇以下其中一個選項:

curl

將要求主體儲存在名為 request.json 的檔案中,然後執行下列指令:

curl -X PATCH \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID?updateMask=customer_managed_encryption"

PowerShell

將要求主體儲存在名為 request.json 的檔案中,然後執行下列指令:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method PATCH `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID?updateMask=customer_managed_encryption" | Select-Object -Expand Content

您應該會收到如下的 JSON 回應:

{
  "name": "projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID",
  "createTime": "2024-03-27T13:30:07.437859Z",
  "etag": "\"16211daf5f29c5\""
  "customerManagedEncryption": {
    "kmsKeyName": "projects/KMS_PROJECT_ID/locations/KMS_KEY_LOCATION/keyRings/secret-manager-cmek/cryptoKeys/my-cmek-key"
  }
}

後續步驟