::: IT인터넷 :::

AirFlow의 계정 생성, 권한 관리 방법 (CLI)

곰탱이푸우 2022. 6. 9. 08:20
AirFlow에서 WebUI를 사용하여 사용자의 계정과 권한을 관리하는 방법에 대해 정리한다.
 
WebUI로 계정과 권한을 관리하는 방법은 다음 포스팅을 참고한다.
Bitnami에서 배포한 AirFlow를 Docker로 설정하는 방법은 아래 포스팅을 참고한다.
AirFlow 소개와 구조는 아래 포스팅을 참고한다.
 

airflow 명령어 사용 방법

airflow가 설치 된 상태라면 airflow 명령어를 사용할 수 있다.
 

AirFlow 설치

설치 되어 있지 않다면 airflow를 설치해야 한다.
Docker를 이용하는 경우에는 컨테이너 내부에 airflow가 이미 설치되어 있으므로 설치하지 않아도 된다.
 
아래 명령으로 AirFlow를 설치한다.
$ pip install apache-airflow
 
설치가 완료되면 데이터베이스를 초기화 하고 airflow를 실행한다.
$ airflow db init
$ airflow webserver -p 8080
 
-p는 포트를 의미하며 다른 포트를 사용해도 무방하다.
물론 사용 중인 포트는 사용할 수 없다.
 

컨테이너 내부 진입

Docker를 이용하여 AirFlow를 사용 중이라면 컨테이너 내부로 진입해야 한다.
아래 명령을 사용한다.
$ docker exec -it airflow_airflow_1 /bin/bash
 
Bitnami에서 배포한 AirFlow를 Docker로 설정하는 방법은 아래 포스팅을 참고한다.

명령어 실행 방법

airflow가 실행 중인 시스템(또는 컨테이너)에서 airflow 명령을 실행하면 다음과 같은 도움말이 출력된다.
$ airflow
usage: airflow [-h] GROUP_OR_COMMAND ...
positional arguments:
  GROUP_OR_COMMAND
    Groups:
      celery        Celery components
      config        View configuration
      connections    Manage connections
      dags          Manage DAGs
      db            Database operations
      jobs          Manage jobs
      kubernetes    Tools to help run the KubernetesExecutor
      pools          Manage pools
      providers      Display providers
      roles          Manage roles
      tasks          Manage tasks
      users          Manage users
      variables      Manage variables
    Commands:
      cheat-sheet    Display cheat sheet
      info          Show information about current Airflow and environment
      kerberos      Start a kerberos ticket renewer
      plugins        Dump information about loaded plugins
      rotate-fernet-key
                    Rotate encrypted connection credentials and variables
      scheduler      Start a scheduler instance
      standalone    Run an all-in-one copy of Airflow
      sync-perm      Update permissions for existing roles and optionally DAGs
      triggerer      Start a triggerer instance
      version        Show the version
      webserver      Start a Airflow webserver instance
optional arguments:
  -h, --help        show this help message and exit
airflow command error: the following arguments are required: GROUP_OR_COMMAND, see help above.
 
사용자 계정과 권한 관리를 할 것이므로 users와 roles 명령을 사용한다.
 

계정 관리

airflow 명령어의 users 옵션을 사용한다.
airflow users 명령을 실행하면 다음과 같은 도움말이 출력된다.
$ airflow users
usage: airflow users [-h] COMMAND ...
Manage users
positional arguments:
  COMMAND
    add-role  Add role to a user
    create    Create a user
    delete    Delete a user
    export    Export all users
    import    Import users
    list      List users
    remove-role
              Remove role from a user
optional arguments:
  -h, --help  show this help message and exit
airflow users command error: the following arguments are required: COMMAND, see help above.
 

계정 조회

airflow users list 명령을 사용한다.
별도 전달 옵션이 없기 때문에 바로 목록이 출력된다.
$ airflow users list
id | username | email            | first_name | last_name | roles
===+==========+==================+============+===========+======
1  | user     | user@example.com | Firstname  | Lastname  | Admin

 

 

계정 추가

airflow users create 명령을 사용한다.
해당 명령을 실행하면 다음과 같은 도움말이 출력된다.
$ airflow users create
usage: airflow users create [-h] -f FIRSTNAME -l LASTNAME
                            -u USERNAME -e EMAIL -r ROLE
                            [[-p PASSWORD] | [--use-random-password]]
 
옵션은 다음과 같다.
구분
내용
-f FIRSTNAME
-l LASTNAME
사용자의 이름과 성
-u USERNAME
사용할 계정 아이디
-e EMAIL
사용자의 이메일 주소
-r ROLE
사용자의 역할 (권한)
-p PASSWORD
사용할 비밀번호
--use-random-password
비밀번호를 표시 없이 무작위 문자열로 설정
-p (--password) 옵션과 동시 사용 불가
 
사용 예제는 다음과 같다.
$ airflow users create -u testuser \
        -f test -l user -e test@test.com \
        -r Admin -p testpass

