為區域性密鑰新增 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」頁面中,按一下「Regional secrets」(區域性密鑰) 分頁標籤,然後按一下「Create regional secret」(建立區域性密鑰)

  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
  • LOCATION:要建立密鑰的 Google Cloud 位置
  • 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)。

執行下列指令:

Linux、macOS 或 Cloud Shell

gcloud secrets create SECRET_ID --location=LOCATION
    --regional-kms-key-name="projects/KMS_PROJECT_ID/locations/KMS_KEY_LOCATION/keyRings/YOUR_KEY_RING/cryptoKeys/YOUR_CMEK_KEY"

Windows (PowerShell)

gcloud secrets create SECRET_ID --location=LOCATION
    --regional-kms-key-name="projects/KMS_PROJECT_ID/locations/KMS_KEY_LOCATION/keyRings/YOUR_KEY_RING/cryptoKeys/YOUR_CMEK_KEY"

Windows (cmd.exe)

gcloud secrets create SECRET_ID --location=LOCATION
    --regional-kms-key-name="projects/KMS_PROJECT_ID/locations/KMS_KEY_LOCATION/keyRings/YOUR_KEY_RING/cryptoKeys/YOUR_CMEK_KEY"

REST

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

  • LOCATION:要建立密鑰的 Google Cloud 位置
  • PROJECT_ID:專案 ID。 Google Cloud
  • SECRET_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」頁面中,按一下「Regional secrets」分頁標籤。

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

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

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

  4. 在「Edit secret」(編輯密鑰) 頁面中,前往「Encryption」(加密) 區段。

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

  6. 按一下「更新密鑰」

gcloud

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

  • SECRET_ID:密鑰的 ID
  • LOCATION:密鑰的 Google Cloud 位置
  • 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)。

執行下列指令:

Linux、macOS 或 Cloud Shell

gcloud secrets update SECRET_ID --location=LOCATION
    --regional-kms-key-name="projects/KMS_PROJECT_ID/locations/KMS_KEY_LOCATION/keyRings/YOUR_KEY_RING/cryptoKeys/YOUR_CMEK_KEY"

Windows (PowerShell)

gcloud secrets update SECRET_ID --location=LOCATION
    --regional-kms-key-name="projects/KMS_PROJECT_ID/locations/KMS_KEY_LOCATION/keyRings/YOUR_KEY_RING/cryptoKeys/YOUR_CMEK_KEY"

Windows (cmd.exe)

gcloud secrets update SECRET_ID --location=LOCATION
    --regional-kms-key-name="projects/KMS_PROJECT_ID/locations/KMS_KEY_LOCATION/keyRings/YOUR_KEY_RING/cryptoKeys/YOUR_CMEK_KEY"

REST

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

  • LOCATION:密鑰的 Google Cloud 位置
  • PROJECT_ID:專案 ID。 Google Cloud
  • SECRET_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"
  }
}

後續步驟