在 Ops Agent 配置中管理 Secret

配置某些第三方集成时,您需要为 Ops Agent 指标接收器提供 Secret(例如密码)。默认情况下,这些 Secret 以明文形式存储在代理的 config.yaml 文件中。这些 Secret 包含在由代理写入并传输到 Cloud Logging 的系统日志中,从而会在运行 Ops Agent 的虚拟机 (VM) 之外公开 Secret。

从 Ops Agent 2.57.0 版开始,您可以使用集成了 Secret Manager 的 OpenTelemetry 提供程序来消除配置文件中的明文 Secret。

提供程序是 OpenTelemetry 配置组件,类似于接收器和处理器组件。每个提供程序都有一种类型,并且每种类型的提供程序都会将配置中的特定标识符映射到一个值。

googlesecretmanager 提供程序会将 Secret Manager 标识符映射到您存储在 Secret Manager 中的 Secret(例如密码、令牌和 API 密钥)。使用 googlesecretmanager 提供程序具有以下优势:

  • 增强安全性:您的配置文件不包含密码等敏感信息。实际的 Secret 存储在 Secret Manager 中(这是专门用于安全地存储、访问和管理敏感数据的服务)。
  • 降低泄露风险:Secret Manager 会在 Ops Agent 初始化期间提取 Secret,从而防止明文 Secret 意外记录在日志中。

您只能在自定义 Ops Agent 配置的指标收集配置中使用 googlesecretmanager。请勿使用该提供程序替换日志收集配置中的 Secret。

准备工作

如需使用 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 项目的标识符。

  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:虚拟机的标识符。
    • SERVICE_ACCT_EMAIL:与虚拟机关联的服务账号的地址。

    如需了解详情,请参阅访问 Secret Manager API

  5. 向管理 Ops Agent 配置的用户授予创建和管理 Secret 所需的权限。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 项目的标识符。
    • USER_EMAIL:被授予该角色的用户的地址。
  6. 向与虚拟机关联的服务账号授予访问 Secret 所需的权限。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 项目的标识符。
    • SERVICE_ACCT_EMAIL:与虚拟机关联的服务账号的地址。
  7. 将明文 Secret 替换为托管式 Secret

    如需通过 Secret Manager 和 googlesecretmanager 提供程序在配置文件中不再使用明文 Secret,请执行以下操作:

    1. 在 Secret Manager 中为配置文件中的每个明文 Secret 创建一个 Secret。
    2. 将配置文件中的每个明文 Secret 替换为对 Secret Manager 中相应 Secret 的引用。

    例如,如果您使用的是 mysql 指标接收器,则配置文件可能包含如下所示的条目:

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

    在此示例中,您要将 plaintext-secret 字符串放入 Secret Manager 中,然后将明文 Secret 替换为对托管式 Secret 的引用。

    为明文 Secret 创建 Secret Manager Secret

    如需创建包含明文 Secret plaintext-secret 的 Secret Manager Secret,请运行以下命令:
    echo -n "plaintext-secret" | gcloud secrets create SECRET_NAME \
        --replication-policy="automatic" \
        --data-file=-
    

    在运行上述命令之前,请替换以下变量:

    • plaintext-secret:替换为明文 Secret。
    • SECRET_NAME:替换为 Secret 的含义明确的名称。

    新 Secret 的完全限定资源名称采用以下格式,其中 VERSION1

    projects/PROJECT_ID/secrets/SECRET_NAME/versions/VERSION

    如需详细了解如何在 Secret Manager 中对 Secret 进行存储、版本控制和访问,请参阅创建 Secret

    替换明文 Secret

    如需更新配置文件,请将每个明文 Secret 替换为对 googlesecretmanager 提供程序和托管式 Secret 的资源名称的引用,如以下示例所示:

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

    重启 Ops Agent

    Linux

    1. 要重启代理,请在您的实例上运行以下命令:
      sudo systemctl restart google-cloud-ops-agent
      
    2. 如需确认代理已重启,请运行以下命令并验证“Metrics Agent”和“Logging Agent”组件是否已启动:
      sudo systemctl status "google-cloud-ops-agent*"
      

    Windows

    1. 使用 RDP 或类似工具连接到您的实例,然后登录到 Windows。
    2. 右键点击 PowerShell 图标并选择 Run as Administrator,以管理员权限打开 PowerShell 终端
    3. 如需重启代理,请运行以下 PowerShell 命令:
      Restart-Service google-cloud-ops-agent -Force
      
    4. 如需确认代理已重启,请运行以下命令并验证“Metrics Agent”和“Logging Agent”组件是否已启动:
      Get-Service google-cloud-ops-agent*