[2022-04-05 07:32:04,837] {manager.py:512} WARNING - Refused to delete permission view, assoc with role exists DAG Runs.can_create User
[2022-04-05 07:32:06,660] {manager.py:214} INFO - Added user testuser
User "testuser" created with role "Admin"
 
계정 목록을 확인해보면 추가 된 것을 확인할 수 있다.
$ airflow users list
id | username | email            | first_name | last_name | roles
===+==========+==================+============+===========+======
1  | user    | user@example.com | Firstname  | Lastname  | Admin
3  | testuser | test@test.com    | test      | user      | Admin
 
 

계정 수정

airflow 명령어에서는 사용자 역할을 제외하고 계정 정보 수정 기능이 제공되지 않는다.
 
이름이나 아이디를 수정해야 한다면 계정을 삭제하고 재생성 한다.
이미 여러 작업을 수행한 계정인 경우 삭제하면 영향이 있을 수 있다.
가급적 계정 생성한 직후 확인하면서 수행하고, 가급적 생성할 때 정확하게 입력할 것을 권장한다.
 
역할 추가
airflow users add-role 명령을 사용한다.
$ airflow users add-role
usage: airflow users add-role [-h] [-e EMAIL] -r ROLE [-u USERNAME]
 
옵션은 다음과 같다.
구분
내용
-u USERNAME
사용할 계정 아이디
-e EMAIL
사용자의 이메일 주소
-r ROLE
사용자의 역할 (권한)
 
Admin, Public, Viewer, User, Op 등 5가지 역할이 존재한다.
보통 관리자 계정은 Admin, 개발자 계정은 User, 자동화 계정은 Op를 선택하면 된다.
$ airflow users add-role -u testuser -r Op
airflow users add-role -u testuser -r Op
[2022-04-05 07:59:00,771] {manager.py:512} WARNING - Refused to delete permission view, assoc with role exists DAG Runs.can_create User
[2022-04-05 07:59:02,535] {manager.py:228} INFO - Updated user test user
User "testuser" added to role "Op"
 
역할 삭제
airflow users remove-role 명령을 사용한다.
$ airflow users remove-role
usage: airflow users remove-role [-h] [-e EMAIL] -r ROLE [-u USERNAME]
 
옵션은 다음과 같다.
구분
내용
-u USERNAME
사용할 계정 아이디
-e EMAIL
사용자의 이메일 주소
-r ROLE
사용자의 역할 (권한)
 
사용법은 add-role과 동일하다.
$ airflow users remove-role -u testuser -r Op
[2022-04-05 08:00:52,642] {manager.py:512} WARNING - Refused to delete permission view, assoc with role exists DAG Runs.can_create User
[2022-04-05 08:00:54,370] {manager.py:228} INFO - Updated user test user
User "testuser" removed from role "Op"

 

 

계정 삭제

airflow users delete 명령을 사용한다.
사용자 계정 아이디 또는 이메일 주소를 전달해야 한다.
$ airflow users delete
Missing args: must supply one of --username or --email
 
옵션은 다음과 같다.
구분
내용
-u USERNAME
사용할 계정 아이디
-e EMAIL
사용자의 이메일 주소
 
일반적으로 이메일 주소보다는 계정 아이디를 사용한다.
# -u 대신 --username 사용 가능
$ airflow users delete -u testuser 
[2022-04-05 07:52:50,711] {manager.py:512} WARNING - Refused to delete permission view, assoc with role exists DAG Runs.can_create User
User "testuser" deleted
 
WebUI와 달리 삭제할 때 경고 메시지가 출력 되지 않는다.
따라서 실행할 때 주의해서 사용한다.
 

역할 관리

AirFlow도 역할 기반 접근 제어 (RBAC, Role-based access control)를 제공한다.
사용자의 역할 별로 권한을 다르게 부여하는 방법으로 직관적이고 효율적인 권한 관리가 가능하다.
 
직접 Role을 만들거나 수정하지 않을 것이므로 간략하게 살펴본다.
 
airflow roles 명령을 실행하면 다음과 같은 도움말이 출력된다.
$ airflow roles
usage: airflow roles [-h] COMMAND ...
Manage roles
positional arguments:
  COMMAND
    create    Create role
    list      List roles
optional arguments:
  -h, --help  show this help message and exit
airflow roles command error: the following arguments are required: COMMAND, see help above.
 
WebUI와 다르게 수정과 삭제 기능을 제공하지 않는 점에 주의한다. (2.2.3 버전 기준)
 
 

역할 조회

airflow roles list 명령을 사용한다.
별도 전달 옵션이 없기 때문에 바로 목록이 출력된다.
$ airflow roles list
name
======
Admin
Op
Public
User
Viewer
 

역할 추가

airflow roles create 명령을 사용한다.
$ airflow roles create --help
usage: airflow roles create [-h] [-v] [role [role ...]]

 

역할 이름만 부여할 수 있고 세부 옵션 지정은 불가능하다.
 
다음과 같이 생성한다.
$ airflow roles create test
Added 1 role(s)
 
WebUI에서 확인해보면 웹페이지 조회 권한만 부여된다.
세부 권한 설정은 WebUI에서 진행해야 한다. 사용할 일이 없을 것 같다.
 

