BitBucket과 같은 공개 CI 및 소스 제어 리포지토리에서 Ansible Vault를 사용하는 모범 사례는 무엇입니까?


11

소개

개인 CI 및 Gitlab-ce와 같은 소스 제어 리포지토리에서 ~ / .vault_pass.txt를 서버에 복사하고 CI에서 Ansible을 사용하여 파일을 해독 할 수 있습니다.

문제

Bitbucket과 같은 공용 CI 및 소스 제어 리포지토리에서는 ~ / .vault_pass.txt를 자체 CI 서버에 복사 할 수 없습니다.

토론

Bitbucket에서는 암호화 된 변수를 정의 할 수 있지만 파일을 검사 할 때 VAULT 관련 변수는 다음과 같습니다.

  • ANSIBLE_ASK_VAULT_PASS
  • ANSIBLE_VAULT_PASSWORD_FILE

이 변수 는가 여전히 ANSIBLE_ASK_VAULT_PASS설정 되어있을 때 문제를 해결하기위한 옵션이 아닙니다 ansible-vault.

user@host $
Vault password:

동일한 비밀번호를 입력하면 암호화 된 파일을 열 수 있지만, 파일이 필요하거나 프롬프트에 비밀번호를 입력하지 않고 파일을 여는 것이 목표입니다.

문제를 해결하기위한 또 다른 시도가 실행 export ANSIBLE_ASK_VAULT_PASS=<ansible-vault-password>중이지만 대화식 모드는 계속 유지됩니다.

다른 옵션은 export ANSIBLE_VAULT_PASSWORD_FILE=~/.vault_pass.txt이지만이 파일을 리포지토리로 푸시해야하지만 소스 제어 리포지토리에는 비밀번호가 포함되어서는 안됩니다.


2
안녕하세요 @ 030, CI의 의미를 분명히 말씀해 주시겠습니까? 나에게 이것은 지속적인 통합을 의미 하지만 GitLab과 BitBucket은 소스 컨트롤 리포지토리이기도합니다 .CI가 확장되면 문제가 더 명확해질 것입니다.
Richard Slater

답변:


8

--vault-password-file대신 stdout에 쓰는 실행 스크립트를 가리킬 수 있습니다. 이 알려진 기능은 문제를 해결합니다.

먼저, 시스템 환경 변수를 인쇄하는 간단한 실행 가능한 스크립트를 작성하고이를 소스 제어에서 확인하십시오. 그런 다음 Bitbucket의 암호화 된 변수 기능을 사용하여 해당 환경 변수를 안전한 볼트 암호로 설정하십시오. 마지막으로 다음과 같이 실행하십시오.

ansible-playbook site.yml --vault-password-file ./mypass.sh.

참고 문헌 :

  1. http://docs.ansible.com/ansible/playbooks_vault.html#running-a-playbook-with-vault

  2. https://groups.google.com/forum/#!topic/ansible-devel/1vFc3y6Ogto


그런 다음 mypass.sh echo $VAR에 예를 들어이 var가 BitBucket UI에서 설정됩니까?
030

예! 또는 다음은 Python 예제입니다. stackoverflow.com/questions/4906977/…
Woodland Hunter

([Errno 8] Exec format error). If this is not a script, remove the executable bit from the file.
030

1

사용

ansible-playbook site.yml --vault-password-file ./mypass.sh

결과 :

ERROR! Problem running vault password script / p a t h / t o
/ e c h o _ v a u l t _ p a s s . s h ([Errno 8] Exec format error). If this is 
not a script, remove the executable bit from the file.

이 게시물을 기반으로 다음이 비트 버킷 파이프 라인에서 정의되었습니다.

image: docker:latest

pipelines:
  default:
    - step:
        script:
          - echo $ANSIBLE_VAULT_PASSWORD > .vault_password.txt
          - ansible-playbook -i ansible/inventory ansible/site.yml --vault-password-file .vault_password.txt

-1

프로덕션을 실행하지 않는 테스트를 설정하고 다른 파일을로드 할 수 있습니다.

로컬 테스트 설치에서만 작동하는 host_vars / localhost / vault를 작성하십시오.

이렇게하면 해당 로컬 호스트 볼트에 대해서만 작동하는 열린 볼트 암호를 사용할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.