為 Cloud Logging 設定 CMEK

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

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

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

總覽

根據預設,Cloud Logging 會加密靜態儲存的客戶內容。Logging 會使用金鑰加密金鑰,以信封式加密程序加密儲存在記錄值區中的資料。如要存取記錄資料,必須先取得這些金鑰加密金鑰。 這些值預設為 Google-owned and Google-managed encryption keys ,您不必採取任何行動。

貴機構可能需要符合法規、法規遵循或進階加密要求,而預設的靜態加密機制無法滿足這些需求。為符合貴機構的需求,您可以設定 CMEK 來控管及管理自己的加密作業,而不使用Google-owned and Google-managed encryption keys。

如要瞭解 CMEK 的具體資訊,包括優點和限制,請參閱客戶代管加密金鑰

將 CMEK 設定為 Logging 的預設資源設定時,會發生下列情況:

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

事前準備

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

  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) 身分與存取權管理角色。如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。

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

    2. 啟用 Cloud KMS API

    3. 建立金鑰環和金鑰

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

      如果您按照本文步驟,將 CMEK 設為 Logging 的預設資源設定,系統就會自動為機構或資料夾中建立的新記錄儲存空間設定 CMEK。此外,由於記錄檔 bucket 的位置必須與金鑰位置相符,因此將 CMEK 設定為預設資源設定後,您就無法在 global 區域建立記錄檔 bucket。

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

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

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

    取得服務帳戶 ID

    如要找出與機構或資料夾相關聯的服務帳戶 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 欄位。如要將 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_NAMEgcloud 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 保護的新使用者定義值區。Deny不過,這項限制不會阻止 Cloud Logging 建立 _Required_Default 記錄檔 bucket,這兩個 bucket 會在建立Google Cloud 專案時建立。

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

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

    如果存在指定 CMEK 限制的機構政策,請確保這些限制與機構或資料夾的 Logging 預設設定一致。此外,如果您打算修改預設設定,請先檢查並視需要更新機構政策,再更新預設設定。

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

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

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

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

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

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

    使用 Cloud KMS 金鑰設定 Cloud Logging

    如要將 CMEK 設定為 Logging 的預設資源設定,請執行下列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 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 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 設為機構或資料夾的預設設定,機構或資料夾中的新記錄檔儲存空間就會自動使用 CMEK。您可以變更這些記錄檔值區的金鑰,也可以建立使用不同 KMS 金鑰的記錄檔值區 (與預設設定指定的金鑰不同)。

      如要瞭解如何將 CMEK 應用於記錄值區,包括如何變更金鑰,以及在記錄值區啟用 CMEK 時的限制,請參閱「為記錄值區設定 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_NAMEgcloud 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 指令:

    資料夾

    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 不會自動輪替暫時性災害復原檔案的加密金鑰。現有復原檔案會繼續使用當初建立時採用的金鑰版本。新的復原檔案會使用目前的主要金鑰版本。

    限制

    將 CMEK 設為 Cloud Logging 的預設資源設定時,有以下已知限制。

    災難復原檔案無法使用

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

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

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

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

    用戶端程式庫適用情形

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

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

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

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

    如果對記錄儲存空間套用 CMEK,且無法使用外部管理的金鑰,Cloud Logging 會繼續將記錄儲存在記錄儲存空間中,但使用者無法存取該資料。

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

    記錄儲存空間的限制

    如要瞭解在記錄值區中使用 CMEK 的限制,請參閱限制

    配額

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

    排解設定錯誤

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