Airflow UI 액세스 제어 사용

Cloud Composer 1 | Cloud Composer 2 | Cloud Composer 3

이 페이지에서는 Airflow UI 및 DAG UI의 다양한 액세스 제어 메커니즘에 대해 설명합니다. IAM에서 제공되는 액세스 제어 외에도 이러한 메커니즘을 사용해서 해당 환경의 Airflow UI 및 DAG UI에서 사용자를 구분할 수 있습니다.

Cloud Composer의 Airflow UI 액세스 제어 개요

Airflow UIDAG UI에 대한 액세스와 해당 UI에서의 데이터 및 작업의 공개 상태는 Cloud Composer에서 두 가지 수준으로 제어됩니다.

  1. Cloud Composer에서 Airflow UI 및 DAG UI에 대한 액세스는 IAM으로 제어됩니다.

    프로젝트에서 계정에 Cloud Composer 환경을 볼 수 있는 역할이 없으면 Airflow UI 및 DAG UI를 사용할 수 없습니다.

    IAM은 Airflow UI 또는 DAG UI에서 세분화된 추가 권한 제어를 제공하지 않습니다.

  2. Apache Airflow 액세스 제어 모델을 사용하면 사용자 역할에 따라 Airflow UI 및 DAG UI의 가시성을 줄일 수 있습니다.

    Apache Airflow 액세스 제어는 IAM과 다른 사용자, 역할, 권한의 고유 모델이 포함된 Airflow 기능입니다.

Apache Airflow 액세스 제어는 리소스 기반 권한을 사용합니다. 특정 Airflow 역할이 있는 모든 Airflow 사용자가 이 역할의 권한을 얻습니다. 예를 들어 can delete on Connections 권한이 포함된 역할이 있는 Airflow 사용자는 Airflow UI를 사용하여 연결 페이지에서 연결을 삭제할 수 있습니다.

개별 DAG에 DAG 수준 권한을 할당할 수도 있습니다. 예를 들어 특정 Airflow 역할이 있는 사용자만 Airflow UI에서 특정 DAG를 볼 수 있도록 할 수 있습니다. Cloud Composer에서는 환경 버킷에서 DAG 파일이 있는 하위 폴더에 따라 DAG 수준 권한을 자동으로 지정할 수 있습니다.

직원 ID 제휴를 통해 외부 ID에 대한 액세스를 설정하려는 경우 먼저 외부 ID에 IAM 역할 부여 섹션에 설명된 대로 IAM에서 환경에 대한 액세스 권한을 부여합니다. 그런 다음 평소와 같이 Airflow UI 액세스 제어를 사용하면 됩니다. 외부 ID의 Airflow 사용자는 이메일 주소 대신 주 구성원 식별자를 사용하며 다른 사용자 레코드 필드에 채워진 값이 Google 계정과 다릅니다.

시작하기 전에

Airflow 역할 및 액세스 제어 설정 관리

관리자 역할(또는 이에 상응하는 역할)이 있는 사용자가 Airflow UI에서 액세스 제어 설정을 확인하고 수정할 수 있습니다.

Airflow UI의 보안 메뉴에서 액세스 제어 설정을 구성할 수 있습니다. Airflow 액세스 제어 모델, 사용 가능한 권한, 기본 역할에 대한 자세한 내용은 Airflow UI 액세스 제어 문서를 참조하세요.

Airflow는 자체 사용자 목록을 유지합니다. 관리자 역할(또는 이에 상응하는 역할)이 있는 사용자는 환경의 Airflow UI를 열었고 Airflow에 등록된 사용자 목록을 볼 수 있습니다. 이 목록에는 다음 섹션에 설명된 대로 관리자가 수동으로 사전 등록한 사용자도 포함됩니다.

Airflow UI에서 사용자 등록

새로운 사용자는 Cloud Composer 환경의 Airflow UI를 처음 열 때 자동으로 등록됩니다.

