重新加密違反預設 CMEK bucket 政策的物件

本頁面說明如何使用 Storage Intelligence 建議工具,找出並重新加密違反 bucket 預設客戶自行管理加密金鑰 (CMEK) 政策的物件。

在 bucket 上設定預設 Cloud KMS 金鑰後,Cloud Storage 會使用該金鑰加密新物件,除非上傳要求指定其他金鑰。不過,Cloud Storage 不會自動重新加密您在設定預設金鑰前上傳的現有物件。這些物件會維持原有的加密方式。如要進一步瞭解可用的加密方法,請參閱「資料加密選項」。

如果 bucket 設有預設 Cloud Key Management Service (Cloud KMS) 金鑰,但內含未以 CMEK 加密的物件,Storage Intelligence 建議工具就會顯示「Objects violate default CMEK bucket policies」(物件違反預設 CMEK bucket 政策) 發現項目。發現項目是指從指標和物件中繼資料偵測到的異常狀況或安全性設定落差,需要您留意。如要概略瞭解 Storage Intelligence 建議工具,請參閱「關於 Storage Intelligence 建議工具」。如需完整的發現項目清單,請參閱「發現項目參考目錄」。

觸發發現項目的門檻

啟用 Storage Intelligence 後,Cloud Storage 會自動評估專案、資料夾或組織中,值區和物件層級的加密中繼資料。如果 bucket 同時符合下列兩項條件,Storage Intelligence 建議工具就會產生發現項目:

啟用 Storage Intelligence 後,初始基準發現項目會在 48 小時內顯示,並每 24 小時更新一次。為減少警告數量,Storage Intelligence 建議工具會在資訊主頁上,依 bucket 匯總物件層級的違規事項。您可以在 儲存空間分析資料集中,查詢物件層級的加密中繼資料。

回應發現項目

如要回應發現項目,請找出各值區中受影響的物件,並使用值區的預設 Cloud KMS 金鑰重新加密:

  1. 查看發現項目詳細資料,找出受影響的值區,並複製各值區預設 KMS 金鑰的資源名稱。

  2. 選用:如要查看 bucket 中未以 CMEK 加密的物件清單,請在 BigQuery 中查詢儲存空間分析資料集。如果尚未設定連結的資料集,請參閱「設定儲存空間分析資料集」。

    SELECT
      bucket,
      name,
      encryptionType
    FROM
      `DATASET_NAME.object_attributes_latest_snapshot_view`
    WHERE
      bucket = 'BUCKET_NAME'
      AND encryptionType != 'CMEK'
      AND timeDeleted IS NULL
      AND softDeleteTime IS NULL;

    更改下列內容:

    • DATASET_NAME:BigQuery 中儲存空間分析連結資料集的名稱。
    • BUCKET_NAME:受影響值區的名稱。
  3. 請參閱下表,選取使用中物件的重新加密方法:

    情境 建議做法 詳細資料
    受影響的使用中物件採用標準加密 (GMEK) 使用儲存空間批次作業,大規模重新加密以 GMEK 加密的物件 從 BigQuery 匯出受影響 GMEK 物件的 CSV 資訊清單檔案,並執行 儲存空間批次作業,以 bucket 的預設 Cloud KMS 金鑰重寫物件。
    受影響的使用中物件採用客戶提供的加密金鑰 (CSEK) 使用 Google Cloud CLI 重新加密 CSEK 加密物件 Google Cloud 不會儲存客戶提供的加密金鑰 (CSEK),因此儲存空間批次作業無法解密以 CSEK 加密的物件。使用 gcloud storage objects update 指令,以 bucket 的預設 Cloud KMS 金鑰重寫 CSEK 加密物件。

    重新加密 bucket 中所有不符合規定的物件後,系統會在下一個 24 小時重新整理週期內,清除該 bucket 的發現項目。不過,在下列情況下,發現項目會保持啟用狀態,直到您或 Cloud Storage 永久刪除保留的物件版本:

使用儲存空間批次作業,大規模重新加密以 GMEK 加密的物件

