GCP部署Django如何不推送凭证文件至公共仓库仍保障应用正常运行
操作方案
第一步:先彻底阻断凭证文件的Git提交
- 打开项目根目录下的
.gitignore文件,新增一行配置:credential.json,如果后续用.env存环境变量,也一并加上.env - 如果之前已经把
credential.json加入过Git追踪,执行命令移除追踪记录(不会删除你本地的真实文件):
git rm --cached credential.json
- 注意:如果之前已经把凭证推送到过公共仓库,立刻去GCP控制台作废该密钥,重新生成新的服务账号密钥,旧密钥已经存在泄露风险,删除仓库提交记录也无法彻底消除风险
第二步:改造settings.py里的硬编码逻辑,适配多环境凭证加载
不要把凭证路径硬编码在代码里,改成从环境变量读取,适配GCP默认的应用凭证链逻辑,替换你原来的配置代码为:
import os from pathlib import Path # 优先读取系统注入的GOOGLE_APPLICATION_CREDENTIALS环境变量 cred_path = os.getenv("GOOGLE_APPLICATION_CREDENTIALS") if cred_path and Path(cred_path).is_file(): os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = cred_path
改造后代码不会强依赖项目目录下的credential.json,会自动适配不同环境的凭证来源。
第三步:分环境配置凭证,保证程序正常运行
本地开发环境
- 把你本地的
credential.json从项目目录移到本地非项目的安全路径(比如用户目录下的隐藏文件夹~/.gcp/),不要放在Git管理的项目目录内 - 本地配置环境变量:可以直接在你本地电脑的系统环境变量里添加
GOOGLE_APPLICATION_CREDENTIALS,值为你本地凭证文件的绝对路径;也可以配合python-dotenv库,在项目根目录创建不提交到Git的.env文件写入该变量配置,同时提交一个.env.example模板文件到仓库,只标注需要配置的变量名,不填真实值,方便协作者参考。 - 如果你本地装了gcloud CLI并完成过登录认证,甚至不需要单独配置服务账号密钥,GCP凭证链会自动读取你本地的gcloud登录凭证访问资源。
部署环境
- 如果部署在GCP生态内的服务(Cloud Run、App Engine、GKE、Compute Engine等):完全不需要手动上传凭证文件,只要给部署服务绑定的服务账号分配Cloud Storage对应的操作权限即可,GCP会自动注入凭证,程序不需要做任何额外配置就能访问存储桶。
- 如果部署在非GCP的服务器上:不要把凭证文件放在代码目录随代码提交,通过私密传输方式(比如scp、服务器密钥管理系统)把凭证文件放到服务器上项目外的安全路径,在服务器的系统环境变量里配置
GOOGLE_APPLICATION_CREDENTIALS指向该路径即可。
第四步:项目交接处理
公共仓库内不要存放任何真实密钥内容,在项目README文档里说明GCS存储的权限要求、需要配置的环境变量清单即可,真实的凭证文件通过加密的私密渠道单独交接给相关人员,不要经过公共仓库传输。
内容的提问来源于stack exchange,提问作者Rai Shahnawaz
相关产品推荐
相关产品推荐

