Env :我们使用运行气流达格。目的:利用apache气流稳定apis在REST外部触发dags。
我们试图通过在composer: airflow.api.auth.backend.default中设置气流覆盖配置和发出IAP请求,使用气流实验apis在外部触发dags。效果很好。我们遵循了https://cloud.google.com/composer/docs/how-to/using/triggering-with-gcf中描述的步骤。
从气流2.0.0 +开始,提出了气流实验apis,并引入了新的稳定apis。新的稳定api不支持airflow.api.auth.backend.default。因此,它是投掷:403被禁止。
我们也尝试过使用auth_backend : airflow.api.auth.backend.basic_auth,但这也不能工作,因为当我们在授权头中传递用户/密码时,我们无法传递IAP。
发布于 2021-12-03 16:04:29
TL‘’DR版本:
为了使气流稳定的API在GCP Composer中工作:
Longread:
我们现在使用了一段时间的气流,从版本1.x.x开始使用“试验性”(现在已不再推荐)API。
为了授权,我们使用从服务帐户获得的“比勒”令牌:
# 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)现在我们正在迁移到气流2.x.x,并面临着完全相同的问题:403被禁止的。
我们的环境细节如下:
composer-1.17.3-气流-2.1.2(谷歌云平台)
"api-auth_backend“设置为"airflow.api.auth.backend.default”。
文档声称:
在将auth_backend配置选项设置为airflow.api.auth.backend.default之后,气流web服务器接受所有API请求而不进行身份验证。
然而,这似乎不是真的。
在实验中,我们发现如果“auth”设置为"airflow.composer.api.backend.composer_auth",稳定REST (Airflow 2.X.X)开始工作。
但对此还有其他的警告:对我们来说,我们的一些服务账户确实起作用,而有些则没有。不起作用的是抛出"401未经授权“错误。我们发现,具有电子邮件长度>64个符号的帐户正在抛出错误。听了这个答案观察到的情况也是一样。
因此,在将“auth”设置为"airflow.composer.api.backend.composer_auth"并确保我们的服务帐户电子邮件长度为<64个符号之后,我们的空气流量1.x.x的旧代码开始用于身份验证。然后,我们需要进行更改(API URL和响应处理),稳定的气流(2.x.x) API开始为我们工作,就像对气流1.x.x一样。
UPD:这是气流的缺陷,将在这里修复:https://github.com/apache/airflow/pull/19932
发布于 2021-10-08 10:55:47
https://stackoverflow.com/questions/68679852
复制相似问题