등록 시 사용자에게 [webserver]rbac_user_registration_role Airflow 구성 옵션에 지정된 역할이 부여됩니다. 이 Airflow 구성 옵션을 다른 값으로 재정의하여 새로 등록된 사용자의 역할을 제어할 수 있습니다.

지정하지 않은 경우 기본 등록 역할은 Airflow 2를 사용하는 환경의 Op입니다.

Airflow UI의 기본 역할 구성을 만들려면 다음 단계를 따르는 것이 좋습니다.

  1. 환경 관리자가 새로 생성된 환경의 Airflow UI를 엽니다.

  2. 관리자 계정에 Admin 역할을 부여합니다. Airflow 2를 사용하는 환경에서 새 계정의 기본 역할은 Op입니다. Admin 역할을 할당하려면 gcloud CLI를 사용하여 다음 Airflow CLI 명령어를 실행합니다.

      gcloud composer environments run ENVIRONMENT_NAME \
        --location LOCATION \
        users add-role -- -e USER_EMAIL -r Admin
    

    다음과 같이 바꿉니다.

    • ENVIRONMENT_NAME: 환경 이름
    • LOCATION을 환경이 위치한 리전으로 바꿉니다.
    • USER_EMAIL: 사용자 계정의 이메일입니다.
  3. 관리자는 이제 다른 사용자에게 Admin 역할을 부여하는 등 신규 사용자에 대한 액세스 제어를 구성할 수 있습니다.

사용자 사전 등록

사용자는 Google 사용자 계정의 숫자 ID(이메일 주소 아님)가 사용자 이름으로 자동 등록됩니다. 사용자 이름 필드가 사용자의 기본 이메일 주소로 설정된 사용자 레코드를 추가하여 사용자를 수동으로 사전 등록하고 역할을 할당할 수도 있습니다. 사전 등록된 사용자 레코드와 일치하는 이메일 주소를 가진 사용자가 Airflow UI에 처음으로 로그인하면 사용자 이름이 이메일 주소에 의해 현재(최초 로그인 시) 식별된 사용자 ID로 대체됩니다. Google ID(이메일 주소)와 사용자 계정(사용자 ID)의 관계는 수정되지 않습니다. Google 그룹스는 사전 등록할 수 없습니다.

사용자를 사전 등록하려면 Airflow UI를 사용하거나 Google Cloud CLI를 통해 Airflow CLI 명령어를 실행하면 됩니다.

Google Cloud CLI를 통해 커스텀 역할을 사용하여 사용자를 사전 등록하려면 다음 Airflow CLI 명령어를 실행합니다.

gcloud composer environments run ENVIRONMENT_NAME \
  --location LOCATION \
  users create -- \
  -r ROLE \
  -e USER_EMAIL \
  -u USER_EMAIL \
  -f FIRST_NAME \
  -l LAST_NAME \
  --use-random-password # The password value is required, but is not used

다음을 바꿉니다.

  • ENVIRONMENT_NAME: 환경의 이름입니다.
  • LOCATION: 환경이 위치한 리전입니다.
  • ROLE: 사용자의 Airflow 역할입니다.(예: Op)
  • USER_EMAIL: 사용자의 이메일 주소입니다.
  • FIRST_NAMELAST_NAME: 사용자의 성과 이름입니다.

예를 들면 다음과 같습니다.

gcloud composer environments run example-environment \
  --location us-central1 \
  users create -- \
  -r Op \
  -e "example-user@example.com" \
  -u "example-user@example.com" \
  -f "Name" \
  -l "Surname" \
  --use-random-password

사용자 삭제

Airflow에서 사용자를 삭제하면 다음에 Airflow UI에 액세스할 때 자동으로 등록되므로 해당 사용자의 액세스 권한이 취소되지 않습니다. 전체 Airflow UI에 대한 액세스 권한을 취소하려면 프로젝트의 허용 정책에서 composer.environments.get 권한을 삭제하세요.

또한 사용자 역할을 공개로 변경하여 사용자 등록을 유지하지만 Airflow UI에 대해 모든 권한을 삭제할 수 있습니다.

