궁금한게 많은 개발자 노트

[ Ansible ] Ansible Vault 본문

DevOps

[ Ansible ] Ansible Vault

궁금한게 많은 개발자 2023. 1. 8. 22:08

Ansible Vault

 

ansible을 이용하여 node host에서 명령어를 실행하기 위해서는, ansible에서 사용하는 특정 파일이나 playbook에비밀전호나 api키값과 같은 중요한 데이터(user정보, pw, ssh접근 정보, ssl 인증서)가 포함될 수 있습니다.

이러한 값들을 사전에 ansible 시스템에 추가하거나 vars혹은 inventory에 설정이 필요합니다. 

이러한 내용들은 텍스트로 직접 저장하면 보안에 문제가 생길 수 있으므로 암호화가 필요한데, 이러한 암호화를 수행해주는 것이 ansible vault입니다. 

ansible설치 시에 함께 설치되며 모든 구조화된 데이터파일을 암복호화 할 수 있습니다. (AES256을 사용하여 대칭형 압호화) ansible자체의 암호화 기능은 아니며 외부 python라이브러리를 사용합니다.

 

더 자세히 설명하자면, Ansible을 사용하면서 playbook에 일부 기밀 또는 비밀 번호를 입력해야 할 수 있습니다. 중요한 비밀 정보를 보호하는데 사용되며, 변수나 파일 및 yaml playbook을 암호화할 수 있습니다.  Ansible vault를 사용하려면 콘텐츠를 암호화하고 복호화하기 위한 하나 이상의 비밀번호가 필요합니다.

ansible-vault CLI를 사용하여 변수, 파일을 암복호화 할 경우에 ansible-vault 비밀번호를 사용합니다. 이러한 변수 및 파일을 암호화하는데 사용한 비밀번호를 playbook에 제공하여 사용할 수도 있습니다.

이러한 비밀번호는 파일로 관리하여 ansible.cfg에 vault_password_file으로 할당하여 사용합니다.

(실행 시 "--vault-password-file 파일 위치" 옵션으로도 사용 가능)

 

 

vault password managerment strategy가 있습니다. 소규모 팀에 있거나 암호관리자가 적은 경우에는 ansible vault로 암호화하는 모든 항목에 단일 암호를 사용할 수 있습니다. 하지만 팀 규모가 크거나 중요한 값이 많은 경우 여러 암호를 사용하면 신뢰성이 증가될 것입니다. 예를 들어 사용자 또는 액세스 수준에 따라 다른 암호를 사용할 수 있습니다.

필요에 따라 각 암호화된 파일, 각 디렉터리 또는 각 환경에 대해 서로 다른 암호를 원할 수 있습니다. 예를 들어 두 개의 다른 암호로 암호화된 개발 환경용과 프로덕션 환경용으로 하나씩 두 개의 vars 파일이 포함된 플레이북이 있을 수 있습니다. 플레이북을 실행할 때 볼트 ID를 사용하여 대상 환경에 대한 올바른 볼트 암호를 선택합니다.

vault 비밀번호를 여러 개 사용하는 경우 vault id로 비밀번호를 구별할 수 있습니다.

볼트 ID를 ansible-vault 명령 에 대한 옵션으로 전달할 때 암호화된 콘텐츠에 레이블(힌트 또는 닉네임)을 추가합니다. 이 레이블은 암호화에 사용한 암호를 기록합니다. 암호화된 변수 또는 파일에는 헤더에 일반 텍스트로 된 저장소 ID 레이블이 포함됩니다. 볼트 ID는 암호화된 콘텐츠 앞의 마지막 요소입니다. 아래에 보이시는 것 처럼 특정 vault-id를 사용하려면 !vault| 다음 줄의 마지막 요소에 dev라는 vault-id를 명시해주면 됩니다.

my_encrypted_var: !vault |
          $ANSIBLE_VAULT;1.2;AES256;dev
          30613233633461343837653833666333643061636561303338373661313838333565653635353162
          3263363434623733343538653462613064333634333464660a663633623939393439316636633863
          61636237636537333938306331383339353265363239643939666639386530626330633337633833
          6664656334373166630a363736393262666465663432613932613036303963343263623137386239
          6330

ansible 2.4 version부터는 CLI에서 --vault-id를 사용해 암호 사용을 권장하고 있습니다. 2.4 version이전에는 ansible 실행 시 하나의 vault 암호만 사용할 수 있었지만, 2.4 version이후부터 다중 vault 암호를 지원해 --vault-id를 여러번 제공할 수 있습니다.

 

 

 

[ 사용 예시 ]

  • 민감한 변수를 암호화하여 파일 생성 및 암호화한 파일을 해독
  • 암호화된 파일을 참조하는 playbook사용 가능
  • inventory변수, playbook, ansible role에서 정의된 변수 등 여러가지를 암호화 가능
목표하는 동작
명령어
암호화된 파일 생성
ansible-vault create [파일 경로]
암호화된 파일 내용 확인하기
ansible-vault view [encryption 파일 경로]
암호화된 파일 내용 편집하기
ansible-vault edit [encryption 파일 경로]
기존 파일 암호화
ansible-vault encrypt [origin 파일 경로]
암호화된 파일 복호화
ansible-vault decrypt [encryption 파일 경로]l
암호화된 파일의 password 변경
ansible-vault rekey [encryption 파일 경로]
변수 암호화
ansible-vault encrypt_string 'encryption 변수' --name 'vault 변수 명'

아래 옵션들을 통해 즉각 vault password 요청이나 file을 사용하거나, 특정 vault-id에 대한 암호를 사용할 수 있습니다.

ex) This command can rekey multiple data files at once and will ask for the original password and also the new password. To set a different ID for the rekeyed files, pass the new ID to --new-vault-id. For example, to rekey a list of files encrypted with the ‘preprod1’ vault ID from the ‘ppold’ file to the ‘preprod2’ vault ID and be prompted for the new password:

ansible-vault rekey --vault-id preprod1@ppold --new-vault-id preprod2@prompt foo.yml bar.yml baz.yml

 

사용법 및 더 자세한 내용은 아래 링크를 참고하면 좋을 것 같습니다.

https://docs.ansible.com/ansible/latest/vault_guide/vault_encrypting_content.html

 

Encrypting content with Ansible Vault — Ansible Documentation

Encrypting content with Ansible Vault Once you have a strategy for managing and storing vault passwords, you can start encrypting content. You can encrypt two types of content with Ansible Vault: variables and files. Encrypted content always includes the !

docs.ansible.com

 

 

'DevOps' 카테고리의 다른 글

[ AWS ] EFS - Elastic File System  (0) 2023.01.09
[ Ansible ] Ansible SSH Setting  (0) 2023.01.08
[ Ansible ] Ansible이란?  (0) 2023.01.07
[ Docker ] Docker란?  (0) 2023.01.07
[ AWS ] EC2 Instance Storage Section - 2  (0) 2022.12.09
Comments