일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 자바스크립트
- Python
- elasticsearch
- asyncio
- IAM
- Kubernetes
- AWS
- Service
- EC2
- asgi
- github
- 쿠버네티스
- IAC
- dockerfile
- intervals
- Django
- FastAPI
- terraform
- ebs
- WSGI
- YAML
- EKS
- leetcode
- DevOps
- POD
- Deployment
- ansible
- docker
- K8S
- event loop
- Today
- Total
궁금한게 많은 개발자 노트
[ Ansible ] 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로 비밀번호를 구별할 수 있습니다.
- 암호화된 콘텐츠를 생성할 때 ansible-vault--vault-id 명령 에 전달합니다.
- 해당 볼트 ID의 암호를 저장할 때마다 이를 포함합니다( 볼트 암호 저장 및 액세스 참조 ).
- 해당 볼트 ID로 암호화한 콘텐츠를 사용하는 플레이북을 실행할 때 ansible-playbook--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에 대한 암호를 사용할 수 있습니다.
- --ask-vault-pass - prompt for the vault password
- --vault-id - use a specific users password in a file
- --vault-password-file - use a single password in a file (or the vault_password_file directive in ansible.cfg)
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
'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 |