Kerberos

Kerberos

Airflow는 Kerberos에 대한 초기 지원을 제공해요. Airflow가 스스로 Kerberos 티켓을 갱신하고 티켓 캐시에 저장할 수 있게 하며, hooks와 DAG이 kerberized 서비스에 인증하는 데 활용할 수 있어요.

출처: 문서

본문

Airflow는 Kerberos에 대한 초기 지원이 있어요. Airflow가 스스로 Kerberos 티켓을 갱신하고 티켓 캐시에 저장할 수 있다는 뜻이에요. hooks와 DAG은 그 티켓을 사용해 kerberized 서비스에 인증할 수 있어요.

제한사항 (Limitations)

현재 이 기능을 활용하도록 조정된 hooks는 일부에 불과하다는 점을 참고하세요. 또한 Kerberos를 웹 인터페이스에 통합하지 않으므로, 지금은 서비스를 안전하게 유지하기 위해 네트워크 수준 보안에 의존해야 해요.

Celery 통합은 아직 시도·테스트되지 않았어요. 하지만 모든 호스트에 key tab을 생성하고 각 워커 옆에 ticket renewer를 실행하면 아마 동작할 거예요.

Kerberos 활성화하기 (Enabling Kerberos)

Airflow

Kerberos를 활성화하려면 (서비스) key tab을 생성해야 해요.

# in the kadmin.local or kadmin shell, create the airflow principal
kadmin:  addprinc -randkey airflow/[email protected]

# Create the Airflow keytab file that will contain the Airflow principal
kadmin:  xst -norandkey -k airflow.keytab airflow/fully.qualified.domain.name

이제 이 파일을 Airflow 사용자가 읽을 수 있는 위치에 저장해요 (chmod 600). 그런 다음 airflow.cfg에 다음을 추가해요:

[core]
security = kerberos

[kerberos]
keytab = /etc/airflow/airflow.keytab
reinit_frequency = 3600
principal = airflow

Airflow를 docker 컨테이너 기반 환경에서 사용한다면 airflow.cfg를 수정하는 대신 Dockerfile에 아래 환경 변수를 설정할 수 있어요:

ENV AIRFLOW__CORE__SECURITY kerberos
ENV AIRFLOW__KERBEROS__KEYTAB /etc/airflow/airflow.keytab
ENV AIRFLOW__KERBEROS__INCLUDE_IP False

Kerberos 티켓에 대해 더 세분화된 옵션이 필요하다면 다음 옵션들이 기본값과 함께 제공돼요:

[kerberos]
# Location of your ccache file once kinit has been performed
ccache = /tmp/airflow_krb5_ccache
# principal gets augmented with fqdn
principal = airflow
reinit_frequency = 3600
kinit_path = kinit
keytab = airflow.keytab

# Allow kerberos token to be flag forwardable or not
forwardable = True

# Allow to include or remove local IP from kerberos token.
# This is particularly useful if you use Airflow inside a VM NATted behind host system IP.
include_ip = True

Warning

기본 ccache 위치 /tmp/airflow_krb5_ccache는 대부분의 Unix 시스템에서 누구나 읽을 수 있는 디렉터리에 있어요. 즉 같은 호스트의 다른 로컬 사용자도 Kerberos 자격 증명 캐시를 읽거나 수정하고 Airflow 서비스 principal을 사칭할 수 있다는 뜻이에요. 프로덕션 배포에서는 ccache를 Airflow 서비스 계정만 접근할 수 있는 디렉터리로 지정하세요 — 예를 들어 모드 0700으로 생성되고 Airflow 사용자 소유인 /run/airflow/krb5_ccache(또는 /var/lib/airflow/krb5_ccache) 같은 서비스별 런타임 디렉터리로 말이죠. 이미 chmod 600로 해두어야 하는 keytab과 같은 원칙을 적용해요.

Kerberos 티켓은 kinit으로 생성되며 기본적으로 로컬 krb5.conf를 사용한다는 점을 기억하세요.

티켓 renewer를 다음처럼 실행해요:

# run ticket renewer
airflow kerberos

Kerberos를 표준 또는 일회성 방식으로 사용하는 더 고급 배포 모델을 지원하려면, airflow kerberos를 실행할 때 --one-time 플래그를 사용해 모드를 지정할 수 있어요.

a) 표준(standard): Airflow kerberos 명령이 무한정 실행돼요. 티켓 renewer 프로세스가 몇 초마다 계속 실행되며 티켓이 만료되면 갱신해요. b) 일회성(one-time): Airflow kerberos가 한 번 실행되고 종료돼요. 실패 시 메인 태스크가 시작되지 않아요.

기본 모드는 표준이에요.

사용 예시:

표준 모드:

airflow kerberos

일회성 모드:

airflow kerberos --one-time

Hadoop

impersonation(가장)을 사용하려면 hadoop 구성의 core-site.xml에서 활성화해야 해요.

<property>
  <name>hadoop.proxyuser.airflow.groups</name>
  <value>*</value>
</property>

<property>
  <name>hadoop.proxyuser.airflow.users</name>
  <value>*</value>
</property>

<property>
  <name>hadoop.proxyuser.airflow.hosts</name>
  <value>*</value>
</property>

물론 보안을 더 강화해야 한다면 별표를 더 적절한 값으로 바꿔야 해요.

Kerberos 인증 사용하기 (Using Kerberos authentication)

Hive hook은 Kerberos 인증을 활용하도록 업데이트되었어요. DAG에서 사용하려면 예를 들어 다음과 같이 connection 세부 정보를 업데이트하기만 하면 돼요:

{ "use_beeline": true, "principal": "hive/[email protected]"}

principal을 자신의 설정에 맞게 조정하세요. _HOST 부분은 서버의 정규화된 도메인 이름(fully qualified domain name)으로 대체돼요.

connection에 대해 DAG 소유자를 사용자로 사용할지, connection의 login 섹션에 지정된 사용자를 사용할지 지정할 수 있어요. login 사용자의 경우 다음을 extra로 지정해요:

{ "use_beeline": true, "principal": "hive/[email protected]", "proxy_user": "login"}

DAG 소유자의 경우:

{ "use_beeline": true, "principal": "hive/[email protected]", "proxy_user": "owner"}

그리고 DAG에서 HiveOperator를 초기화할 때 다음을 지정해요:

run_as_owner=True

Kerberos 인증을 사용하려면 kerberos extras 그룹으로 Airflow를 설치해야 해요:

pip install 'apache-airflow[kerberos]'

Kerberos 배포의 프로덕션 측면에 대한 내용은 Kerberos-authenticated workers에서 읽을 수 있어요.

더 알아보기 (Learn more)