Cloud Native Solution/[IaC] ansible

[암호화/복호화] ansible-vault를 이용한 암호화/복호화

Cloud Engineer 2022. 2. 2. 21:38

개요

회사에서 앤서블을 도입하여 사용하다보면 회사가 종사하고 있는 산업의 법률 상 크리티컬한 데이터를 반드시 암호화해야한다거나 업무 상 중요한 데이터를 암호화해야되는 경우가 발생할 수 있습니다. 앤서블은 Vault와 연계하여 사용자의 패스워드 및 중요한 데이터가 입력되어있는 인벤토리(inventory)라거나 변수 파일(/vars 하위 파일) 등을 암호화/복호화하는 기능을 제공합니다. 덕분에 산업의 구분 없이 시스템 구축/운영 업무에 앤서블을 도입할 수 있도록 해줍니다. 본 포스팅에서는 Vault에 대한 간단한 개념을 소개하고, Ansible Vault을 사용하여 파일을 암호화/복호화할 수 있는 방법에 대해 포커싱을 맞춰 알아보는 시간을 가지겠습니다.

Vault란?

Hashicorp에서 개발된 크로스플랫폼 패스워드 및 인증 관리 시스템입니다. 외부에 공개되면 안되는 패스워드, API 키, 토큰 등을 암호화하여 저장 및 관리합니다.

Ansible Vault란?

패스워드 및 Key와 같은 크리티컬한 데이터를 일반 텍스트(plaintext)가 아닌 암호화된 파일에 보관할 수 있는 기능입니다. 해당 기능은 ansible을 설치할 때 같이 설치되며 ansible-vault라는 CLI 명령어를 통해 사용할 수 있습니다. 모든 파일은 기본적으로 AES 방식을 기반으로 암호화/복호화합니다.

Ansible Vault 기능 소개

암호화된 파일 생성

# 암호화된 파일 신규 생성
$ ansible-vault create inventory.yml
New Vault password: 
Confirm New Vault password:

$

Vault를 통해 해당 파일을 사용할 경우 필요한 패스워드를 입력합니다. 패스워드를 입력 후, Vault는 $EDITOR라는 환경변수를 참조하여 편집기를 실행하며 파일 편집 작업을 마치면 inventory.yml라는 파일은 암호화된 데이터로 저장됩니다. 만약 기존에 존재하는 파일과 동일한 파일명으로 암호화된 파일을 생성하고자 할 경우 아래와 같은 에러 메세지와 함께 생성이 안 됩니다.

# tmp라는 이름을 가진 파일 생성 및 데이터 입력
$ touch tmp
$ vi tmp 
$ cat tmp 
123

# 기존에 존재하는 tmp 파일명으로 암호화된 신규 파일 생성 시, ERROR 메세지와 함께 생성이 안 됨
$ ansible-vault create tmp
New Vault password: 
Confirm New Vault password: 
ERROR! tmp exists, please use 'edit' instead

$

기존 파일을 암호화

# 기존에 존재하는 파일을 암호화 (1개)
$ ansible-vault encrypt inventory.INI
New Vault password: 
Confirm New Vault password: 
Encryption successful

# 기존에 존재하는 파일을 암호화 (여러 개)
$ ansible-vault encrypt 1.txt 2.txt
New Vault password: 
Confirm New Vault password: 
Encryption successful

# 암호화된 파일을 조회할 경우 아래와 같은 내용을 볼 수 있음
$ cat inventory.INI 
$ANSIBLE_VAULT;1.1;AES256
34646539333264386335643661346338343630333133663338353031393239626234346631373830
343565627373134363930336139353966613836356266363362650a636239626366633464636638646239
3730306265613563373245635673563456523453241512346345673833383863613663323862326266613433616166333363616166
35383566383437383433626533393963366630346136303738303043764257436348345743951651561561353861316431032765363930363866
3135626135663531363462323232316336313731313639313830563156156156168951865156302356065305616895156

Vault를 사용하여 기존에 존재하는 1개 이상의 파일을 암호화할 수 있습니다.

암호화된 파일 편집

$ ansible-vault eidt inventory.INI
Vault password:

암호화된 파일을 복호화하지 않은 상태에서 편집하려면 위와 같이 하면 됩니다.

암호화된 파일 패스워드 변경

$ ansible-vault rekey inventory.INI

Vault로 암호화된 파일을 사용할 때 필요한 패스워드를 변경하려면 위와 같이 하면 됩니다.

암호화된 파일을 복호화

$ ansible-vault decrypt inventory.INI  
Vault password: 
Decryption successful

$

Vault로 암호화된 파일을 복호화하여 영구적으로 일반 텍스트(Plaintext)로 만들고 싶을 경우 위와 같이 하면 됩니다.

암호화된 파일 열람

# 암호화된 파일을 텍스트 편집기로 일회적으로 열람
$ ansible-vault view inventory_temp.INI 
Vault password:

암호화된 파일의 내용을 복호화하지 않은 상태에서 보고싶다면 위와 같이 하면 됩니다.

 

[출처]

- https://docs.ansible.com/ansible/2.5/user_guide/vault.html

- https://www.joinc.co.kr/w/man/12/vault