본문 바로가기
BigData/Apache Airflow

[Airflow] Airflow 암호화 fernet key 정리

by 스파이디웹 2024. 4. 27.
728x90

Airflow Metastore를 이관하면서 암호화된 정보를 이관될 metastore에 어떻게 적용하는지, 암호화된 값은 어떻게 확인하는지 정리해봤습니다.


1. 정의

  • 대칭형 암호화에서 사용되는 키
  • Python 암호화 라이브러리인 cryptography 패키지에서 제공하는 대칭키 암호화 방식 중 하나
  • 128비트(16바이트) 또는 256비트(32바이트)의 임의의 바이트 시퀀스로 구성됩니다. 이 키를 사용하여 데이터를 암호화하고 복호화할 수 있습니다. Fernet은 블록 암호 기술 중 하나인 AES를 기반으로 합니다.
  • Fernet은 base64 인코딩을 사용하여 키를 인코딩하고 디코딩
    • Fernet은 키를 생성할 때 32바이트(256비트)의 임의의 바이트 시퀀스를 사용합니다. 이 바이트 시퀀스는 base64 인코딩을 통해 텍스트 형식으로 변환됩니다. 이렇게 하면 키를 텍스트 형식으로 저장하고 전송할 수 있으며, 이 텍스트를 다시 디코딩하여 원래의 바이트 시퀀스로 복원
    • b’키값’ 형태로 생성 됨

2. 사용되는 곳

  • airflow metadatabse is_encrypted이 체크 된 곳
    • extra 필드
  • password 필드

3. 설정 하는 곳

  • airflow.cfg

  • values.yaml(이 또한 airflow.cfg에 적용 된다.)

그래서 설정하는 곳에 동일한 fernet key를 사용하게 되면 airflow를 이전해야 되는 상황에서 metadatabase의 암호화된 값을 decode하지 않고 그대로 사용할 수 있음


4. fernet key 생성 방법

from cryptography.fernet import Fernet

fernet_key = Fernet.generate_key()
print(fernet_key)
print(fernet_key.decode())
# b'' , base64 decode된 '' 형태로 나온다.


5. decode

from cryptography.fernet import Fernet

# Airflow 설정 파일에서 설정한 키를 가져옵니다.
fernet_key = "키 입력"

# Fernet 객체를 생성합니다.
fernet = Fernet(fernet_key.encode())


# 암호화된 값을 디코드합니다.
encrypted_value = b'암호화 값 입력'
decrypted_value = fernet.decrypt(encrypted_value)

# 디코드된 값을 출력합니다.
print(decrypted_value.decode())

 

728x90

댓글