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

如何在生产服务器中安全存储与使用credential.json文件

安全使用谷歌服务账号密钥的方案

针对生产环境不想上传credential.json文件的需求,你可以利用google.oauth2.service_account.Credentials.from_service_account_info()方法,结合python-decouple通过环境变量管理密钥内容,以下是两种可行方案:

方案一:拆分JSON字段为单个环境变量

将credential.json中的每个字段单独存入环境变量,再通过代码组装成字典:

  1. 配置环境变量
    在开发环境的.env文件中添加以下内容(替换为你的实际密钥信息):

    GS_TYPE=service_account
    GS_PROJECT_ID=你的项目ID
    GS_PRIVATE_KEY_ID=你的私钥ID
    GS_PRIVATE_KEY="-----BEGIN PRIVATE KEY-----\n你的私钥内容\n-----END PRIVATE KEY-----\n"
    GS_CLIENT_EMAIL=你的服务账号邮箱
    GS_CLIENT_ID=你的客户端ID
    GS_AUTH_URI=https://accounts.google.com/o/oauth2/auth
    GS_TOKEN_URI=https://oauth2.googleapis.com/token
    GS_AUTH_PROVIDER_X509_CERT_URL=https://www.googleapis.com/oauth2/v1/certs
    GS_CLIENT_X509_CERT_URL=https://www.googleapis.com/robot/v1/metadata/x509/你的服务账号邮箱%40你的项目ID.iam.gserviceaccount.com
    

    生产环境则直接在服务器设置对应环境变量(如Linux系统可通过export命令或配置文件永久生效)。

  2. 代码实现

    from google.oauth2 import service_account
    from decouple import config
    
    # 组装服务账号信息字典
    gs_service_account_info = {
        "type": config("GS_TYPE"),
        "project_id": config("GS_PROJECT_ID"),
        "private_key_id": config("GS_PRIVATE_KEY_ID"),
        "private_key": config("GS_PRIVATE_KEY").replace('\\n', '\n'),
        "client_email": config("GS_CLIENT_EMAIL"),
        "client_id": config("GS_CLIENT_ID"),
        "auth_uri": config("GS_AUTH_URI"),
        "token_uri": config("GS_TOKEN_URI"),
        "auth_provider_x509_cert_url": config("GS_AUTH_PROVIDER_X509_CERT_URL"),
        "client_x509_cert_url": config("GS_CLIENT_X509_CERT_URL")
    }
    
    GS_CREDENTIALS = service_account.Credentials.from_service_account_info(
        gs_service_account_info
    )
    

    注意:私钥中的换行符在环境变量中用\\n转义,代码中需要替换为真实的换行符\n,否则密钥会验证失败。

方案二:存储完整JSON字符串为单个环境变量

把整个credential.json的内容转义后作为单个环境变量存储,代码中直接解析为字典:

  1. 配置环境变量
    将credential.json的内容转为合法的字符串(注意转义双引号),存入.env或生产环境变量:

    GS_SERVICE_ACCOUNT_JSON='{"type": "service_account", "project_id": "你的项目ID", "private_key_id": "你的私钥ID", "private_key": "-----BEGIN PRIVATE KEY-----\n你的私钥内容\n-----END PRIVATE KEY-----\n", "client_email": "你的服务账号邮箱", ...}'
    
  2. 代码实现

    from google.oauth2 import service_account
    from decouple import config
    import json
    
    # 解析环境变量中的JSON字符串为字典
    gs_service_account_info = json.loads(config("GS_SERVICE_ACCOUNT_JSON"))
    
    GS_CREDENTIALS = service_account.Credentials.from_service_account_info(
        gs_service_account_info
    )
    

    这种方法更简洁,无需逐个字段配置,但要确保JSON字符串格式完全正确。

额外安全建议

  • 确保生产服务器的环境变量仅对运行应用的用户可见,避免权限泄露;
  • 若使用容器部署(如Docker、K8s),优先使用容器平台的密钥管理功能(如K8s Secrets)存储环境变量,而非明文配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 17:43:03