DAG 수준 권한 자동 구성

폴더별 역할 등록 기능은 /dags 폴더 내에서 직접 각 하위 폴더에 대해 커스텀 Airflow 역할을 자동으로 만들고 해당 하위 폴더에 소스 파일이 저장된 모든 DAG에 대해 DAG 수준 액세스 권한을 이 역할에 부여합니다. 이렇게 하면 커스텀 Airflow 역할 및 해당 DAG 액세스 관리가 간소화됩니다.

폴더별 역할 등록 작동 방식

폴더별 역할 등록은 역할 및 해당 DAG 수준 권한을 구성하는 자동화된 방법입니다. 따라서 DAG 수준 권한을 부여하는 다른 Airflow 메커니즘과 충돌을 일으킬 수 있습니다.

또한 이러한 충돌을 방지하기 위해 폴더별 역할 등록을 사용 설정하면 이러한 메커니즘의 동작이 변경됩니다.

Airflow 2:

  • DAG 소스 코드에 정의된 access_control 속성을 통해 역할에 DAG 액세스를 부여할 수 있습니다.
  • Airflow UI 또는 gcloud CLI를 통해 DAG 권한을 수동으로 부여하면 충돌이 발생할 수 있습니다. 예를 들어 폴더별 역할에 DAG 수준 권한을 수동으로 부여하면 DAG 프로세서가 DAG를 동기화할 때 이러한 권한을 삭제하거나 덮어쓸 수 있습니다. DAG 권한을 수동으로 부여하지 않는 것이 좋습니다.
  • 역할에는 폴더별 역할 등록을 통해 등록되었고 DAG의 access_control 속성에 정의된 DAG 액세스 권한이 조합되어 있습니다.

최상위 /dags 폴더에 직접 배치된 DAG는 폴더별 역할에 자동 할당되지 않습니다. 폴더별 역할로 액세스할 수 없습니다. 관리자, 운영자, 사용자 또는 권한이 부여된 커스텀 역할과 같은 다른 역할은 Airflow UI 및 DAG UI를 통해 액세스할 수 있습니다.

내장된 Airflow 역할 및 Cloud Composer로 생성된 역할과 일치하는 이름의 하위 폴더에 DAG를 업로드할 경우 해당 하위 폴더에 있는 DAG에 대한 권한이 해당 역할에도 지정됩니다. 예를 들어 /dags/Admin 폴더에 DAG를 업로드하면 이 DAG에 대한 권한이 관리자 역할에 부여됩니다. 내장된 Airflow 역할에는 관리자, 운영자, 사용자, 뷰어 및 공개가 포함됩니다. Cloud Composer는 폴더별 역할 등록 기능이 사용 설정된 후 NoDags 및 UserNoDags를 만듭니다.

Airflow는 Airflow 스케줄러에서 DAG를 처리할 때 폴더별 역할 등록을 수행합니다. 환경에 DAG가 100개 넘게 있으면 DAG 파싱 시간 증가가 확인될 수 있습니다. 이러한 경우 스케줄러에 더 많은 메모리와 CPU를 사용하는 것이 좋습니다. [scheduler]parsing_processes Airflow 구성 옵션의 값을 늘릴 수도 있습니다.

폴더별 역할에 DAG 자동 할당

