2017-12-04 21 views
0

상황Ansible - 동적 프롬프트 볼트 암호 내 회사에서

을 필요로 할 때, 우리는 우리의 서버에 대한 우리의 ansible 스크립트를 포함하는 공유 저장소가 있습니다. 가까운 장래에 서비스 비밀번호를 처리 할 볼트 변수를 소개하고 싶습니다. 현재는 Google Play 북 시작시 암호화 된 비밀번호를 사용합니다. 이 솔루션은 성가신 일입니다 (일부 게임에 3 가지 암호를 요구했습니다). 우리 ansible 대부분의 사용자는 더 전문가가 없기 때문에

필요한 것은

, 나는 그들이 원활하게 플레이 북을 실행할 수 있도록하고 싶습니다. ansible-playbook 명령이 짧아야하며 필수 매개 변수없이 작동해야 함을 의미합니다 (예 : --ask-sudo-pass 및 기타 명칭 없음). 또한 필요한 경우에만 작장을 시작할 때 볼트 암호를 묻는 것을 선호한다는 의미입니다. 또한, 쉽게 공유 할 수 없기 때문에 가능한 암호 파일을 사용하고 싶지 않습니다. 그리고 나는 우리의 모든 유능한 사용자 컴퓨터에 일반 텍스트 암호 파일을 가지고 있다는 생각을 좋아하지 않기 때문에 가능하지 않습니다.

문제

모든 관심 플레이 북에 대한 --ask-vault-pass 추가는 옵션이 아닙니다. 우리의 유능한 사용자는 때때로이 매개 변수가 필요한 이유와 때로는 그렇지 않은 이유를 이해하지 못합니다. 반대로, 모든 게임 플레이 북에 대한 금고 비밀번호를 묻는 것은 부담입니다. 왜냐하면 우리는 많은 플레이 북과 sudo 비밀번호가 이미 매번 요청되기 때문입니다.

prompts과 다양한 옵션을 사용하여 다음 해결책을 얻으려고했습니다. 아무것도 작동하는 것 같습니다. 문서는이 작업을 수행하는 방법을 설명하지 않습니다 : (나)에 따라

가장 좋은 해결책을

이의이 main.yml 파일을 살펴 보자 : 이제

- import_tasks: foo.yml 
    tags: always 

- import_tasks: bar.yml 
    tags: bar 

# Only this tasks uses a vault encrypted variable 
- import_tasks: baz.yml 
    tags: [baz, vault] 

main.yml을 수입하는 playbook.yml있다 파일.

완벽한 세계에서

,이 일이 싶습니다

예 1 :

ansible-playbook -i prod playbook.yml 

Vault password: 

예 2 :

ansible-playbook -i prod playbook.yml --tags baz 

Vault password: 

예 3 :

ansible-playbook -i prod playbook.yml --tags foo 

# it runs without asking for vault password, because no tasks needing vault 
# password will be run 

Q를 uccess

볼트 암호가 필요할 때만 (즉, 볼트 암호화 된 변수가 발생할 때마다) 묻는 것이 가능하도록 구성하려면 어떻게해야합니까? 심지어 가능할까요? 그렇지 않다면, 상황에 따라 어떤 해결 방법이 실행 가능합니까?

감사합니다.

답변

0

해결 방법이 있습니다.

아이디어는 항상 각 플레이 북에 대한 볼트 암호 만 필요로하는 안전한 볼트 파일에서 모든 비밀번호 (sudo 포함)를로드하는 것입니다. 즉, 모든 컴퓨터가 동일한 배포자 사용자 암호를 가져야합니다. 이전에 비해 훨씬 간단합니다. 왜냐하면 모든 것을 제어 할 수있는 단일 마스터 비밀번호 (볼트 비밀번호)가 있기 때문입니다.

ansible.cfg을 :

이 그것을 어떻게하는지입니다

[privilege_escalation] 
become_ask_pass = False 
become = True 

[defaults] 
ask_vault_pass = True 

vars/vault/ENV :

_vault: 
    sudo: !vault | 
     $ANSIBLE_VAULT;1.1;AES256 
     BLAHBLAHBLAH 
    another_pass: !vault | 
       $ANSIBLE_VAULT;1.1;AES256 
       ANOTHERENCRYPTEDPASSWORD 

그리고 각 작전에 대한 :

# Playbook stuff 
# [...] 

vars: 
    ansible_become_pass: "{{ _vault.sudo }}" 
vars_files: 
    # env var is set dynamically in inventory file, so I can have different password per env. 
    # If the file is not found, it loads an empty null file 
    - [ "vars/vault/{{ env }}", "vars/null"] 

# [...] Loading other var files 

이제 간단한 ansible-playbook -i env/prod myPlayBook.yml 만 볼트 암호, sudo를 또는 무엇에 대한 어떤 메시지를 요청합니다. 일관적이고 쉽게 공유 할 수 있습니다 (암호화 된 암호 파일과 볼트 암호 만 공유해야 함).