You need to enable JavaScript to run this app. 如何将GCP Secret Manager存储的密钥设置为云函数环境变量
优惠活动
大模型
产品
解决方案
定价
更多

如何将GCP Secret Manager存储的密钥设置为云函数环境变量

GCP云函数调用Secret Manager密钥的替代实现方案

以下是三种不需要本地存储密钥文件的可行实现方式,按优先级排序:

  • 云函数原生绑定Secret Manager密钥(官方推荐,安全性最高)
    不需要修改业务代码,直接通过云函数配置完成密钥注入:

    1. 先为云函数的运行时服务账号授予roles/secretmanager.secretAccessor角色,确保有权限访问目标密钥
    2. 部署云函数时直接指定从Secret Manager读取内容作为环境变量,gcloud部署命令示例如下:
    gcloud functions deploy 你的函数名称 \
      --runtime python39 \
      --trigger-http \
      --set-secrets 'GOOGLE_APPLICATION_CREDENTIALS=projects/你的项目ID/secrets/你的密钥名称/versions/latest'
    

    该方式由GCP自动完成密钥的注入和生命周期管理,不需要将密钥放入代码包或本地存储,也不需要在代码中手动处理密钥读取逻辑。

  • 运行时拉取密钥直接初始化客户端(无需设置环境变量)
    如果你已经可以在代码中正常访问Secret Manager,可以直接拉取密钥内容初始化对应服务客户端,完全不需要设置GOOGLE_APPLICATION_CREDENTIALS环境变量,Python示例代码如下:

    import json
    from google.cloud import secretmanager, billingbudgets
    
    # 初始化Secret Manager客户端拉取密钥
    secret_client = secretmanager.SecretManagerServiceClient()
    secret_version_path = "projects/你的项目ID/secrets/你的密钥名称/versions/latest"
    secret_resp = secret_client.access_secret_version(request={"name": secret_version_path})
    sa_key_content = json.loads(secret_resp.payload.data.decode("utf-8"))
    
    # 直接用密钥内容初始化预算服务客户端
    budget_client = billingbudgets.BudgetServiceClient.from_service_account_info(sa_key_content)
    # 后续直接调用budget_client的对应方法获取预算列表即可
    
  • 临时写入内存文件系统(仅兼容强依赖环境变量的场景)
    如果你使用的第三方依赖必须读取本地密钥文件路径,可以将拉取到的密钥内容写入云函数唯一可写的/tmp临时目录,再设置环境变量指向该临时文件,示例代码如下:

    import os
    import json
    from google.cloud import secretmanager
    
    # 拉取密钥内容
    secret_client = secretmanager.SecretManagerServiceClient()
    secret_version_path = "projects/你的项目ID/secrets/你的密钥名称/versions/latest"
    secret_content = secret_client.access_secret_version(request={"name": secret_version_path}).payload.data.decode("utf-8")
    
    # 写入临时目录
    tmp_key_path = "/tmp/sa_key.json"
    with open(tmp_key_path, "w", encoding="utf-8") as f:
        f.write(secret_content)
    
    # 设置环境变量
    os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = tmp_key_path
    

    云函数的/tmp目录数据仅在当前函数实例存活期间有效,实例销毁后会自动清空,不会残留密钥数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 11:18:02