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

如何在Digital Ocean中安全配置GOOGLE_APPLICATION_CREDENTIALS

完全可以用启动时动态生成json文件的方案,以下是Digital Ocean Droplet环境下可落地的实现方式,所有方案均无需把GCP密钥提交到代码仓库。

方案1:启动时动态生成密钥文件(适配你已验证可行的逻辑)

你当前已经把GCP密钥的完整json内容存在环境变量里,只需要调整少量逻辑就能适配Google SDK的要求:

  • 如果你不想修改现有环境变量的名称,也可以直接读取当前GOOGLE_APPLICATION_CREDENTIALS存储的json内容生成密钥文件,之后再覆盖该变量为生成的文件路径即可;如果担心和其他逻辑冲突,也可以把存json内容的环境变量重命名(比如改成GOOGLE_CREDENTIALS_RAW),DO面板配置的环境变量直接改名称即可。
  • 两种预处理实现方式按需选择:
    • 启动脚本预处理(适合所有应用,修改原启动命令即可)
      把原来的应用启动命令替换为以下脚本:
      # 从环境变量读取json内容,生成临时密钥文件
      echo "$GOOGLE_APPLICATION_CREDENTIALS" > /tmp/gcp-key.json
      # 强制设置文件权限为仅当前用户可读写,避免泄露
      chmod 600 /tmp/gcp-key.json
      # 设置Google SDK要求的路径环境变量
      export GOOGLE_APPLICATION_CREDENTIALS=/tmp/gcp-key.json
      # 启动原有应用
      你的原启动命令(比如node server.js、gunicorn app:app)
      
    • 应用代码内预处理(无需修改启动脚本)
      在应用代码的最开头(SDK初始化之前)添加文件写入逻辑,示例参考:
      Node.js实现:
      const fs = require('fs');
      const os = require('os');
      const path = require('path');
      const keyPath = path.join(os.tmpdir(), `gcp-key-${process.pid}.json`);
      fs.writeFileSync(keyPath, process.env.GOOGLE_APPLICATION_CREDENTIALS, { mode: 0o600 });
      process.env.GOOGLE_APPLICATION_CREDENTIALS = keyPath;
      
      Python/Go/Java等其他语言可使用对应的文件读写API实现相同逻辑,注意必须设置文件权限为仅当前用户可读。
  • 如果用systemd管理应用服务,可把上述预处理逻辑写到服务的ExecStartPre段,确保预处理脚本和应用的运行用户一致,避免出现密钥文件权限不足的问题。临时文件存在/tmp目录,Droplet重启后会自动清空,不会残留敏感内容。
方案2:用Droplet User Data预生成密钥文件(更安全,避免密钥明文存环境变量)

如果不想把密钥内容明文存在环境变量配置中,可以用DO Droplet的User Data初始化功能:

  • 创建或重置Droplet时,在User Data输入框中填写初始化脚本,首次启动时自动拉取并生成密钥文件:
    # 从你的私有存储位置(比如私有DO Spaces、加密的私人文件分享)下载json密钥
    curl -H "你的私有访问鉴权" 私有密钥下载地址 -o /home/你的部署用户/gcp-key.json
    chmod 600 /home/你的部署用户/gcp-key.json
    # 直接写入系统环境变量配置文件
    echo "export GOOGLE_APPLICATION_CREDENTIALS=/home/你的部署用户/gcp-key.json" >> /home/你的部署用户/.bashrc
    
  • 全程无需把密钥提交到代码仓库,也不会在平台的环境变量面板留下明文密钥。
方案3:CI/CD部署时注入密钥文件(适合自动化部署流程)

如果你用CI/CD工具(GitHub Actions、GitLab CI等)自动部署到Droplet:

  • 在CI工具的加密Secrets中存储你的GCP json密钥内容,部署脚本中自动把内容写入Droplet的本地非代码目录:
    # CI脚本执行,把加密存储的密钥内容写入Droplet
    ssh 部署用户@Droplet公网IP "echo '$CI中存的GCP密钥内容' > /home/deploy/gcp-key.json && chmod 600 /home/deploy/gcp-key.json"
    
  • 之后应用启动时直接指向该文件路径即可,密钥完全不会进入代码仓库。
安全注意事项
  • 所有生成的密钥文件必须设置权限为600,仅文件所有者可读写,避免服务器其他用户访问到密钥。
  • 不要把密钥文件放在代码仓库的目录下,优先放到/tmp或用户主目录的非代码文件夹中。
  • 定期轮换GCP服务账号的密钥,降低泄露后的风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.26 16:45:00