자동화 등의 프로그램을 구현할 경우 해당 서버에 접속을 해야하므로 서버의 IP, 포트번호, ID 등의 정보가 필요하다.
하지만, 해당 정보를 그냥 소스코드의 변수로 할당해 사용할 경우 코드가 유출되면 보안에 매우 위협적이다.
따라서, 해당 데이터를 암호화를 통해 보안상의 위협을 최소화해야한다.
cryptography?
cryptography는 Python에서 안전한 암호화를 수행하기 위해 설계된 라이브러리
GPG?
암호화 관련 오픈소스, 리눅스 환경에서 파일을 암호화 할 수 있다.
암호화 파일 생성을 위해 generate_cryptography.py 파일 생성
vi generate_cryptography.py
'''
from cryptography.fernet import Fernet
# 비밀 키 생성
key = Fernet.generate_key()
cipher_suite = Fernet(key)
# 암호화할 데이터 JSON 형식으로 생성
server_info = b"""
{
"NODE_HOST": "XXX.XXX.XXX.XXX",
"NODE_SSH": "22"
}
"""
# 암호화
data = cipher_suite.encrypt(server_info)
# 암호화된 데이터와 키를 파일에 저장
with open('SI.enc', 'wb') as enc_file:
enc_file.write(data)
with open('SOLVE.key', 'wb') as key_file:
key_file.write(key)
'''
암호화된 데이터와 키 생성 확인
python3 generate_cryptography.py
암호화된 데이터 사용하기 위해 using_data.py 생성 및 실행
vi using_data.py
'''
from cryptography.fernet import Fernet
import json
#키를 읽어오기
with open('SOLVE.key', 'rb') as key_file:
key = key_file.read()
cipher_suite = Fernet(key)
#암호화된 설정 파일 읽기
with open('SI.enc', 'rb') as enc_file:
cipher_text = enc_file.read()
#복호화
data = cipher_suite.decrypt(cipher_text)
#JSON 데이터 로드
server_info = json.loads(data)
host = server_info['NODE_HOST']
port = server_info['NODE_SSH']
print("서버 IP : ", host)
print("SSH 포트번호 : ", port)
'''
python3 using_data.py
GPG 명령어로 원본파일 암호화
gpg -c generate_cryptography.py
원본 파일 삭제
rm -f generate_cryptography.py
복호화가 필요한 경우
복호화할 때 비밀번호를 요구안하고 그냥 복호화가 될 수도 있다.
서버 재시작하면, 암호 입력창이 뜬다.
gpg --output generate_cryptography.py --decrypt generate_cryptography.py.gpg
# 폴더 및 내부 파일들 권한 변경
chmod 600 ~/test/*