如何用Vault获取的GCP访问令牌生成ID令牌调用Cloud Functions?
如何用GCP访问令牌生成Cloud Functions所需的ID令牌
可以通过两种方式实现:
1. 用现有访问令牌调用GCP IAM Credentials API生成ID令牌
你需要确保手中的访问令牌对应的服务账号拥有roles/iam.serviceAccountTokenCreator角色(或至少拥有iam.serviceAccounts.signJwt权限)。之后调用generateIdToken接口生成目标ID令牌:
curl -X POST "https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/your-service-account@your-project.iam.gserviceaccount.com:generateIdToken" \ -H "Authorization: Bearer YOUR_VAULT_ACCESS_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "audience": "https://us-central1-your-project.cloudfunctions.net/your-function", "includeEmail": true }'
关键注意:audience字段必须严格匹配你的Cloud Functions触发URL,否则生成的ID令牌会被Cloud Functions拒绝。
2. 直接通过Vault生成ID令牌(更高效)
Vault的GCP引擎支持直接生成ID令牌,无需先获取访问令牌再转换。只需:
- 配置RoleSet时,在
token_scopes中包含https://www.googleapis.com/auth/iam - 调用Vault的
gcp/id-token端点:
vault write gcp/id-token/your-roleset-name \ audience="https://us-central1-your-project.cloudfunctions.net/your-function"
该请求会直接返回可用于Cloud Functions认证的ID令牌,省去中间转换步骤。
额外注意事项
- 确保Vault关联的服务账号拥有生成ID令牌的权限,否则两种方式都会失败。
- Cloud Functions的身份验证规则需配置为接受该服务账号的身份凭证。
内容的提问来源于stack exchange,提问作者Shane
相关产品推荐
相关产品推荐

