gpt4 book ai didi

google-cloud-platform - 如何使用部署在 GCP Cloud Composer 上的 Airflow Stable Rest API [Airflow version 2.0.0]

转载 作者:行者123 更新时间:2023-12-04 17:16:07 24 4
gpt4 key购买 nike

环境:我们使用 GCP 云 Composer 来运行 Airflow dags。目的:使用 apache airflow stable apis 在外部使用 REST 触发 dags。

我们尝试通过在 cloud composer 中设置 Airflow 覆盖配置来使用 Airflow 实验性 api 从外部触发 d​​ags:airflow.api.auth.backend.default 并发出 IAP 请求。它运作良好。我们遵循了 https://cloud.google.com/composer/docs/how-to/using/triggering-with-gcf 中描述的步骤.

现在从 Airflow 2.0.0 + 开始,不推荐使用 Airflow 实验性 API,并引入了新的稳定 API。新的稳定 api 不支持 airflow.api.auth.backend.default。因此它抛出:403 FORBIDDEN。

我们还尝试使用 auth_backend :airflow.api.auth.backend.basic_auth ,但这也不起作用,因为当我们在授权 header 中传递用户/密码时,我们无法传递 IAP Bearer token 。

  1. 请分享访问新 Airflow API 的步骤,类似于 https://cloud.google.com/composer/docs/how-to/using/triggering-with-gcf 中显示的访问实验性 API 的步骤。
  2. 我们是否需要进行双重授权,即首先使用 IAP 进行授权,然后使用 Airflow 进行授权?

最佳答案

TL'DR 版本:

为了使 Airflow Stable API 在 GCP Composer 上工作:

  1. 将“api-auth_backend”设置为“airflow.composer.api.backend.composer_auth”
  2. 确保您的服务帐户电子邮件长度为 <64 个符号
  3. 确保您的服务帐户具有所需的权限(Composer 用户角色应该足够)

长读:

我们现在使用 Airflow 有一段时间了,从 1.x.x 版开始使用“实验性”(现已弃用)API。

为了授权,我们使用通过服务帐户获得的“Bearer” token :

# Obtain an OpenID Connect (OIDC) token from metadata server or using service account.
google_open_id_connect_token = id_token.fetch_id_token(Request(), client_id)

# Fetch the Identity-Aware Proxy-protected URL, including an
# Authorization header containing "Bearer " followed by a
# Google-issued OpenID Connect token for the service account.
resp = requests.request(
method, url,
headers={'Authorization': 'Bearer {}'.format(
google_open_id_connect_token)}, **kwargs)

现在我们正在迁移到 Airflow 2.x.x 并面临完全相同的问题:403 禁止

我们的环境细节是:

composer-1.17.3-airflow-2.1.2(谷歌云平台)

“api-auth_backend”设置为“airflow.api.auth.backend.default”。

Documentation声称:

将 api-auth_backend 配置选项设置为 airflow.api.auth.backend.default 后,Airflow 网络服务器会接受所有未经身份验证的 API 请求。

然而,这似乎不是真的。

在实验中,我们发现如果“api-auth_backend”设置为“airflow.composer.api.backend.composer_auth”,稳定的 REST API (Airflow 2.X.X) 开始工作.

但对此还有其他警告:对我们来说,我们的一些服务帐户确实有效,而另一些则没有。那些不起作用的是抛出“401 Unauthorized”错误。我们发现电子邮件长度大于 64 个符号的帐户会抛出错误。同样观察到 at this answer .

所以在将“api-auth_backend”设置为“airflow.composer.api.backend.composer_auth”并确保我们的服务帐户电子邮件长度为<64个符号之后- 我们用于 Airflow 1.x.x 的旧代码开始用于身份验证。然后我们需要进行更改(API URL 和响应处理)并且稳定的 Airflow (2.x.x) API 开始为我们工作与 Airflow 1.x.x 的方式相同。

UPD:这是 Airflow 中的一个缺陷,将在此处修复:https://github.com/apache/airflow/pull/19932

关于google-cloud-platform - 如何使用部署在 GCP Cloud Composer 上的 Airflow Stable Rest API [Airflow version 2.0.0],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68679852/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com