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

GCP如何无需密钥文件以服务账号身份运行Python应用

回答

当然有无需下载服务账号密钥文件、让Python程序以服务账号身份运行的方案,和gcloud、gsutil自带的--impersonate-service-account参数逻辑完全一致,谷歌云官方Python客户端原生支持该能力,全程不需要落地静态密钥文件,安全风险极低。

服务账号密钥若被泄露会带来安全风险,我们建议您避免下载服务账号密钥。

前置权限要求

不管用下面哪种实现方式,首先要给当前运行程序所使用的身份(本地开发时的个人谷歌云账号、GCE/GKE/Cloud Run/Cloud Function等GCP托管环境绑定的默认服务账号),绑定目标服务账号的roles/iam.serviceAccountTokenCreator角色,否则模拟请求会直接被IAM权限拦截。

具体实现方案

  • 客户端初始化时直接指定模拟目标
    所有官方Google Cloud Python客户端都自带impersonate_service_account初始化参数,传入目标服务账号的邮箱即可生效,不需要额外安装依赖或做其他配置,示例代码:

    from google.cloud import storage
    
    # 初始化存储客户端时直接指定要模拟的服务账号
    storage_client = storage.Client(
        impersonate_service_account="target-sa@your-project-id.iam.gserviceaccount.com"
    )
    
    # 后续所有接口调用都会以目标服务账号的身份执行
    buckets = list(storage_client.list_buckets())
    

    这个参数是所有GCP服务官方客户端的通用配置项,BigQuery、Pub/Sub、Vertex AI等服务的客户端初始化时都可以直接传入使用。

  • 配置环境变量全局生效
    如果不想在每个客户端初始化代码里重复加参数,可以设置全局环境变量GOOGLE_IMPERSONATE_SERVICE_ACCOUNT,值填目标服务账号邮箱,之后所有初始化的官方客户端都会自动走服务账号模拟逻辑,完全不需要修改业务代码:

    # 执行Python程序前先设置环境变量
    export GOOGLE_IMPERSONATE_SERVICE_ACCOUNT=target-sa@your-project-id.iam.gserviceaccount.com
    python your_app.py
    
  • 本地开发场景通过gcloud配置默认凭证模拟
    本地开发调试时,还可以直接通过gcloud命令给应用默认凭证(ADC)配置默认模拟规则,配置完成后本地跑程序不需要改代码、也不需要额外设置环境变量,自动以目标服务账号身份运行:

    # 配置默认模拟的服务账号
    gcloud config set auth/impersonate_service_account target-sa@your-project-id.iam.gserviceaccount.com
    # 需要取消配置时执行下面的命令即可
    gcloud config unset auth/impersonate_service_account
    

以上几种方案全程都不会生成或下载持久化的服务账号密钥文件,身份凭证都是运行时动态申请的短期有效令牌,不存在静态密钥泄露的风险,完全符合安全规范要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 07:39:20