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

如何通过Google工作负载身份联盟从AWS触发Cloud Function?

问题:通过AWS EC2使用GCP工作负载身份联盟调用Cloud Function失败

我正尝试从AWS EC2实例(服务端)触发已授权的Cloud Function,计划用GCP工作负载身份联盟(WIF)实现,但遇到了问题。此前已通过WIF成功列出Cloud Storage存储桶,也能通过WIF调用Deployment Manager API部署计算实例,但相同逻辑无法应用到Cloud Function调用上。

已完成的配置步骤

  • 创建带有对应IAM角色的AWS EC2实例
  • 创建GCP工作负载身份联盟池
  • 创建具备调用目标Cloud Function权限的服务账号
  • 绑定工作负载身份联盟池与上述服务账号,生成clientLibraryConfig.json配置文件

另外有个疑问:我没有组织账号,无法在组织策略中启用联盟,是否可以跳过这个步骤实现目标?

Node.js代码尝试及报错

我用Node.js编写的调用代码如下:

function main() {
  const {GoogleAuth} = require('google-auth-library');
  const auth = new GoogleAuth();
  const url = 'https://us-central1-multi-service-app-js.cloudfunctions.net/helloHttp',
  const targetAudience = 'https://us-central1-multi-service-app-js.cloudfunctions.net/helloHttp'

    const client = await auth.getIdTokenClient(targetAudience);
    const res = await client.request({url});
    console.info(res.data);
  }

  request().catch(err => {
    console.error(err.message);
    process.exitCode = 1;
  });
}

main();

执行后出现错误:

Cannot fetch ID token in this environment, use GCE or set the GOOGLE_APPLICATION_CREDENTIALS environment variable to a service account credentials JSON file.

我已经通过export命令设置GOOGLE_APPLICATION_CREDENTIALS指向clientLibraryConfig.json,也配置了GOOGLE_CLOUD_PROJECT环境变量,但报错依旧。

更新:Python SDK尝试及报错

改用Python SDK通过WIF调用Cloud Function,遇到以下错误:

google.auth.exceptions.RefreshError: ('Unable to acquire impersonated credentials', '{
  "error": {
    "code": 400,
    "message": "Request contains an invalid argument.",
    "status": "INVALID_ARGUMENT"
  }
}
')

初步推测

由于调用Cloud Function需要先获取ID Token,我怀疑问题出在ID Token的获取环节,且Node.js和Python SDK均出现同类问题,推测是google-auth-library中GoogleAuth模块在处理WIF场景下的ID Token获取存在问题,目前已向GCP提交相关工单。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 08:05:23