빅데이터(BigData)/Airflow

airflow UI에 사용자 비밀번호 검증 기능 추가하기 1편

leebaro 2022. 9. 6.
728x90

airflow 2.x가 되면서 사용자 계정과 권한 기능이 추가됐습니다. 그래서 사용자 그룹에 따라서 특정 DAG에 대한 접근 권한을 할당할 수 있습니다.

한가지 아쉬운 점은 사용자 비밀번호에 대한 추가 정책을 관리할 수가 없습니다 예를들어 사용자 비밀번호 등록 시 최소 조건을 지정하거나, 90일이 지나면 비밀번호를 강제 변경하도록 만드는 것이 있습니다. 일반적으로는 이러한 기능이 없어도 큰 문제는 없지만 isms 심사를 위해서는 이러한 기능들이 필요합니다.

 

이에 따라서 비밀번호 등록 규칙을 지정하고 비밀번호 사용 만료 기간을 할당하는 방법을 작성해 보려고 합니다.

 

먼저 비밀번호 등록 규칙에 대해서 설명하겠습니다.  요구사항은 아래와 같습니다.

비밀번호는 8자 이상이여야 하고, 대문자, 소문자, 숫자, 특수문자가 포함돼야 합니다.

 

이 문제를 해결하기 위한 방법은 두 가지가 있습니다.

1. client side에서 수정

2. server side에서 수정

 

필자는 문제를 쉽게 해결하기 위해서 client side에서 javascript를이용해서 해결하려고 했습니다.(고난의 시작....)

 

javascript를 이용해서 문제를 해결하는 방법은 아주 간단합니다.

  1. 회원 가입하는 html 페이지를 연다.
  2. header에 javascript로 비밀번호 텍스트박스에 있는 텍스트가 비밀번호 요구사항에 맞는지 체크하는 함수를 만든다.
  3. 요구사항에 맞으면 유효성 체크가 성공했다고 안내하고, 틀렸다면 비밀번호 등록 규칙을 안내하고 재 등록을 유도한다.
  4.  회원 가입 버튼에 onClick 이벤트를 만들어 3번에서 만든 함수를 호출한다.

위와 같은 방법으로 진행하기 위해서 정규식을 이용한 비밀번호 유효성 체크 함수를 만들고, 코드를 삽입하기 위해서 회원 가입 페이지를 찾았습니다.

그런데 회원 가입 페이지를 찾을 수 없었습니다. 이 때부터 회원 가입 페이지를 찾아 삼만리를 시작했습니다. 

 

airflow가 어떤 프레임워크로 만들어졌는지 찾기 시작했습니다. 찾아보니 flask와 react가 보였습니다. 그래서 front-end framework인 react 코드에서 회원 가입 부분을 열심히 찾아봤지만 찾을 수 없었습니다.

 

오랜 삽질 끝에 결국 찾아냈습니다. airflow의 UI는 flask-appbuilder로 만들었습니다.일명 FAB. 참고로 apache superset UI도 FAB입니다.(FAB가 궁금하신 분들께서는 여기를 봐주세요.)

 

회원 가입 페이지를 찾을 수 없었던 이유는 FAB로 백엔드에서 회원 가입 페이지를 만들기 때문이였습니다.

 

FAB는 서버에서 HTML 페이지를 만들거나, form.html과 같은 템플릿을 이용해서 입력 페이지에서 공용으로 사용하기 때문에 회원 가입 페이지를 찾을 수 없었습니다.

 

그래서 client-side에서 간단하게 javascript로 문제를 해결하는 방법은 포기했습니다.

 

그래서 두 번째 방법인 server-side에서 flask 코드를 수정하는 방법으로 전환했습니다.

 

문제는 어느 부분에서 어떤 코드를 수정해야 하는지 찾기 위한 시간이 걸렸습니다. FAB와 airflow 코드가 섞여있는 프로젝트에서 어떤 코드를 고쳐야지 비밀번호를 바꿀 수 있는지 쉽게 안내된 내용이 없었기 때문입니다.

 

그래서 secure, user, member, register와 같은 키워드로 코드를 살펴보기 시작했습니다.

 

<2편에서 계속....>

 

 

728x90