為 Cloud Logging 設定 CMEK

本文說明如何為 Cloud Logging 設定及管理客戶自行管理的加密金鑰 (CMEK),以符合貴機構的法規遵循需求。對於機構資料夾,您可以設定 Cloud Logging 的預設資源設定,強制新值區使用 CMEK。設定完成後,Cloud Logging 會確保機構或資料夾中的所有新記錄儲存空間都以客戶管理金鑰加密。

您可以為機構和資料夾設定 Cloud Logging 的預設資源設定。 建立新資源時,這些資源會繼承父項的設定。舉例來說,假設您將機構的 Cloud Logging 預設資源設定設為 CMEK 設定,完成這項設定後,在機構的專案、資料夾或帳單帳戶中建立的任何新 _Default_Required 記錄檔儲存空間,都會使用預設金鑰加密。此外,如果您在機構的子項資源中建立自訂記錄儲存空間,系統會自動使用預設金鑰,除非您在建立記錄儲存空間時提供其他金鑰。

本指南中的操作說明使用 Google Cloud CLI。

總覽

根據預設,Cloud Logging 會加密靜態儲存的客戶內容。記錄服務會為您處理加密作業,您不必採取任何其他動作。這項做法稱為「Google 預設加密機制」

如要控管加密金鑰,您可以在 Cloud KMS 中使用客戶自行管理的加密金鑰 (CMEK),搭配整合 CMEK 的服務 (包括 Logging)。使用 Cloud KMS 金鑰可控管保護等級、位置、輪替時間表、使用權限和存取權,以及加密範圍。使用 Cloud KMS 也能查看稽核記錄,並控管金鑰生命週期。您可以在 Cloud KMS 中控制及管理這些金鑰,而不是由 Google 擁有及管理用來保護您資料的對稱金鑰加密金鑰 (KEK)

使用 CMEK 設定資源後,存取 Logging 資源的體驗與使用 Google 預設加密機制類似。如要進一步瞭解加密選項,請參閱「客戶自行管理的加密金鑰 (CMEK)」。

如果 Cloud Logging 的預設資源設定包含 CMEK 設定,則會發生下列情況:

  • 系統會自動使用設定的金鑰,加密機構或資料夾中的新記錄儲存空間。不過,您可以變更該金鑰,或是建立記錄值區並指定其他金鑰。詳情請參閱「為記錄值區設定 CMEK」。
  • 如果您使用 Log Analytics 並查詢多個記錄 bucket,系統可能會使用預設金鑰加密暫時資料。詳情請參閱「記錄分析限制」。

事前準備

