在作業套件代理程式指標設定中管理密鑰

設定部分第三方整合服務時,您必須為作業套件代理程式指標接收器提供密碼等私密資訊。根據預設,這些密碼會以純文字形式儲存在代理程式的 config.yaml 檔案中。這些密鑰會寫入代理程式產生的系統記錄檔,並傳輸至 Cloud Logging,因此密鑰會暴露在執行 Ops Agent 的虛擬機器 (VM) 之外。

從作業套件代理程式 2.57.0 版開始,您可以使用整合式 Secret Manager 的 OpenTelemetry 提供者,消除設定檔中的純文字密鑰。

提供者是 OpenTelemetry 設定元件,類似於接收器和處理器元件。每個供應商都有類型,且每種供應商類型都會將設定中的特定 ID 對應至值。

googlesecretmanager 供應商會將 Secret Manager ID 對應至您儲存在 Secret Manager 中的密鑰,例如密碼、權杖和 API 金鑰。使用 googlesecretmanager 供應器有下列優點:

  • 提升安全性:設定檔不會包含密碼等私密資訊。實際的密鑰會儲存在 Secret Manager 中,這項服務專門用於安全地儲存、存取及管理機密資料。
  • 降低外洩風險:Secret Manager 會在 Ops Agent 初始化期間擷取密鑰,避免純文字密鑰意外記錄在記錄檔中。

您只能在自訂作業套件代理程式設定中,設定指標收集功能時使用 googlesecretmanager。請勿使用供應商來取代記錄收集設定中的密鑰。

事前準備

如要使用 googlesecretmanager 提供者,您必須啟用 Secret Manager API 並允許存取該 API,步驟如下:

  1. 安裝 Google Cloud CLI。 安裝完成後,執行下列指令初始化 Google Cloud CLI:

    gcloud init

    如果您使用外部識別資訊提供者 (IdP),請先 使用聯合身分登入 gcloud CLI

  2. 設定 Google Cloud CLI 的預設專案:

    gcloud config set project PROJECT_ID
    

    執行上述指令前,請將 PROJECT_ID 變數替換為專案的 Google Cloud ID。

  3. Enable the Secret Manager API:

    gcloud services enable secretmanager.googleapis.com
  4. 更新執行個體的 OAuth 存取範圍,加入 Secret Manager 的必要範圍 https://www.googleapis.com/auth/cloud-platform
    gcloud compute instances set-service-account "INSTANCE_ID" \
      --service-account "SERVICE_ACCT_EMAIL" \
      --scopes "https://www.googleapis.com/auth/cloud-platform"
    

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

    • INSTANCE_ID:VM 的 ID。
    • SERVICE_ACCT_EMAIL:與 VM 相關聯的服務帳戶地址。

    詳情請參閱 存取 Secret Manager API

  5. 授予管理作業套件代理程式設定的使用者建立及管理密鑰所需的權限。Identity and Access Management 角色 roles/secretManager.secretAdmin 包含必要權限:
    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member="user:USER_EMAIL" \
      --role=roles/secretManager.secretAdmin
    

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

    • PROJECT_ID:您的 Google Cloud 專案 ID。
    • USER_EMAIL:獲派角色的使用者地址。
  6. 授予與 VM 相關聯的服務帳戶存取密鑰所需的權限。Identity and Access Management 角色 roles/secretManager.secretAccessor 包含必要權限:
    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member="serviceAccount:SERVICE_ACCT_EMAIL" \
      --role=roles/secretManager.secretAccessor
    

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

    • PROJECT_ID: Google Cloud 專案的 ID。
    • SERVICE_ACCT_EMAIL:與 VM 相關聯的服務帳戶地址。
  7. 以受管理密鑰取代純文字密鑰

    如要使用 Secret Manager 和 googlesecretmanager 提供者,避免在設定檔中使用純文字密碼,請按照下列步驟操作:

    1. 在 Secret Manager 中,為設定檔中的每個純文字密鑰建立密鑰。
    2. 將設定檔中的每個純文字密鑰,替換為 Secret Manager 中對應密鑰的參照。

    舉例來說,如果您使用 mysql 指標接收器,設定檔可能包含類似下列的項目:

    receivers:
      mysql:
        type: mysql
        username: root
        password: plaintext-secret
    

    在本例中,您要將 plaintext-secret 字串放入 Secret Manager,然後將純文字密鑰替換為受管理密鑰的參照。

    為純文字密鑰建立 Secret Manager 密鑰

    如要建立包含純文字密鑰 plaintext-secret 的 Secret Manager 密鑰,請執行下列指令:
    echo -n "plaintext-secret" | gcloud secrets create SECRET_NAME \
        --replication-policy="automatic" \
        --data-file=-
    

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

    • plaintext-secret:替換為明文密碼。
    • SECRET_NAME:將其替換為有意義的密鑰名稱。

    新密鑰的完整資源名稱格式如下,其中 VERSION1

    projects/PROJECT_ID/secrets/SECRET_NAME/versions/VERSION

    如要進一步瞭解如何在 Secret Manager 中儲存、版本化及存取密鑰,請參閱「建立密鑰」。

    取代純文字密鑰

    如要更新設定檔,請將每個純文字密鑰替換為 googlesecretmanager 提供者和受管理密鑰的資源名稱參照,如下列範例所示:

    receivers:
      mysql:
        type: mysql
        username: root
        password: ${googlesecretmanager:projects/PROJECT_ID/secrets/SECRET_NAME/versions/VERSION}
    

    重新啟動作業套件代理程式

    Linux

    1. 如要重新啟動代理程式,請在執行個體上執行下列指令:
      sudo systemctl restart google-cloud-ops-agent
      
    2. 如要確定代理程式已重新啟動,請執行下列指令,並驗證「指標代理程式」和「Logging 代理程式」元件是否已啟動:
      sudo systemctl status "google-cloud-ops-agent*"
      

    Windows

    1. 使用遠端桌面協定或類似工具連線至執行個體,並登入 Windows。
    2. 以滑鼠右鍵按一下 PowerShell 圖示,然後選取「以系統管理員身分執行」,以管理員權限開啟 PowerShell 終端機。
    3. 如要重新啟動代理程式,請執行下列 PowerShell 指令:
      Restart-Service google-cloud-ops-agent -Force
      
    4. 如要確定代理程式已重新啟動,請執行下列指令,並驗證「指標代理程式」和「Logging 代理程式」元件是否已啟動:
      Get-Service google-cloud-ops-agent*