設定接收器或匯出程式等元件時,可能需要提供密碼等機密資訊。您可以在 Collectors 的設定檔中,以明文形式加入這些機密資料。不過,這些機密資料會包含在收集器寫入的系統記錄中,並傳送至 Cloud Logging,因此會在收集器執行的節點或虛擬機器 (VM) 之外洩漏機密資料。
從 Google 建構的收集器 0.126.0 版開始,您可以使用與 Secret Manager 整合的 OpenTelemetry 供應工具,在設定檔中移除明文密碼。
供應器是 OpenTelemetry 設定元件,類似於接收器和處理器元件。每個提供者都有類型,而每個類型的提供者都會將設定中的特定 ID 對應至值。
googlesecretmanager
供應器會將 Secret Manager 識別碼對應至您儲存在 Secret Manager 中的密鑰,例如密碼、符記和 API 金鑰。使用 googlesecretmanager
供應器可享有下列優點:
- 強化安全性:設定檔案不會包含密碼等機密資訊。實際的密鑰會儲存在 Secret Manager 中,這是一項專門用於安全儲存、存取及管理機密資料的服務。
- 降低暴露風險:Secret Manager 會在 Google 建構的 OpenTelemetry 收集器初始化期間擷取密鑰,避免純文字密鑰意外記錄在記錄檔中。
事前準備
如要使用 googlesecretmanager
供應器,您必須啟用 Secret Manager API,並允許存取 API,如以下步驟所述:
-
After installing the Google Cloud CLI, initialize it by running the following command:
gcloud init
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
設定 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 收集器設定的使用者,建立及管理密鑰所需的權限。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。
將明文密鑰替換為受管理的密鑰
如要使用 Secret Manager 和 googlesecretmanager
供應器,在設定檔中避免使用純文字 Secret,請按照下列步驟操作:
舉例來說,如果您使用 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 中儲存、建立版本及存取密鑰,請參閱「建立密鑰」。
替換純文字密鑰
如要更新設定檔,請將每個純文字 Secret 替換為 googlesecretmanager
供應器的參照,以及受管理 Secret 的資源名稱,如以下範例所示:
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
存放區。