폴더별 역할에 DAG를 자동 할당하려면 다음 안내를 따르세요.

  1. 다음 Airflow 구성 옵션을 재정의하세요.

    섹션
    webserver rbac_autoregister_per_folder_roles True
  2. 새 사용자 등록 역할을 DAG 액세스가 없는 역할로 변경합니다. 이렇게 하면 관리자가 특정 DAG에 대한 권한이 있는 역할을 계정에 할당할 때까지 새 사용자가 DAG에 액세스할 수 없습니다.

    UserNoDags는 폴더별 역할 등록 기능이 사용 설정된 경우에만 Cloud Composer에서 생성되는 역할입니다. 이 역할은 사용자 역할과 동일하지만 DAG에 대한 액세스 권한이 없습니다.

    다음 Airflow 구성 옵션을 재정의하세요.

    섹션
    webserver rbac_user_registration_role UserNoDags

  3. 사용자가 Airflow에 등록되었는지 확인합니다.

  4. 다음 방법 중 하나를 사용하여 사용자에게 역할을 할당합니다.

    • Airflow가 DAG 하위 폴더를 기반으로 역할을 자동으로 만든 후 사용자에게 해당 역할을 할당하도록 합니다.
    • 역할 이름이 하위 폴더 이름과 일치하는 DAG 하위 폴더에 대한 빈 역할을 미리 만든 후 사용자를 이러한 역할에 할당합니다. 예를 들어 /dags/CustomFolder 폴더에 대해 CustomFolder라는 역할을 만듭니다.
  5. 사용자에게 할당된 역할과 일치하는 이름의 하위 폴더에 DAG를 업로드합니다. 이러한 하위 폴더는 환경 버킷의 /dags 폴더 내에 있어야 합니다. Airflow는 이러한 폴더에서 DAG에 권한을 추가하므로, 해당 역할이 있는 사용자만 Airflow UI 및 DAG UI를 통해 액세스할 수 있습니다.

수동으로 DAG 수준 권한 구성

커스텀 역할에 대한 DAG 수준 권한을 구성하여 특정 사용자 그룹에 표시할 DAG를 지정할 수 있습니다.

Airflow UI에서 DAG 수준 권한을 구성하려면 다음 안내를 따르세요.

  1. 관리자가 DAG 그룹화용 빈 역할을 만듭니다.
  2. 관리자가 사용자에게 적절한 역할을 할당합니다.
  3. 관리자 또는 사용자가 역할에 DAG를 할당합니다.
  4. Airflow UI에서 사용자는 자신의 그룹에 할당된 DAG만 볼 수 있습니다.

DAG 속성 또는 Airflow UI를 통해 역할에 DAG를 할당할 수 있습니다.

Airflow UI에서 역할에 DAG 할당

관리자는 Airflow UI에서 적합한 역할에 필요한 DAG 수준 권한을 할당할 수 있습니다.

이 작업은 DAG UI에서 지원되지 않습니다.

DAG 속성에서 역할에 DAG 할당

DAG가 할당된 DAG 그룹 역할을 지정하여 DAG에서 access_control DAG 매개변수를 설정할 수 있습니다.

2.1.0 이전 버전의 Airflow 2에서는 관리자, DAG 개발자 또는 자동화된 프로세스가 sync-perm Airflow 명령어를 실행하여 새 액세스 제어 설정을 적용해야 합니다.

Airflow 2.1.0 이상 버전에서는 스케줄러가 DAG를 파싱할 때 DAG 수준 권한을 적용하기 때문에 이 명령어를 실행할 필요가 없습니다.

dag = DAG(
  access_control={
    'DagGroup': {'can_edit', 'can_read'},
  },
  ...
  )

사용자에게 Airflow UI의 감사 로그 매핑

Airflow UI의 감사 로그는 Google 사용자 계정의 숫자 ID에 매핑됩니다. 예를 들어 사용자가 DAG를 일시 중지하면 항목이 로그에 추가됩니다.

Airflow UI의 찾아보기 > 감사 로그 페이지에서 감사 로그를 볼 수 있습니다.

Airflow 2의 감사 로그 페이지 항목
그림 1. Airflow 2의 감사 로그 페이지 항목

일반 항목에는 소유자 필드의 숫자 ID가 나열됩니다. accounts.google.com:NUMERIC_ID. 보안 > 사용자 나열 페이지에서 사용자 이메일에 숫자 ID를 매핑할 수 있습니다. 이 페이지는 Admin 역할이 있는 사용자에게 제공됩니다.

Google ID(이메일 주소)와 사용자 계정(사용자 ID)의 관계는 수정되지 않습니다.

다음 단계