跳转到内容

Airflow API安全

来自代码酷

Airflow API安全[编辑 | 编辑源代码]

介绍[编辑 | 编辑源代码]

Apache Airflow 的 API安全 机制确保用户和系统能够安全地与 Airflow 的 REST API 交互,防止未授权访问和数据泄露。Airflow API 提供了任务触发、DAG 管理、监控等功能,因此保护其安全性至关重要。本节将详细介绍 Airflow API 的安全机制,包括身份验证、授权、加密和最佳实践。

身份验证机制[编辑 | 编辑源代码]

Airflow 支持多种 API 身份验证方式,适用于不同安全需求的环境:

1. 基本身份验证(Basic Auth)[编辑 | 编辑源代码]

通过用户名和密码验证,适用于简单场景,但建议仅在 HTTPS 环境下使用。

# 示例:使用 requests 调用 Airflow API(Basic Auth)
import requests

url = "http://<airflow-server>/api/v1/dags"
response = requests.get(
    url,
    auth=('username', 'password'),
    headers={'Content-Type': 'application/json'}
)
print(response.json())

输出示例:

{
  "dags": [
    {"dag_id": "example_dag", "is_paused": false},
    ...
  ]
}

2. JWT(JSON Web Tokens)[编辑 | 编辑源代码]

Airflow 支持 JWT 身份验证,适用于分布式系统和自动化脚本。需在 `airflow.cfg` 中配置密钥和算法。

# 示例:生成 JWT 并调用 API
import jwt
import requests

secret_key = "your-secret-key"
payload = {"user": "admin"}
token = jwt.encode(payload, secret_key, algorithm="HS256")

response = requests.get(
    "http://<airflow-server>/api/v1/dags",
    headers={"Authorization": f"Bearer {token}"}
)

3. OAuth[编辑 | 编辑源代码]

集成第三方身份提供商(如 Google、GitHub),适合企业级部署。需配置 `airflow.cfg` 中的 `[api]` 部分。

授权与角色管理[编辑 | 编辑源代码]

Airflow 使用基于角色的访问控制(RBAC)限制 API 操作权限。默认角色包括:

  • Admin:完全访问权限。
  • User:仅限查看和触发 DAG。
  • Op:可操作任务实例。

通过 Flask AppBuilder(FAB)管理角色,可在 Airflow UI 的 `Security -> Roles` 中配置。

加密与 HTTPS[编辑 | 编辑源代码]

为确保数据传输安全: 1. 启用 HTTPS(例如使用 Nginx 反向代理配置 SSL/TLS)。 2. 在 `airflow.cfg` 中设置 `[webserver]` 的 `web_server_ssl_cert` 和 `web_server_ssl_key`。

实际案例[编辑 | 编辑源代码]

场景:自动化 DAG 触发与安全审计 某公司使用 Airflow API 实现 CI/CD 流水线,要求: 1. 仅允许内部系统通过 JWT 调用 API。 2. 记录所有 API 请求日志用于审计。

配置步骤: 1. 在 `airflow.cfg` 中启用 JWT:

   [api]
   auth_backends = airflow.api.auth.backend.jwt
   jwt_secret_key = your-strong-secret

2. 使用脚本自动化调用:

   token = jwt.encode(
       {"user": "ci-system", "exp": datetime.utcnow() + timedelta(minutes=30)},
       "your-strong-secret",
       algorithm="HS256"
   )
   requests.post(
       "https://airflow.example.com/api/v1/dags/example_dag/dagRuns",
       json={"conf": {}},
       headers={"Authorization": f"Bearer {token}"}
   )

安全最佳实践[编辑 | 编辑源代码]

  • 定期轮换 JWT 密钥和 SSL 证书。
  • 限制 API 访问 IP 范围(通过网络防火墙或 `[api]` 的 `auth_rate_limited`)。
  • 禁用未使用的身份验证后端。

总结[编辑 | 编辑源代码]

Airflow API 安全是生产环境部署的核心环节,需结合身份验证、授权、加密和监控。初学者应从 Basic Auth 或 JWT 入手,而企业用户应部署 OAuth 和 RBAC。

graph TD A[客户端请求] --> B{身份验证} B -->|成功| C[授权检查] B -->|失败| D[返回 401] C -->|有权限| E[执行 API 操作] C -->|无权限| F[返回 403]