You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GCP Cloud Run使用Terraform传Secret,如何隐藏修订历史中的明文?

解决Cloud Run修订历史中Secret明文暴露的问题

核心问题原因

Cloud Run的命令行参数(args)会明文存储在服务修订历史里,直接把Secret值写进args必然导致明文泄露。正确的做法是通过环境变量间接传递Secret,让args只引用环境变量名,而环境变量从Secret Manager挂载。

正确的Terraform配置方案

以下是完整的配置示例,包含环境变量挂载、权限配置和参数引用:

# 读取Secret Manager中的Token
data "google_secret_manager_secret_version" "probe_api_token" {
  secret = "PROBE_API_TOKEN"
}

# 创建Cloud Run服务
resource "google_cloud_run_service" "synthetic_monitoring_agent" {
  name     = "synthetic-monitoring-agent"
  location = "us-central1"

  template {
    spec {
      containers {
        image = "grafana/synthetic-monitoring-agent:latest"

        # 从Secret Manager挂载环境变量
        env {
          name = "PROBE_API_TOKEN"
          value_from {
            secret_key_ref {
              name = data.google_secret_manager_secret_version.probe_api_token.secret
              key  = "latest" # 可替换为具体版本号,比如"1"
            }
          }
        }

        # 在args中引用环境变量(shell变量格式)
        args = ["--api-token", "$PROBE_API_TOKEN"]
      }

      # 指定有权限访问Secret的服务账号
      service_account_name = google_service_account.run_sa.email
    }
  }

  traffic {
    percent         = 100
    latest_revision = true
  }
}

# 创建专用服务账号(可选,推荐使用)
resource "google_service_account" "run_sa" {
  account_id = "cloud-run-synthetic-agent-sa"
}

# 给服务账号赋予Secret访问权限
resource "google_project_iam_member" "run_sa_secret_access" {
  project = var.project_id
  role    = "roles/secretmanager.secretAccessor"
  member  = "serviceAccount:${google_service_account.run_sa.email}"
}

关键注意事项

  1. 环境变量挂载方式:必须使用value_from.secret_key_ref,而不是直接赋值value,这样Cloud Run只会存储Secret的引用,不会明文保存值。
  2. args中的变量引用:用$PROBE_API_TOKEN引用环境变量,这是shell的标准变量格式,服务启动时会自动替换为实际的Secret值,修订历史中只会显示变量名。
  3. 权限配置:必须给Cloud Run使用的服务账号赋予roles/secretmanager.secretAccessor角色,否则服务启动时无法读取Secret,会出现权限错误。

验证效果

部署完成后:

  • 查看Cloud Run控制台的修订历史,args字段只会显示--api-token $PROBE_API_TOKEN,看不到明文Token;
  • 查看服务日志,确认synthetic-monitoring-agent正常启动并连接到Grafana,说明Token读取正确。

内容的提问来源于stack exchange,提问作者Young

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 08:33:25