Airflow 웹 인터페이스 액세스

Cloud Composer 1 | Cloud Composer 2 | Cloud Composer 3

Apache Airflow에는 워크플로(DAG)와 Airflow 환경을 관리하고 관리 작업을 수행하는 데 사용할 수 있는 웹 사용자 인터페이스(UI)가 포함되어 있습니다. 예를 들어 웹 인터페이스를 사용하여 DAG의 진행 상태를 검토하거나, 새 데이터 연결을 설정하거나, 이전 DAG 실행의 로그를 살펴볼 수 있습니다.

Airflow 웹 서버

각 Cloud Composer 환경에는 Airflow 웹 인터페이스를 실행하는 웹 서버가 있습니다. 웹 서버는 Cloud Composer 환경 아키텍처의 일부입니다.

시작하기 전에

  • Cloud Composer 환경을 볼 수 있는 역할이 있어야 합니다. 자세한 내용은 액세스 제어를 참조하세요.

  • 환경 생성 중에 Cloud Composer는 Airflow 웹 인터페이스를 실행하는 웹 서버의 URL을 구성합니다. 이 URL을 맞춤설정할 수 없습니다.

  • Cloud Composer 2는 Airflow 웹 인터페이스에 대해 Airflow UI 액세스 제어(Airflow 역할 기반 액세스 제어) 기능을 지원합니다.

  • API 컨트롤 > 구성되지 않은 서드 파티 앱 > 사용자의 서드 파티 앱에 액세스를 허용하지 않음 옵션이 Google Workspace에 사용 설정되어 있고 Cloud Composer 앱의 Apache Airflow가 명시적으로 허용되지 않은 경우 사용자가 명시적으로 애플리케이션을 허용하지 않으면 Airflow UI에 액세스할 수 없습니다. 액세스를 허용하려면 Google Workspace에서 Airflow UI에 대한 액세스 허용의 단계를 수행합니다.

Airflow 웹 인터페이스에 액세스

Airflow 웹 서버는 사용자 환경의 클러스터에서 워크로드로 실행됩니다. 웹 서버는 composer.googleusercontent.com 도메인에 배포되며 Airflow 웹 인터페이스에 대한 액세스를 제공합니다.

Cloud Composer 2는 사용자에 대해 정의된 사용자 ID 및 IAM 정책 바인딩을 기반으로 인터페이스에 대해 액세스 권한을 제공합니다. Cloud Composer 1과 비교해서 Cloud Composer 2는 IAP(Identity-Aware Proxy)에 의존하지 않는 다른 메커니즘을 사용합니다.

Google Cloud 콘솔을 통해 웹 인터페이스에 액세스

Google Cloud Console에서 Airflow 웹 인터페이스에 액세스하려면 다음 안내를 따르세요.

  1. Google Cloud Console에서 환경 페이지로 이동합니다.

    환경으로 이동

  2. Airflow 웹 서버 열에서 해당 환경의 Airflow 링크를 따릅니다.

Airflow 웹 서버에 대한 액세스 제한

Composer 환경을 사용하면 Airflow 웹 서버에 대한 액세스를 제한할 수 있습니다.

  • 모든 액세스를 차단하거나 특정 IPv4 또는 IPv6 외부 IP 범위로부터의 액세스를 허용할 수 있습니다.
  • 비공개 IP 주소를 사용하여 허용되는 IP 범위를 구성할 수 없습니다.

gcloud 명령줄 도구를 통해 웹 인터페이스 URL 검색

모든 웹브라우저에서 Airflow 웹 인터페이스에 액세스할 수 있습니다. 웹 인터페이스의 URL을 가져오려면 다음 gcloud 명령어를 입력합니다.

gcloud composer environments describe ENVIRONMENT_NAME \
  --location LOCATION

다음을 바꿉니다.

  • ENVIRONMENT_NAME: 환경의 이름
  • LOCATION: 환경이 위치한 리전

gcloud 명령어는 웹 인터페이스의 URL을 비롯해 Cloud Composer 환경의 속성을 보여줍니다. URL은 airflowUriairflowByoidUri으로 나열됩니다.

  • airflowUri URL 주소는 Google 계정에서 사용됩니다.
  • airflowByoidUri URL 주소는 프로젝트에서 직원 ID 제휴를 구성하는 경우 외부 ID에 사용됩니다.
config:
  airflowUri: https://example-dot-us-central1.composer.googleusercontent.com
  airflowByoidUri: https://example-dot-us-central1.composer.byoid.googleusercontent.com

웹 서버 다시 시작

Cloud Composer 환경 디버깅 또는 문제 해결 시 일부 문제는 Airflow 웹 서버를 다시 시작하여 해결할 수 있습니다. restartWebServer API 또는 restart-web-server gcloud 명령어를 사용하여 웹 서버를 다시 시작할 수 있습니다.

gcloud beta composer environments restart-web-server ENVIRONMENT_NAME \
  --location=LOCATION

웹 서버 네트워크 액세스 구성

Airflow 웹 서버 액세스 매개변수는 환경 유형에 따라 달라지지 않습니다. 대신 웹 서버 액세스를 별도로 구성하세요. 예를 들어 비공개 IP 환경은 인터넷에서 Airflow UI에 계속 액세스할 수 있습니다.

비공개 IP 주소를 사용하여 허용되는 IP 범위를 구성할 수 없습니다.

