49/120
Ansible Vault
변수파일에서 패스워드 부분
암호화 처리가 필요
암호화 -> CPU를 많이 사용 -> 필요한 부분만 암호화 -> 재사용 기법 사용
파일, 일부 텍스트를 암호화
- 파일 수준
플레이북 전체
인벤토리 변수 파일
include/import 작업 파일 - 텍스트 수준
변수의 값
Valut Password
관리 노드 접속 -> 키 쌍 인증
[vagrant@controller ~]$ ansible-vault create -h
optional arguments:
--ask-vault-pass ask for vault password
--vault-password-file VAULT_PASSWORD_FILES
#ansible-playbook 에도 볼트와 관련된 옵션들이 존재
[vagrant@controller ~]$ ansible-playbook -h
optional arguments:
--ask-vault-pass ask for vault password
--vault-id VAULT_IDS the vault identity to use
--vault-password-file VAULT_PASSWORD_FILES
AES 알고리즘 사용 (대칭키)
키는 나만 가지고 있으면 됨
컨트롤 노드에 플레이북에서 참조하는 파일들이 존재 -> 내 컴퓨터에 저장
실제 실행 시에는 풀어서 실행 -> 암호화된 데이터를 메모리에 올리고 메모리에서 풀기 -> 플레이북 실행
네트워크는 발생하지 않고 내 컴퓨터에서 실행되기 때문에 대칭키를 사용해도 무방
속도 비교 대칭키는 공개키보다 월등히 빠르다 -> 반대로 공개키는 대칭키에 비해 월등히 성능이 느려짐 -> 수학적인 알고리즘 때문에 -> 암호화 복호화 하는 키가 다르기 때문에 비용이 들어서
- 단일 패스워드 -> A 사용자가 B사용자의 내용 확인 가능 -> 키가 같기 때문에
- 멀티 패스워드 -> 사용자마다 다른 패스워드
사용법
ansible-vault [SUB-COMMAND] <FILE>
create
암호화할 빈 파일을 생성
[vagrant@controller vault]$ ansible-vault create a.yaml
New Vault password:
Confirm New Vault password:
[vagrant@controller vault]$ cat a.yaml
$ANSIBLE_VAULT;1.1;AES256
64656462623230313931313839353863376266353035386337393837323631383163396361316131
6631343335303666393439666464656233316465613063330a353762323230373065633934393065
암호화 되어 있음 -> 직접 수정해서는 안됨
view
암호화 된 파일을 보기
[vagrant@controller vault]$ ansible-vault view a.yaml
Vault password:
- hosts: 192.168.100.11
tasks:
- debug:
msg: hello world
edit
암호화된 파일 수정
[vagrant@controller vault]$ ansible-vault edit a.yaml
Vault password:
decrypt
암호화된 파일 암호화 해제
[vagrant@controller vault]$ ansible-vault decrypt a.yaml
Vault password:
Decryption successful
[vagrant@controller vault]$ cat a.yaml
- hosts: 192.168.100.11
tasks:
- debug:
msg: hello world
encrypt
기존 파일 암호화
[vagrant@controller vault]$ ansible-vault encrypt a.yaml
New Vault password:
Confirm New Vault password:
Encryption successful
[vagrant@controller vault]$ cat a.yaml
$ANSIBLE_VAULT;1.1;AES256
39373862393762613234346535356536393436356363373238306466313436393431656538353338
6662643565346432376264353930666664313030393035340a613835663363386137666262336633
rekey
암호화된 파일의 비밀번호 재설정
[vagrant@controller vault]$ ansible-vault rekey a.yaml
Vault password:
New Vault password:
Confirm New Vault password:
Rekey successful
--vault-password-file VAULT_PASSWORD_FILES
--ask-valult-pass 기본 옵션
- 비밀번호만 저장된 파일 생성
[vagrant@controller vault]$ echo "P@ssw0rd" > vaultpass
[vagrant@controller vault]$ cat vaultpass
P@ssw0rd
- 패스워드 입력 없이 파일안에 패스워드를 이용하여 vault 옵션 실행 가능
$ ansible-vault [SUB-COMMAND} <FILE> --vault-password-file vaultpass
- rekey에 같은 경우는 기존 파일과 새로 생성할 파일을 옵션으로 같이 지정
$ ansible-vault rekey --help
optional arguments:
-new-vault-password-file NEW_VAULT_PASSWORD_FILE
new vault password file for rekey
$ ansible-vault rekey a.yaml --vault-password-file valutpass --new-vault-passwod-file newvaultpass
ssh 접속을 위해 배스쳔을 두듯이 앤서블 컨트롤러를 공동으로 사용하는 경우
sudo 권한이 가능한 시스템은 다른사람 사용자에게 접근할 수 있음
루트 안주면 좋지만 어쩔수없이 줘야할 때 -> 패스워드파일이 보안상 좋지 않을수도 있음
ansible 설정파일에 암호파일 경로 설정
$ more /etc/ansible/ansible.cfg
---
# If set, configures the path to the Vault password file as an alternative to
# specifying --vault-password-file on the command line.
#vault_password_file = /path/to/vault_password_file
---
[vagrant@controller vault]$ vi ansible.cfg
[defaults]
vault_password_file = vaultpass
-vault-password-file vaultpass 옵션 없이 사용가능
안전하고 편하게 vault를 사용하는 방법ansible.cfg
암호파일을 숨김파일 지정후
[defaults]
vault_password_file = ./.vaultpass
.vaultpass
P@ssw0rd
암호파일의 소유자만 사용가능하도록 권한 설정
chmod 600 .vaultpass
암호화된 플레이북 실행
- 비밀번호를 직접 입력하여 실행
ansible-playbook plaintext.yaml --ask-vault-pass
- 암호파일을 이용하여 실행
ansible-playbook plaintext.yaml --vault-password-file <File>
- ansible.cfg에 암호파일 경로를 지정하여 실행-> playbook에도 옵션이 존재하기 때문
[vagrant@controller ~]$ ansible-playbook -h
optional arguments:
--ask-vault-pass ask for vault password
--vault-id VAULT_IDS the vault identity to use
--vault-password-file VAULT_PASSWORD_FILES
encrypt_string
특정 값을 암호화 -> 변수를 암호화 하려고 할 때 많이 사용
[vagrant@controller vault]$ ansible-vault encrypt_string
New Vault password:
Confirm New Vault password:
Reading plaintext input from stdin. (ctrl-d to end input)
hello world
!vault |
$ANSIBLE_VAULT;1.1;AES256
36313965353138363262383633613563646136643263393531343538313439323162643234353862
6635313861363435343536303535313137396331373833350a396637666334613663663739343166
34326563336666303330613364653735363963303437366465616464356463383939633461313038
3633363063383633320a373561646261656162346636336134343631323436663565366437356630
6262
Encryption successful
원하는 내용 입력후 [ctrl+d] 2번 or [enter][ctrl+d]
!부터의 내용을 전부 복사
test.yaml
- hosts: 192.168.100.11
vars:
message: !vault |
$ANSIBLE_VAULT;1.1;AES256
36313965353138363262383633613563646136643263393531343538313439323162643234353862
6635313861363435343536303535313137396331373833350a396637666334613663663739343166
34326563336666303330613364653735363963303437366465616464356463383939633461313038
3633363063383633320a373561646261656162346636336134343631323436663565366437356630
6262
tasks:
- debug:
msg: "{{message}}"
변수에 암호화된 내용 붙여넣기
그냥 실행하면 복호화 할수 없다고 뜸
[vagrant@controller vault]$ ansible-playbook test.yaml
TASK [debug]
fatal: [192.168.100.11]: FAILED! => {"msg": "Attempting to decrypt but no vault secrets found"}
ansible.cfg에 암호파일을 지정해두었다면 상관없지만 파일을 지정하지 않아 위처럼 에러가 난다 -> 암호를 질의하여 실행 -> string 암호화 할때 썻던 비밀번호 입력
[vagrant@controller vault]$ ansible-playbook test.yaml --ask-vault-pass
Vault password:
TASK [debug]
ok: [192.168.100.11] => {
"msg": "hello world\n"
}
단일 패스워드 오류
test.yaml
- hosts: 192.168.100.11
vars:
var.yaml
tasks:
- debug:
msg: "{{message1}} {{message2}"
var.yaml
message1: !vault |
$ANSIBLE_VAULT;1.1;AES256
30373636666531636139656666663036646335646466323863383639616131353538303530353561
3830373463346233376363313837386137653136326366340a376461633232633636323232316463
35376137386361616138666235323931376138336232343338396330376639346561343436353732
6161343565363930650a333832613134386334323764323333356235643139626261333039373236
3032
message2: !vault |
$ANSIBLE_VAULT;1.1;AES256
36646134343530303937666466343065333034323065353238343032353536636230316133633030
3938653064323162373665373661356665653636343336660a323634616136613661363136623238
66366334336463663237346530383061363830343732636530356639316161666262663232313064
6262346632626463390a306435313830316161393331306135656261376132373664643236653166
3366
두 변수에는 hello, world라는 단어를 각각 다른 패스워드로 암호화하여 저장
실행하게 되면 하나의 패스워드만 입력할 수 있기 때문에 하나는 복호화 하지못하여 결과적으로 실행이 불가 -> 그렇다면?! 멀티패스워드
멀티 패스워드
--vault-id 옵션 사용
--vault-id rable@source
rable을 id로 이해하면 쉬움
id를 사용하여 다른 패스워드를 사용할수 있도록 만들어줌
관련 내용
source
- prompt : 패스워드를 대화식의 프롬포트로 받음
--vault-id user1@prompt 패스워드를 프롬포트로 받음 대화 형식 - file : 파일에서 패스워드를 참조
--vault-id [email protected] - script : 패스워드를 참조할 수 있는 스크립트
예: 패스워는 MySQL 저장, python 코드로 DB에서 패스워드를 가져올 수 있는
--vault-id [email protected]
파이썬 코드를 지정
가장 안전하긴함 -> 코드를 짜야함
prompt
test.yaml
- hosts: 192.168.100.11
vars_files:
- var1.yaml
- var2.yaml
tasks:
- debug:
msg: "{{ message1 }} {{ message2 }}"
echo "message1: hello" > var1.yaml
echo "message2: world" > var2.yaml
파일을 id와 함께 각각 다른 비밀번호로 설정
ansible-vault encrypt var1.yaml --vault-id user1@prompt
New vault password (user1):
Confirm new vault password (user1):
Encryption successful
ansible-vault encrypt var2.yaml --vault-id user2@prompt
New vault password (user2):
Confirm new vault password (user2):
Encryption successful
--vault-id user1@prompt 옵션을 실행시에도 적용시켜 각각 비밀번호를 묻게하여 복호화
ansible-playbook test.yaml --vault-id user1@prompt --vault-id user2@prompt
[vagrant@controller vault]$ ansible-playbook test.yaml --vault-id user1@prompt --vault-id user2@prompt
Vault password (user1):
Vault password (user2):
TASK [debug]
ok: [192.168.100.11] => {
"msg": "hello world"
}
vault file
test.yaml
은 prompt 사용시와 동일
echo "message1: hello" > var1.yaml
echo "message2: world" > var2.yaml
echo "P@ssw0rd1" > user1pass
echo "P@ssw0rd2" > user2pass
# 보안상 권한은 설정하는 것이 좋음
chmod 600 user1pass
chmod 600 user2pass
ansible-vault encrypt var1.yaml --vault-id user1@user1pass
ansible-vault encrypt var2.yaml --vault-id user1@user2pass
# file 사용시 source는 파일명으로 지정
ansible-playbook test.yaml --vault-id user1@user1pass --vault-id user1@user2pass
Author And Source
이 문제에 관하여(49/120), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@numerok/49120저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)