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
댓글