콘솔

  1. Google Cloud 콘솔에서 환경 페이지로 이동합니다.

    환경으로 이동

  2. 환경 목록에서 환경 이름을 클릭합니다. 환경 세부정보 페이지가 열립니다.

  3. 환경 구성 탭으로 이동합니다.

  4. 네트워크 구성 섹션에서 웹 서버 액세스 제어 항목을 찾고 수정을 클릭합니다.

  5. 웹 서버 네트워크 액세스 제어 대화상자에서 다음 안내를 따르세요.

    • 모든 IP 주소의 Airfow 웹 서버에 대한 액세스 권한을 제공하려면 모든 IP 주소의 액세스 허용을 선택합니다.

    • 특정 IP 범위로만 액세스를 제한하려면 특정 IP 주소에서만 액세스 허용을 선택합니다. IP 범위 필드에서 CIDR 표기법으로 IP 범위를 지정합니다. 설명 필드에 이 범위의 설명(선택사항)을 지정합니다. 범위를 두 개 이상 지정하려면 IP 범위 추가를 클릭합니다.

    • 모든 IP 주소의 액세스를 금지하려면 특정 IP 주소에서만 액세스 허용을 선택하고 빈 범위 항목 옆에 있는 항목 삭제를 클릭합니다.

gcloud

환경을 업데이트할 때 다음 인수가 웹 서버 액세스 매개변수를 제어합니다.

  • --web-server-allow-all은 모든 IP 주소의 Airflow에 대한 액세스를 제공합니다. 기본 옵션입니다.

  • --web-server-allow-ip는 특정 소스 IP 범위로만 액세스를 제한합니다. 여러 IP 범위를 지정하려면 이 인수를 여러 번 사용합니다.

  • --web-server-deny-all은 모든 IP 주소의 액세스를 금지합니다.

gcloud composer environments update ENVIRONMENT_NAME \
    --location LOCATION \
    --web-server-allow-ip ip_range=WS_IP_RANGE,description=WS_RANGE_DESCRIPTION

다음을 바꿉니다.

  • ENVIRONMENT_NAME: 환경의 이름
  • LOCATION: 환경이 위치한 리전
  • WS_IP_RANGE: CIDR 표기법으로 나타낸 IP 범위. Airflow UI에 액세스할 수 있습니다.
  • WS_RANGE_DESCRIPTION: IP 범위에 대한 설명.

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

gcloud composer environments update example-environment \
    --location us-central1 \
    --web-server-allow-ip ip_range=192.0.2.0/24,description="office net 1" \
    --web-server-allow-ip ip_range=192.0.4.0/24,description="office net 3"

API

  1. [environments.patch][api-patch] API 요청을 작성합니다.

  2. 이 요청의 작성 방법:

    1. updateMask 매개변수에서 config.webServerNetworkAccessControl 마스크를 지정합니다.

    2. 요청 본문에서 Airflow 태스크 로그가 저장되는 방법을 지정합니다.

      • 모든 IP 주소에서 Airflow에 대한 액세스를 제공하려면 빈 config 요소를 지정합니다(webServerNetworkAccessControl 요소가 없어야 함).

      • 특정 IP 범위로만 액세스를 제한하려면 allowedIpRanges에 하나 이상의 범위를 지정합니다.

      • 모든 IP 주소의 액세스를 금지하려면 빈 webServerNetworkAccessControl 요소를 지정합니다. webServerNetworkAccessControl 요소는 있어야 하지만 allowedIpRanges 요소를 포함해서는 안 됩니다.

{
  "config": {
    "webServerNetworkAccessControl": {
      "allowedIpRanges": [
        {
          "value": "WS_IP_RANGE",
          "description": "WS_RANGE_DESCRIPTION"
        }
      ]
    }
  }
}

다음을 바꿉니다.

  • WS_IP_RANGE: CIDR 표기법으로 나타낸 IP 범위. Airflow UI에 액세스할 수 있습니다.
  • WS_RANGE_DESCRIPTION: IP 범위에 대한 설명.

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

// PATCH https://composer.googleapis.com/v1/projects/example-project/
// locations/us-central1/environments/example-environment?updateMask=
// config.webServerNetworkAccessControl

{
  "config": {
    "webServerNetworkAccessControl": {
      "allowedIpRanges": [
        {
          "value": "192.0.2.0/24",
          "description": "office net 1"
        },
        {
          "value": "192.0.4.0/24",
          "description": "office net 3"
        }
      ]
    }
  }
}

Terraform

allowed_ip_range 블록의 web_server_network_access_control에서 웹 서버에 액세스할 수 있는 IP 범위를 지정합니다.

resource "google_composer_environment" "example" {
  provider = google-beta
  name = "ENVIRONMENT_NAME"
  region = "LOCATION"

  config {

    web_server_network_access_control {

      allowed_ip_range {
        value = "WS_IP_RANGE"
        description = "WS_RANGE_DESCRIPTION"
      }

    }

  }
}

다음과 같이 바꿉니다.

  • WS_IP_RANGE를 CIDR 표기법으로 나타낸 IP 범위로 바꿉니다. Airflow UI에 액세스할 수 있습니다.
  • WS_RANGE_DESCRIPTION을 IP 범위 설명으로 바꿉니다.

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

resource "google_composer_environment" "example" {
  provider = google-beta
  name = "example-environment"
  region = "us-central1"

  config {

    web_server_network_access_control {
      allowed_ip_range {
        value = "192.0.2.0/24"
        description = "office net 1"
      },
      allowed_ip_range {
        value = "192.0.4.0/24"
        description = "office net 3"
      }

    }
}

다음 단계