設定接收器或匯出器等部分元件時,您可能需要提供密碼等機密資訊。您可以在 Collector 的設定檔中以純文字形式加入這些密鑰。不過,這些密鑰會納入 Collector 寫入的系統記錄,並傳輸至 Cloud Logging,因此會暴露在 Collector 執行的節點或虛擬機器 (VM) 之外。
從 Google 建構的 Collector 0.126.0 版開始,您可以使用與 Secret Manager 整合的 OpenTelemetry 提供者,消除設定檔中的純文字密碼。
提供者是 OpenTelemetry 設定元件,類似於接收器和處理器元件。每個供應商都有類型,且每種供應商類型都會將設定中的特定 ID 對應至值。
googlesecretmanager
供應商會將 Secret Manager ID 對應至您儲存在 Secret Manager 中的密鑰,例如密碼、權杖和 API 金鑰。使用 googlesecretmanager
供應器有下列優點:
- 提升安全性:設定檔不會包含密碼等私密資訊。實際密鑰會儲存在 Secret Manager 中,這項服務專門用於安全地儲存、存取及管理機密資料。
- 降低曝光風險:Secret Manager 會在初始化 Google 內建的 OpenTelemetry Collector 時擷取密鑰,避免純文字密鑰意外記錄在記錄檔中。
事前準備
如要使用 googlesecretmanager
提供者,您必須啟用 Secret Manager API 並允許存取該 API,步驟如下:
-
安裝 Google Cloud CLI。 安裝完成後,執行下列指令初始化 Google Cloud CLI:
gcloud init
如果您使用外部識別資訊提供者 (IdP),請先 使用聯合身分登入 gcloud CLI。
設定 Google Cloud CLI 的預設專案:
gcloud config set project PROJECT_ID
執行上述指令前,請將 PROJECT_ID 變數替換為專案的 Google Cloud ID。
-
Enable the Secret Manager API:
gcloud services enable secretmanager.googleapis.com
- 更新執行個體的 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。
- 授予管理 Google 建構的 OpenTelemetry Collector 設定的使用者,建立及管理密鑰所需的權限。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:獲派角色的使用者地址。
- 授予與 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 相關聯的服務帳戶地址。
- 在 Secret Manager 中,為設定檔中的每個純文字密鑰建立密鑰。
- 將設定檔中的每個純文字密鑰,替換為 Secret Manager 中對應密鑰的參照。
- plaintext-secret:替換為明文密碼。
- SECRET_NAME:請將此值替換為有意義的密鑰名稱。
以受管理密鑰取代純文字密鑰
如要使用 Secret Manager 和 googlesecretmanager
提供者,避免在設定檔中使用純文字密碼,請按照下列步驟操作:
舉例來說,如果您使用 http
匯出工具,設定檔可能包含類似下列的項目:
exporters: logging: loglevel: debug http: endpoint: "https://example.com/api/metrics" headers: X-API-Key: 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=-
執行上一個指令前,請替換下列變數:
新密鑰的完整資源名稱格式如下,其中 VERSION 為 1
:
projects/PROJECT_ID/secrets/SECRET_NAME/versions/VERSION
如要進一步瞭解如何在 Secret Manager 中儲存、版本化及存取密鑰,請參閱「建立密鑰」。
取代純文字密鑰
如要更新設定檔,請將每個純文字密碼替換為 googlesecretmanager
供應商的參照,以及受管理密碼的資源名稱,如下列範例所示:
exporters: logging: loglevel: debug http: endpoint: "https://example.com/api/metrics" headers: X-API-Key: ${googlesecretmanager:projects/PROJECT_ID/secrets/SECRET_NAME/versions/VERSION}
瞭解詳情
如要進一步瞭解如何使用googlesecretmanager
提供者,請前往
opentelemetry-collector-contrib
存放區。