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

能否识别触发Cloud Build构建的调用者身份?

Cloud Build工作流识别触发主体的方案

问题背景

我有一个Cloud Build工作流,通过gcloud builds triggers run my-workflow触发,想让工作流识别执行该命令的主体(比如wasabi@foo.com或1234567890-service-account@google.com),不接受通过--substitution传递邮箱的方式。注意这里要识别的不是运行构建的服务账号(该信息可通过$SERVICE_ACCOUNT[_EMAIL]直接获取),而是执行触发命令的调用者。

调研后了解到IAP可能实现,但相关案例多针对Cloud Functions或应用服务,不确定是否适用于GCB,同时有两个疑问:

  1. 对调用者有何要求?是否需要执行额外操作/命令,还是只需正常运行gcloud builds triggers run,IAP在后台自动生效?
  2. 工作流如何获取该身份信息?

可行实现方案

方案一:通过Cloud Audit Logs反向查询调用者

当用户执行gcloud builds triggers run时,Google Cloud会生成对应审计日志(属于Cloud Build的google.devtools.cloudbuild.v1.CloudBuildService.RunBuildTrigger操作日志)。可以在工作流中添加步骤,调用Cloud Logging API查询对应日志提取调用者身份:

  • 前置配置:为Cloud Build使用的服务账号(内置或自定义)授予logging.viewer权限,允许读取审计日志。
  • 构建脚本内的查询逻辑:
    # 用当前构建的唯一ID作为查询条件
    BUILD_ID="${BUILD_ID}"
    # 查询触发当前构建的审计日志,提取调用者邮箱
    CALLER_EMAIL=$(gcloud logging read "resource.type=cloud_build AND protoPayload.build.id=${BUILD_ID} AND protoPayload.methodName=google.devtools.cloudbuild.v1.CloudBuildService.RunBuildTrigger" --format="value(protoPayload.authenticationInfo.principalEmail)" --limit=1)
    echo "触发者身份:${CALLER_EMAIL}"
    
  • 注意:审计日志生成有几秒延迟,建议在脚本中添加sleep 5之类的等待逻辑,确保日志已生成。

方案二:IAP保护Cloud Build触发API(适用于API触发场景)

如果触发场景包含API调用,可通过IAP保护Cloud Build的REST API端点,但无法直接兼容默认的gcloud builds triggers run命令:

  1. 调用者要求:
    • 调用者必须通过IAP认证,调用runBuildTrigger API时需携带IAP生成的ID令牌。
    • 若用命令行触发,需自定义调用逻辑,示例:
      # 获取IAP身份令牌
      IAP_TOKEN=$(gcloud auth print-identity-token --audiences="https://cloudbuild.googleapis.com/")
      # 调用Cloud Build API触发工作流,携带IAP令牌
      curl -X POST "https://cloudbuild.googleapis.com/v1/projects/[你的项目ID]/triggers/my-workflow:run" \
        -H "Authorization: Bearer ${IAP_TOKEN}" \
        -H "Content-Type: application/json" \
        -d '{}'
      
  2. 工作流获取身份信息:
    • 经过IAP验证的请求,Cloud Build会将调用者身份映射到构建元数据中,可通过元服务器获取:
      CALLER_EMAIL=$(curl -H "Metadata-Flavor: Google" http://metadata.google.internal/computeMetadata/v1/instance/attributes/x-goog-authenticated-user-email)
      
    • 此方式需要额外配置IAP保护Cloud Build API,且无法直接使用默认gcloud命令触发。

针对疑问的直接解答

  1. 调用者要求:
    • 方案一:无需额外操作,调用者正常执行gcloud builds triggers run即可,只需确保Cloud Build服务账号有日志读取权限。
    • 方案二:调用者必须通过IAP认证,不能用默认gcloud命令,需自定义API调用流程并携带IAP令牌。
  2. 工作流获取身份方式:
    • 方案一:通过Cloud Logging API查询审计日志,提取protoPayload.authenticationInfo.principalEmail字段。
    • 方案二:通过构建元数据的x-goog-authenticated-user-email属性获取调用者身份。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 16:48:18