如要開始使用,請完成下列步驟:

  1. 建立啟用 CMEK 的記錄值區前,請先參閱限制

  2. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  3. 設定要建立金鑰的專案: Google Cloud

    1. 如要取得建立金鑰所需的權限,請要求管理員在專案中授予您「Cloud KMS 管理員 」(roles/cloudkms.admin) IAM 角色。如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。

      您或許也能透過自訂角色或其他預先定義的角色,取得必要權限。

    2. 啟用 Cloud KMS API

    3. 建立金鑰環和金鑰

      Cloud Logging 可讓您使用任何區域的金鑰。不過,建立記錄值區時,記錄值區的位置必須與金鑰位置一致。如要瞭解支援的區域,請參閱下列文章:

      如果 Cloud Logging 的預設資源設定包含 CMEK 設定,則在機構或資料夾中建立的新記錄 bucket 會自動設定為 CMEK。此外,由於記錄值區的位置必須與金鑰位置相符,如果 Cloud Logging 的預設資源設定包含 CMEK 設定,您就無法在 global 區域建立記錄值區。

  4. 確認您在要設定 Cloud Logging 預設資源設定的機構或資料夾中,擁有的 IAM 角色包含下列 Cloud Logging 權限:

    • logging.settings.get
    • logging.settings.update
  5. 為機構或資料夾啟用 CMEK

    請按照這些操作說明,為Google Cloud 資料夾或機構啟用 CMEK。

    取得服務帳戶 ID

    如要判斷與要套用 CMEK 的機構或資料夾相關聯的服務帳戶 ID,請執行下列 gcloud logging settings describe 指令:

    資料夾

     gcloud logging settings describe --folder=FOLDER_ID
    

    執行上一個指令前,請進行下列替換:

    • FOLDER_ID:資料夾的專屬數字 ID。如要瞭解如何使用資料夾,請參閱「建立及管理資料夾」。

    機構

    gcloud logging settings describe --organization=ORGANIZATION_ID

    執行上一個指令前,請進行下列替換:

    • ORGANIZATION_ID:組織的專屬數字 ID。如要瞭解如何取得這個 ID,請參閱「取得機構 ID」。

    如果機構或資料夾沒有服務帳戶,上述指令就會產生服務帳戶。這項指令也會傳回兩個服務帳戶的 ID,分別位於 kmsServiceAccountId 欄位和 loggingServiceAccountId 欄位。如要設定 Cloud Logging 的預設資源設定,使其具有 CMEK 設定,請使用 kmsServiceAccountId 欄位中的值。

    以下說明指定機構時,前一個指令的回應範例:

    kmsServiceAccountId: KMS_SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com
    loggingServiceAccountId: SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com
    name: organizations/ORGANIZATION_ID/settings
    

    針對每項資源執行一次佈建程序。多次執行 describe 指令,會傳回 kmsServiceAccountId 欄位的相同值。

    如果無法使用 Google Cloud CLI,請執行 Cloud Logging API 方法 getSettings

    指派加密者/解密者角色

    如要使用 CMEK,請將 Cloud KMS CryptoKey Encrypter/Decrypter 角色指派給服務帳戶,授予服務帳戶使用 Cloud KMS 的權限:

    gcloud

    gcloud kms keys add-iam-policy-binding \
    --project=KMS_PROJECT_ID \
    --member=serviceAccount:KMS_SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com \
    --role=roles/cloudkms.cryptoKeyEncrypterDecrypter \
    --location=KMS_KEY_LOCATION \
    --keyring=KMS_KEY_RING \
    KMS_KEY_NAME

    執行上一個指令前,請先進行下列替換:

    • KMS_PROJECT_ID:由專案名稱和隨機指派的數字組成的專屬英數字元 ID,用於執行 Cloud KMS 的專案。 Google Cloud Google Cloud 如要瞭解如何取得這個 ID,請參閱「識別專案」。
    • KMS_SERVICE_ACCT_NAME:服務帳戶名稱,顯示在 gcloud logging settings describe 指令回應的 kmsServiceAccountId 欄位中。
    • KMS_KEY_LOCATION:Cloud KMS 金鑰的區域。
    • KMS_KEY_RING:Cloud KMS 金鑰環的名稱。
    • KMS_KEY_NAME: Cloud KMS 金鑰的名稱。格式如下: projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KMS_KEY_RING/cryptoKeys/KEY

    控制台

    1. 前往 Google Cloud 控制台的「金鑰管理」頁面。

      前往「金鑰管理」

    2. 選取包含金鑰的金鑰環名稱。

    3. 勾選金鑰的核取方塊。

      「Permissions」(權限) 分頁標籤隨即顯示。

    4. 在「Add members」(新增成員) 對話方塊中,指定您授予存取權的 Logging 服務帳戶的電子郵件地址。

    5. 在「Select a role」(選取角色) 選單中,選取「Cloud KMS CryptoKey Encrypter/Decrypter」(Cloud KMS CryptoKey 加密者/解密者)

    6. 按一下「新增」。

    設定機構政策

    記錄支援機構政策,可要求 CMEK 保護,並限制哪些 Cloud KMS CryptoKey 可用於 CMEK 保護:

    • 如果 logging.googleapis.com 位於限制 constraints/gcp.restrictNonCmekServices 的服務政策清單中,Logging 會拒絕建立未受 CMEK 保護的新使用者定義 bucket。Deny不過,這項限制不會阻止 Cloud Logging 建立 _Required_Default 記錄檔 bucket,這兩個 bucket 會在建立Google Cloud 專案時建立。

    • 強制執行 constraints/gcp.restrictCmekCryptoKeyProjects 時,記錄會建立受 CMEK 保護的資源,這些資源受到允許的專案、資料夾或機構的 CryptoKey 保護。

    如要進一步瞭解 CMEK 和組織政策,請參閱「CMEK 組織政策」。

    請確保 Cloud Logging 的預設資源設定符合機構政策。如果是組織和資料夾,且您打算修改 Cloud Logging 的預設資源設定,請先檢查並視需要更新組織政策,再更新這些設定。

    如要查看或設定機構政策,請按照下列步驟操作:

    1. 前往 Google Cloud 控制台的「Organization Policies」(機構政策) 頁面:

      前往「Organization Policies」(機構政策)

      如果您是使用搜尋列尋找這個頁面,請選取子標題為「IAM & Admin」(IAM 與管理) 的結果

    2. 選取您的機構。
    3. 確認並視需要更新 CMEK 專屬限制。

      如要瞭解如何修改機構政策,請參閱建立及編輯政策

    使用 Cloud KMS 金鑰設定 Cloud Logging

    如要更新 Cloud Logging 的預設資源設定,使其包含 CMEK 設定,請執行下列指令:gcloud logging settings update

    資料夾

    gcloud logging settings update \
        --folder=FOLDER_ID \
        --kms-location=KMS_KEY_LOCATION \
        --kms-key-name=KMS_KEY_NAME \
        --kms-keyring=KMS_KEY_RING \
        --kms-project=KMS_PROJECT_ID
    

    執行上一個指令前,請先進行下列替換:

    • FOLDER_ID:資料夾的專屬數字 ID。如要瞭解如何使用資料夾,請參閱「建立及管理資料夾」。
    • KMS_KEY_LOCATION:Cloud KMS 金鑰的區域。
    • KMS_KEY_NAME: Cloud KMS 金鑰的名稱。格式如下: projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KMS_KEY_RING/cryptoKeys/KEY
    • KMS_KEY_RING:Cloud KMS 金鑰環的名稱。
    • KMS_PROJECT_ID:由專案名稱和隨機指派的數字組成的專屬英數字元 ID,用於執行 Cloud KMS 的專案。 Google Cloud Google Cloud 如要瞭解如何取得這個 ID,請參閱「識別專案」。

    先前的指令會更新 Cloud Logging 的預設資源設定,以儲存 Cloud KMS 金鑰的相關資訊。請務必確認資料夾的預設儲存位置已設為 KMS_KEY_LOCATION 的值。如果您尚未設定預設儲存位置,或該位置的值與 KMS_KEY_LOCATION 的值不符,請在先前的指令中附加下列內容:

    --storage-location=KMS_KEY_LOCATION
    

    --storage-location 標記可讓您設定或更新資料夾的預設儲存位置。

    機構

    gcloud logging settings update \
        --organization=ORGANIZATION_ID \
        --kms-location=KMS_KEY_LOCATION \
        --kms-key-name=KMS_KEY_NAME \
        --kms-keyring=KMS_KEY_RING \
        --kms-project=KMS_PROJECT_ID
    

    執行上一個指令前,請先進行下列替換:

    • ORGANIZATION_ID:組織的專屬數字 ID。如要瞭解如何取得這個 ID,請參閱「取得機構 ID」。
    • KMS_KEY_LOCATION:Cloud KMS 金鑰的區域。
    • KMS_KEY_NAME: Cloud KMS 金鑰的名稱。格式如下: projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KMS_KEY_RING/cryptoKeys/KEY
    • KMS_KEY_RING:Cloud KMS 金鑰環的名稱。
    • KMS_PROJECT_ID:由專案名稱和隨機指派的數字組成的專屬英數字元 ID,用於執行 Cloud KMS 的專案。 Google Cloud Google Cloud 如要瞭解如何取得這個 ID,請參閱「識別專案」。

    先前的指令會更新 Cloud Logging 的預設資源設定,以儲存 Cloud KMS 金鑰的相關資訊。請務必確認機構的預設儲存位置已設為 KMS_KEY_LOCATION 的值。如果您尚未設定預設儲存位置,或該位置的值與 KMS_KEY_LOCATION 的值不符,請在先前的指令中附加下列內容:

    --storage-location=KMS_KEY_LOCATION
    

    您可以使用 --storage-location 標記,設定或更新機構的預設儲存位置。

    套用金鑰後,機構或資料夾中的新記錄檔值區會設定為使用這項金鑰,加密靜態資料。您也可以為個別記錄檔儲存空間變更金鑰。您無法在 global 區域建立記錄檔儲存空間,因為您必須使用與資料區域範圍相符的鍵。

    如果無法使用 Google Cloud CLI,請執行 Cloud Logging API 方法 updateSettings

    確認啟用金鑰

    如要確認您已為機構或資料夾成功啟用 CMEK,請執行下列指令: gcloud logging settings describe

    資料夾

    gcloud logging settings describe --folder=FOLDER_ID

    執行上一個指令前,請進行下列替換:

    • FOLDER_ID:資料夾的專屬數字 ID。如要瞭解如何使用資料夾,請參閱「建立及管理資料夾」。

    機構

    gcloud logging settings describe --organization=ORGANIZATION_ID

    執行上一個指令前,請進行下列替換:

    • ORGANIZATION_ID:組織的專屬數字 ID。如要瞭解如何取得這個 ID,請參閱「取得機構 ID」。

    如果上一個指令傳回 Cloud KMS 金鑰名稱,且 kmsKeyName 欄位已填入,表示機構或資料夾已啟用 CMEK:

    kmsKeyName: KMS_KEY_NAME
    kmsServiceAccountId: KMS_SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com
    loggingServiceAccountId: SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com
    

    將記錄檔轉送至支援的目的地

    • 您可以設定 Cloud Logging 記錄值區,使用 CMEK 加密資料。如果是機構和資料夾,只要使用 CMEK 設定為 Cloud Logging 設定預設資源,機構或資料夾中的新記錄值區就會自動使用 CMEK。您可以變更這些記錄檔儲存空間的金鑰,也可以建立記錄檔儲存空間,並使用與 Cloud Logging 預設資源設定所指定金鑰不同的 KMS 金鑰。

      如要瞭解如何將 CMEK 應用於記錄檔 bucket,包括如何變更金鑰,以及在記錄檔 bucket 上啟用 CMEK 時的限制,請參閱「為記錄檔 bucket 設定 CMEK」。

    • Cloud Storage 支援將 CMEK 用於路由記錄。如需如何為 Cloud Storage 設定 CMEK 的操作說明,請參閱「使用客戶管理的加密金鑰」。

      如果將記錄資料傳送至 Cloud Storage 時,因金鑰無法使用而導致資料遺失,且這些記錄也儲存在記錄值區中,則您可以事後將記錄大量複製到 Cloud Storage。詳情請參閱「複製記錄項目」。

    管理 Cloud KMS 金鑰

    下列各節說明如何變更、撤銷或停用 Cloud KMS 金鑰的存取權。

    變更 Cloud KMS 金鑰

    如要變更與機構或資料夾相關聯的 Cloud KMS 金鑰,請建立金鑰,然後執行 gcloud logging settings update 指令,並提供新 Cloud KMS 金鑰的相關資訊:

    資料夾

    gcloud logging settings update \
        --folder=FOLDER_ID
        --kms-key-name=NEW_KMS_KEY_NAME
        --kms-location=NEW_KMS_KEY_LOCATION \
        --kms-keyring=NEW_KMS_KEY_RING \
        --kms-project=NEW_KMS_PROJECT_ID

    請務必確認資料夾的預設儲存位置已設為 KMS_KEY_LOCATION 的值。如果您尚未設定預設儲存位置,或該位置的值與 KMS_KEY_LOCATION 的值不符,請在先前的指令中附加下列內容:

    --storage-location=NEW_KMS_KEY_LOCATION
    

    機構

    gcloud logging settings update \
        --organization=ORGANIZATION_ID
        --kms-key-name=NEW_KMS_KEY_NAME
        --kms-location=NEW_KMS_KEY_LOCATION \
        --kms-keyring=NEW_KMS_KEY_RING \
        --kms-project=NEW_KMS_PROJECT_ID

    請務必確認機構的預設儲存位置已設為 KMS_KEY_LOCATION 的值。如果您尚未設定預設儲存位置,或該位置的值與 KMS_KEY_LOCATION 的值不符,請在先前的指令中附加下列內容:

    --storage-location=NEW_KMS_KEY_LOCATION
    

    撤銷 Cloud KMS 金鑰的存取權

    如要撤銷 Logging 對 Cloud KMS 金鑰的存取權,請移除已設定服務帳戶的 IAM 權限。

    如果移除記錄檔的存取金鑰權限,變更最多可能需要一小時才會生效。

    如要撤銷 Logging 對 Cloud KMS 金鑰的存取權,請執行下列 Google Cloud CLI 指令:

    gcloud kms keys remove-iam-policy-binding \
        --project=KMS_PROJECT_ID \
        --member=serviceAccount:KMS_SERVICE_ACCT_NAME@gcp-sa-logging.iam.gserviceaccount.com \
        --role=roles/cloudkms.cryptoKeyEncrypterDecrypter \
        --location=KMS_KEY_LOCATION \
        --keyring=KMS_KEY_RING \
        KMS_KEY_NAME

    執行上一個指令前,請先進行下列替換:

    • KMS_PROJECT_ID:由專案名稱和隨機指派的數字組成的專屬英數字元 ID,用於執行 Cloud KMS 的專案。 Google Cloud Google Cloud 如要瞭解如何取得這個 ID,請參閱「識別專案」。
    • KMS_SERVICE_ACCT_NAME:服務帳戶名稱,顯示在 gcloud logging settings describe 指令回應的 kmsServiceAccountId 欄位中。
    • KMS_KEY_LOCATION:Cloud KMS 金鑰的區域。
    • KMS_KEY_RING:Cloud KMS 金鑰環的名稱。
    • KMS_KEY_NAME: Cloud KMS 金鑰的名稱。格式如下: projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KMS_KEY_RING/cryptoKeys/KEY

    停用 CMEK

    為機構或資料夾停用 CMEK 後,系統只會停止對日後作業強制執行 CMEK 政策,先前套用的設定則會維持不變。

    如要停用已設定 CMEK 的資源,請執行下列 Google Cloud CLI 指令,將 CMEK 設為 Cloud Logging 的預設資源設定:

    資料夾

    gcloud logging settings update --folder=FOLDER_ID --clear-kms-key

    執行上一個指令前,請進行下列替換:

    • FOLDER_ID:資料夾的專屬數字 ID。如要瞭解如何使用資料夾,請參閱「建立及管理資料夾」。

    機構

    gcloud logging settings update --organization=ORGANIZATION_ID --clear-kms-key

    執行上一個指令前,請進行下列替換:

    • ORGANIZATION_ID:組織的專屬數字 ID。如要瞭解如何取得這個 ID,請參閱「取得機構 ID」。

    如要刪除金鑰,請參閱「刪除與還原金鑰版本」。

    Cloud KMS 金鑰輪替注意事項

    與 Google Cloud 機構或資料夾相關聯的 Cloud KMS 金鑰輪替時,Cloud Logging 不會自動輪替暫時性災害復原檔案的加密金鑰。現有復原檔案會繼續使用當初建立時採用的金鑰版本。新的復原檔案會使用目前的主要金鑰版本。

    限制

    為 Cloud Logging 設定預設資源設定時,如果包含 CMEK 設定,則有下列已知限制。

    災難復原檔案無法使用

    在符合以下條件的情況下,記錄服務會將 Cloud KMS 金鑰判定為可供使用及存取:

    • 金鑰已啟用
    • 回應的 gcloud logging settings describe 指令 kmsServiceAccountId 欄位中列出的服務帳戶,具有金鑰的加密和解密權限。

    如果 Logging 無法存取 Cloud KMS 金鑰,就無法寫入暫時的災害復原檔案,使用者也無法再執行查詢。即使還原金鑰存取權,查詢效能可能仍會下降。

    由於 Logging 無法寫入轉送作業所需的暫存檔案,因此將記錄檔轉送至 Cloud Storage 的作業也可能受到影響。如果加密或解密資料時發生錯誤,系統會將通知傳送至包含 Cloud KMS 金鑰的 Google Cloud 專案。

    用戶端程式庫適用情形

    Logging 用戶端程式庫未提供設定 CMEK 的方法。

    Cloud EKM 金鑰無法使用,導致服務效能降低

    使用 Cloud EKM 金鑰時,Google 無法控管外部金鑰管理合作夥伴系統中外部代管金鑰的供應情形。

    如果 Cloud Logging 的預設資源設定包含 CMEK 設定,且外部代管金鑰無法使用,Cloud Logging 會持續嘗試存取金鑰。Cloud Logging 也會緩衝處理最多一小時的傳入記錄資料。 一小時後,如果 Cloud Logging 仍無法存取外部管理的金鑰,就會開始捨棄資料。

    如果將 CMEK 套用至記錄儲存區,且外部管理的金鑰無法使用,Cloud Logging 仍會將記錄儲存在記錄儲存區,但使用者無法存取該資料。

    如要瞭解使用外部金鑰時的更多注意事項和替代方案,請參閱 Cloud External Key Manager 說明文件

    記錄儲存空間的限制

    如要瞭解使用 CMEK 搭配記錄值區時的限制,請參閱限制

    配額

    如要瞭解記錄的使用限制,請參閱配額與限制

    排解設定錯誤

    如要瞭解如何排解 CMEK 設定錯誤,請參閱「排解 Cloud Logging 的 CMEK 和預設資源設定」。