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

如何从跨项目Cloud Run服务认证调用Cloud Composer Airflow REST API

跨项目Cloud Run调用Cloud Composer Airflow API触发DAG(无库实现)

一、前置权限配置

  • 给Cloud Run的服务账号绑定roles/airflow.admin(或更细粒度的权限,比如仅允许触发DAG的自定义权限),在Composer所在项目中添加该服务账号为成员。
  • 在IAP控制台中,找到Composer Airflow UI对应的资源(URL为你的Composer Airflow地址),将Cloud Run的服务账号添加为成员,授予IAP-secured Web App User角色。

二、获取认证令牌(Cloud Run环境专属,无需本地凭证)

在Cloud Run容器内,直接向GCP元数据服务器请求针对IAP受众的ID Token:

GET http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/identity?audience=<IAP_CLIENT_ID>
Host: metadata.google.internal
Metadata-Flavor: Google
  • 替换<IAP_CLIENT_ID>为你的Composer Airflow对应的IAP客户端ID,可通过gcloud composer environments describe <ENV_NAME> --location <REGION>命令查看,或在Composer环境详情页的「Airflow UI」板块找到。
  • 请求返回的ID Token有效期为1小时,可直接用于后续API认证。

三、构造触发DAG的HTTP请求

Airflow API触发DAG的端点格式:https://<COMPOSER_AIRFLOW_URL>/api/v1/dags/<DAG_ID>/dagRuns

  • 替换<COMPOSER_AIRFLOW_URL>为你的Composer Airflow UI地址(去掉末尾的/admin后缀),<DAG_ID>为目标DAG的ID。

请求参数

  • 方法:POST
  • 请求头:
    • Authorization: Bearer <ID_TOKEN> (填入第二步获取的ID Token)
    • Content-Type: application/json
  • 请求体(JSON格式,可选传递DAG运行参数):
{
  "conf": {
    "custom_param1": "value1",
    "custom_param2": "value2"
  }
}

完整请求示例

POST https://example-composer-abcdef.cloud.google.com/api/v1/dags/my_test_dag/dagRuns
Authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6Ij...
Content-Type: application/json

{
  "conf": {
    "batch_id": "20240520_001"
  }
}

四、非Cloud Run环境无库生成令牌(本地/第三方环境)

如果需要在非GCP环境手动构造认证流程,步骤如下:

  1. 从GCP控制台下载服务账号JSON密钥,提取private_key、client_email、token_uri(默认值为https://oauth2.googleapis.com/token)。
  2. 构造JWT:
    • Header:{"alg": "RS256", "typ": "JWT"}
    • Payload:
      {
        "iss": "<CLIENT_EMAIL>",
        "aud": "<TOKEN_URI>",
        "target_audience": "<IAP_CLIENT_ID>",
        "exp": <当前时间戳+3600>,
        "iat": <当前时间戳>
      }
      
  3. 用RS256算法,使用服务账号私钥对JWT进行签名。
  4. 向token_uri发送POST请求换取ID Token:
    POST https://oauth2.googleapis.com/token
    Content-Type: application/x-www-form-urlencoded
    
    grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&assertion=<签名后的JWT>
    
    返回结果中的id_token即为IAP认证令牌,后续步骤同第三步。

五、注意事项

  • 跨项目权限需双向配置:Composer所在项目要允许Cloud Run服务账号访问,IAP访问控制列表必须包含该服务账号。
  • 若无需传递参数,请求体可简化为{}。
  • 确认Composer环境的Airflow版本支持v1 API(Airflow 2.x默认兼容)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 16:43:14