역할 수정 / 삭제

airflow 명령에서 Role을 수정하거나 삭제하는 기능은 제공하지 않는다.
 
 

AirFlow 설정 정보 조회

airflow 명령은 사용할 일이 많지 않다.
정리하고 보니 그냥 WebUI에서 진행하는 것이 나을 것 같다.
 
서버의 상세 정보 조회는 WebUI보다 airflow 명령을 사용하는 것이 더 좋다.
다음과 같이 사용한다.
$ airflow info
 
airflow 관련 설정 정보들이 출력된다.
Bitnami가 제공하는 AirFlow Docker 내부에는 Python 3.8 버전이 설치되어 있는 것을 확인할 수 있다.
Apache Airflow
version                | 2.2.3
executor               | CeleryExecutor
task_logging_handler   | airflow.utils.log.file_task_handler.FileTaskHandler
sql_alchemy_conn       | postgresql+psycopg2://bn_airflow:bitnami1@postgresql:5432/bitnami_airflow
dags_folder            | /opt/bitnami/airflow/dags
plugins_folder         | /opt/bitnami/airflow/plugins
base_log_folder        | /opt/bitnami/airflow/logs
remote_base_log_folder |

System info
OS              | Linux
architecture    | x86_64
uname           | uname_result(system='Linux', node='16b4fa5c0237', release='5.10.60.1-microsoft-standard-WSL2',
                | version='#1 SMP Wed Aug 25 23:20:18 UTC 2021', machine='x86_64', processor='')
locale          | ('en_US', 'UTF-8')
python_version  | 3.8.12 (default, Jan 11 2022, 00:01:54)  [GCC 8.3.0]
python_location | /opt/bitnami/airflow/venv/bin/python

Tools info
git             | git version 2.35.0
ssh             | NOT AVAILABLE
kubectl         | NOT AVAILABLE
gcloud          | NOT AVAILABLE
cloud_sql_proxy | NOT AVAILABLE
mysql           | NOT AVAILABLE
sqlite3         | NOT AVAILABLE
psql            | psql (PostgreSQL) 10.19

Paths info
airflow_home    | /opt/bitnami/airflow
system_path     | /opt/bitnami/common/bin:/opt/bitnami/python/bin:/opt/bitnami/postgresql/bin:/opt/bitnami/git/bin:/opt/
                | bitnami/airflow/venv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
python_path     | /opt/bitnami/airflow/venv/bin:/opt/bitnami/python/lib/python38.zip:/opt/bitnami/python/lib/python3.8:/
                | opt/bitnami/python/lib/python3.8/lib-dynload:/opt/bitnami/airflow/venv/lib/python3.8/site-packages:/op
                | t/bitnami/airflow/dags:/opt/bitnami/airflow/config:/opt/bitnami/airflow/plugins
airflow_on_path | True

Providers info
apache-airflow-providers-amazon           | 2.4.0
apache-airflow-providers-apache-cassandra | 2.1.0
apache-airflow-providers-apache-drill     | 1.0.1
apache-airflow-providers-apache-druid     | 2.1.0
apache-airflow-providers-apache-hdfs      | 2.2.0
apache-airflow-providers-apache-hive      | 2.1.0
apache-airflow-providers-apache-pinot     | 2.0.1
apache-airflow-providers-celery           | 2.1.0
apache-airflow-providers-cloudant         | 2.0.1
apache-airflow-providers-cncf-kubernetes  | 2.2.0
apache-airflow-providers-docker           | 2.3.0
apache-airflow-providers-elasticsearch    | 2.1.0
apache-airflow-providers-exasol           | 2.0.1
apache-airflow-providers-ftp              | 2.0.1
apache-airflow-providers-google           | 6.2.0
apache-airflow-providers-grpc             | 2.0.1
apache-airflow-providers-hashicorp        | 2.1.1
apache-airflow-providers-http             | 2.0.1
apache-airflow-providers-imap             | 2.0.1
apache-airflow-providers-influxdb         | 1.1.0
apache-airflow-providers-microsoft-azure  | 3.4.0
apache-airflow-providers-microsoft-mssql  | 2.0.1
apache-airflow-providers-mongo            | 2.2.0
apache-airflow-providers-mysql            | 2.1.1
apache-airflow-providers-neo4j            | 2.0.2
apache-airflow-providers-postgres         | 2.4.0
apache-airflow-providers-presto           | 2.0.1
apache-airflow-providers-redis            | 2.0.1
apache-airflow-providers-sendgrid         | 2.0.1
apache-airflow-providers-sftp             | 2.3.0
apache-airflow-providers-slack            | 4.1.0
apache-airflow-providers-sqlite           | 2.0.1
apache-airflow-providers-ssh              | 2.3.0
apache-airflow-providers-trino            | 2.0.2
apache-airflow-providers-vertica          | 2.0.1

 

 

AirFlow는 Providers Info 항목에 나열 된 다양한 서비스들과 연동 가능한 확장 Operator 들을 제공한다.

 

자세한 사항은 아래 기술 문서를 참고한다.