Airflow-DAG级别的访问控制
创始人
2024-08-01 13:01:17
0

Airflow支持对DAG进行访问控制。可以通过以下方式实现:

  1. 创建角色和用户: 将所有用户分配给角色,并根据需要分配角色权限。
from airflow import models
from airflow.models import DAG, Variable, Connection
from airflow.models import DAG, DagBag, TaskInstance, TaskReschedule
from airflow.security import permissions, permissions as perms
from airflow.models.baseoperator import BaseOperator
from airflow.utils.db import provide_session
from datetime import datetime

# 创建一个“管理员”角色并授予权限
admin_role = models.Role(
    role_name="admin",
    permissions=[
        (permissions.ACTION_CAN_READ, permissions.RESOURCE_DAG),
        (permissions.ACTION_CAN_EDIT, permissions.RESOURCE_DAG),
        (permissions.ACTION_CAN_READ, permissions.RESOURCE_TASK_INSTANCE),
        (permissions.ACTION_CAN_EDIT, permissions.RESOURCE_TASK_INSTANCE),
    ],
)
# 创建一个名为“admin”的用户并将其分配给“管理员”角色。
admin_user = models.User(
    email='admin@example.com',
    username='admin',
    password='your_password',
    roles=[admin_role],
)

# 创建一个“开发”角色并授予权限
developer_role = models.Role(
    role_name="developer",
    permissions=[
        (permissions.ACTION_CAN_READ, permissions.RESOURCE_DAG),
        (permissions.ACTION_CAN_EDIT, permissions.RESOURCE_TASK_INSTANCE),
    ],
)
# 创建一个名为“dev”的用户并将其分配给“开发人员”角色。
dev_user = models.User(
    email='dev@example.com',
    username='dev',
    password='your_password',
    roles=[developer_role],
)
  1. 编写DAG,并添加访问控制: 使用DAG中的access_control方法实现访问控制。
from airflow import DAG
from airflow.operators.python_operator import PythonOperator

# 用于演示的任务,打印“Hello World!”
def my_task():
    print("Hello World!")

# 创建一个DAG,命名为“my_dag”,调度每天上午9点00分。
dag = DAG(
    "my_dag",
    default_args={"owner": "me"},
    schedule_interval="@daily 9:00",
)

# 添加一个名为“run_my_task”的任务,并将其设置为PythonOperator
run_my_task = PythonOperator(
    task_id="run_my_task",
    python_callable=my_task,
    dag=dag,
)

# DAG需要管理员角色才能读取和编辑它
dag.access_control = {
    "admin": {"can_read", "can_edit"},
    "developer": {"can_read"},
}

定义access_control之后,只有具有适当权限的用户才能编辑和读取DAG。 此外,还可以在DAG和Operator级别配置访问控制,然后将它们分配给角色。

相关内容

热门资讯

Android Studio ... 要解决Android Studio 4无法检测到Java代码,无法打开SDK管理器和设置的问题,可以...
安装tensorflow mo... 要安装tensorflow models object-detection软件包和pandas的每个...
安装了Laravelbackp... 检查是否创建了以下自定义文件并进行正确的配置config/backpack/base.phpconf...
安装了centos后会占用多少... 安装了CentOS后会占用多少内存取决于多个因素,例如安装的软件包、系统配置和运行的服务等。通常情况...
按照Laravel方式通过Pr... 在Laravel中,我们可以通过定义关系和使用查询构建器来选择模型。首先,我们需要定义Profile...
按照分类ID显示Django子... 在Django中,可以使用filter函数根据分类ID来筛选子类别。以下是一个示例代码:首先,假设你...
Android Studio ... 要给出包含代码示例的解决方法,我们可以使用Markdown语法来展示代码。下面是一个示例解决方案,其...
Android Retrofi... 问题描述:在使用Android Retrofit进行GET调用时,获取的响应为空,即使服务器返回了正...
Alexa技能在返回响应后出现... 在开发Alexa技能时,如果在返回响应后出现问题,可以按照以下步骤进行排查和解决。检查代码中的错误处...
Airflow Dag文件夹 ... 要忽略Airflow中的笔记本检查点,可以在DAG文件夹中使用以下代码示例:from airflow...