← 학습 카테고리

Learn

Airflow

151개 모듈 · 현재 38번째

Airflow 모듈 38/151 airflow-learn-38

Simple Auth Manager와 JWT 토큰 발급

Apache Airflow Official Documentation (in-repo snapshot) — Apache Software Foundation core-concepts/auth-manager/simple/index.rst 전체; core-concepts/auth-manager/simple/token.rst 전체; core-concepts/auth-manager/simple/sam-token-api-ref.rst(Swagger 참조 페이지, 별도 서술 내용 없음)

이 모듈을 다 읽으면

  • Simple auth manager가 Airflow 3의 기본 auth manager임을 알고, 어떤 용도에 한정해야 하는지 설명할 수 있다
  • simple_auth_manager_users 설정 문법으로 사용자·역할·(멀티팀 시) 팀을 지정할 수 있다
  • 네 가지 내장 역할(viewer/user/op/admin)의 권한 포함 관계를 설명할 수 있다
  • curl로 JWT 토큰을 발급받는 절차를 설명할 수 있다

Simple auth manager는 Airflow 3에 기본 탑재된, 개발·테스트용 auth manager다. 이 모듈은 설정 파일 기반 사용자·역할 관리, 네 가지 내장 역할의 포함 관계, 멀티팀 지원과 인증 우회 옵션, 그리고 curl로 JWT 토큰을 발급받는 절차를 다룬다.

Simple Auth Manager의 위치와 사용자 관리

Simple auth manager는 Airflow 3의 기본 auth manager로 탑재되어 있다. 이름 그대로 로직과 구현이 단순하다. 다만 개발·테스트용으로 의도된 것이며, 운영(production) 환경에서 쓴다면 다른 수단으로 접근을 통제해야 한다.

사용자는 전적으로 Airflow 설정을 통해 관리한다: `[core] simple_auth_manager_users = "bob:admin,peter:viewer"`처럼 콤마로 구분된 username:role 쌍의 목록으로 정의한다. 각 사용자는 username(사용자명)과 role(역할, 다음 섹션 참고) 두 정보를 필요로 한다. 이 예시에서는 bob(admin 역할)과 peter(viewer 역할) 두 사용자가 정의된다.

비밀번호는 사용자마다 자동으로 생성되어 웹서버 로그에 출력되며, core.simple_auth_manager_passwords_file에 설정된 파일(기본값 $AIRFLOW_HOME/simple_auth_manager_passwords.json.generated)에 저장된다. 이 파일을 직접 읽거나 수정할 수도 있다. Breeze 환경에는 admin과 viewer 두 사용자가 미리 정의되어 있고 비밀번호는 사용자명과 동일하다 — admin은 모든 권한을, viewer는 읽기 전용 권한을 갖는다.

핵심 포인트

  • Simple auth manager는 Airflow 3의 기본값이지만 개발·테스트용이며, 운영 환경에서는 별도 접근 제어가 필요하다
  • 사용자는 [core] simple_auth_manager_users = 'user:role,...' 형식으로 설정 파일에서만 관리한다
  • 비밀번호는 사용자마다 자동 생성되어 웹서버 로그에 출력되고, simple_auth_manager_passwords_file에 저장된다

내장 역할 4종: viewer/user/op/admin

Simple auth manager에는 역할과 권한을 관리(커스터마이즈)하는 옵션이 없다. 구현에 고정된 다음 역할들만 사용자에게 배정할 수 있다: viewer(Dag·자산·풀에 대한 읽기 전용 권한), user(viewer 권한에 더해 Dag에 대한 모든 권한 — 수정·생성·삭제), op(user 권한에 더해 풀·자산·설정·커넥션·변수에 대한 모든 권한), admin(모든 권한). 각 역할은 앞 역할의 권한을 그대로 포함하는 상위 집합이다.

핵심 포인트

  • 네 역할은 viewer ⊂ user ⊂ op ⊂ admin 순으로 포함관계를 이룬다
  • user는 viewer 권한에 Dag의 편집/생성/삭제 권한만 추가되고, op는 여기에 pools/assets/config/connections/variables 전체 권한이 더해진다
  • 역할·권한 자체는 커스터마이즈할 수 없다 — 구현에 고정되어 있다

멀티팀 지원과 인증 우회 옵션

Simple auth manager는 멀티팀을 지원한다. `[core] multi_team = True`로 멀티팀 모드를 켠 뒤, 각 사용자 항목에 콜론으로 구분된 세 번째 필드로 팀을 추가한다. 여러 팀은 파이프(|) 문자로 구분한다: `simple_auth_manager_users = "bob:admin:team1|team2,peter:viewer:team1,alice:op:team2"`. 이 예시에서 bob은 team1과 team2 둘 다에 접근 가능한 admin이고, peter는 team1에만 접근 가능한 viewer이며, alice는 team2에만 접근 가능한 op다.

팀에 연결된 사용자는 자기 팀 중 하나에 명시적으로 배정된 리소스(Dag, 커넥션, 변수, 풀)만 접근할 수 있다. 팀 배정이 없는(글로벌) 리소스는 팀 제한이 있는 사용자를 포함해 모두에게 접근 가능하다. admin 역할은 팀 배정과 무관하게 모든 팀의 모든 리소스에 접근할 수 있다 — admin 사용자를 팀에 묶어도 아무 효과가 없다.

선택 기능으로, `[core] simple_auth_manager_all_admins = "True"`를 설정하면 인증 자체를 비활성화하고 누구나 admin으로 취급할 수 있다. 이 경우 Airflow UI에 접근하는 누구나 모든 권한을 가진 admin으로 자동 로그인된다.

핵심 포인트

  • 멀티팀 사용자 지정은 user:role:team1|team2 형식으로, 팀이 여러 개면 파이프(|)로 구분한다
  • admin 역할은 팀 연결 여부와 무관하게 모든 팀 리소스에 접근하므로 admin을 팀에 묶는 것은 아무 효과가 없다
  • simple_auth_manager_all_admins=True로 인증 자체를 끄고 누구나 admin으로 자동 로그인되게 할 수 있다(개발용)

JWT 토큰 발급 (curl 예시)

Airflow public API를 쓰려면 JWT 토큰이 필요하며, Simple auth manager를 쓰는 환경에서는 sam-token-api-ref 문서에 정의된 Create Token API로 발급받는다(이 문서 자체는 Swagger 임베드만 있고 별도의 서술 내용은 없다). 예시:

ENDPOINT_URL="http://localhost:8080"
curl -X 'POST' \
    "${ENDPOINT_URL}/auth/token" \
    -H 'Content-Type: application/json' \
    -d '{
    "username": "<username>",
    "password": "<password>"
    }'

이 요청은 Airflow public API 요청에서 쓸 수 있는 토큰을 반환한다. `[core] simple_auth_manager_all_admins`가 True로 설정되어 있다면, 자격 증명 없이도 토큰을 발급받을 수 있다: `curl -X 'GET' "${ENDPOINT_URL}/auth/token"`.

핵심 포인트

  • 일반적으로는 POST /auth/token에 username/password를 보내 JWT를 발급받는다
  • simple_auth_manager_all_admins=True인 경우 자격 증명 없이 GET /auth/token만으로도 토큰을 받을 수 있다
  • 토큰 API 자체의 상세 스펙은 별도 서술 문서 없이 Swagger 페이지(sam-token-api-ref)로만 제공된다