如要大規模重新加密 GMEK 個即時物件,請從 BigQuery 匯出 CSV 資訊清單檔案,並執行儲存空間批次作業工作:

  1. 在 BigQuery 中執行下列 EXPORT DATA 查詢,使用 Storage Insights 資料集建立 CSV 資訊清單:

    EXPORT DATA OPTIONS(
      uri='gs://DESTINATION_BUCKET/manifests/objects_violating_default_policies_*.csv',
      format='CSV',
      overwrite=true,
      header=true
    ) AS
    SELECT
      bucket,
      name
    FROM
      `DATASET_NAME.object_attributes_latest_snapshot_view`
    WHERE
      bucket = 'BUCKET_NAME'
      AND encryptionType = 'GMEK'
      AND timeDeleted IS NULL
      AND softDeleteTime IS NULL;

    更改下列內容:

    • DESTINATION_BUCKET:要儲存匯出 CSV 資訊清單檔案的 Cloud Storage bucket 名稱。
    • DATASET_NAME:BigQuery 中儲存空間分析連結資料集的名稱。
    • BUCKET_NAME:受影響值區的名稱。
  2. 完成儲存空間批次作業必要條件,並請管理員將 bucket 預設 Cloud KMS 金鑰的 Cloud KMS CryptoKey 加密者/解密者角色 (roles/cloudkms.cryptoKeyEncrypterDecrypter) 授予下列兩個服務代理:

    • 儲存空間批次作業服務代理 (service-PROJECT_NUMBER@gcp-sa-storagebatchoperations.iam.gserviceaccount.com)
    • Cloud Storage 服務代理 (service-PROJECT_NUMBER@gs-project-accounts.iam.gserviceaccount.com)

    將 PROJECT_NUMBER 替換為 bucket 所在專案的專案編號。

  3. 執行 gcloud storage batch-operations jobs create 指令,使用資訊清單檔案建立 Storage 批次作業工作,並以 bucket 的預設 Cloud KMS 金鑰重新加密物件。如要在修改物件前驗證工作設定,請加入 --dry-run 旗標:

    gcloud storage batch-operations jobs create JOB_NAME \
      --bucket="BUCKET_NAME" \
      --manifest-location="gs://DESTINATION_BUCKET/manifests/objects_violating_default_policies_*.csv" \
      --rewrite-object="kms-key=DEFAULT_KMS_KEY"

    更改下列內容:

    • JOB_NAME:批次工作的專屬 ID,例如 update-encryption-to-cmek-job。
    • BUCKET_NAME:受影響值區的名稱。
    • DESTINATION_BUCKET:存放匯出資訊清單檔案的 bucket 名稱。
    • DEFAULT_KMS_KEY:bucket 預設 Cloud KMS 金鑰的資源名稱,格式為 projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/CRYPTO_KEY。

使用 Google Cloud CLI 重新加密 CSEK 加密物件

由於 Google Cloud 不會儲存客戶提供的加密金鑰 (CSEK),因此儲存空間批次作業無法解密以 CSEK 加密的物件。如要使用 bucket 的預設 Cloud KMS 金鑰,重新加密 CSEK 加密物件,請執行 gcloud storage objects update 指令,並加上 --decryption-keys 和 --encryption-key 旗標:

gcloud storage objects update gs://BUCKET_NAME/OBJECT_NAME \
  --decryption-keys=DECRYPTION_KEY \
  --encryption-key=DEFAULT_KMS_KEY

更改下列內容:

  • BUCKET_NAME:受影響值區的名稱。
  • OBJECT_NAME:要重新加密的 CSEK 加密物件名稱。如要透過單一指令更新多個物件,請使用 URI 萬用字元或 --read-paths-from-stdin (-I) 旗標。
  • DECRYPTION_KEY:RFC 4648 base64 編碼的 AES-256 金鑰,用於加密物件。
  • DEFAULT_KMS_KEY:bucket 預設 Cloud KMS 金鑰的資源名稱,格式為 projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/CRYPTO_KEY。

後續步驟