Ansible에서 바이너리 파일을 암호화하는 방법?


9

Ansible Vault 를 사용하여 Ansible Playbook git 저장소에 비밀번호, 인증서의 개인 키 등을 저장하고 있습니다. 기존의 모든 개인 데이터는 텍스트 형식이므로 변수에 저장할 수 있습니다. 그런 다음 템플릿 또는 content복사 모듈 의 매개 변수 와 함께 사용됩니다 .

슬프게도 바이너리 형식의 Java KeyStore 파일이 있습니다. 따라서 변수 안에 저장할 수 없거나 적어도 어떻게 해야할지 모르겠습니다. 파일이 git에있는 동안 파일을 올바르게 암호화하는 가장 쉬운 방법은 무엇입니까 ansible-playbook?

내가 성공하지 않고 이미 시도한 것 :

  • 이진 파일을 base64로 인코딩하고 인코딩 된 데이터를 변수에 저장하고 with with 템플릿 모듈을 사용합니다 {{base64_data | b64decode}}. EF BF BD결과 파일의 16 진 덤프 가 많이 발생합니다. 3 바이트는 유니 코드 대체 문자를 UTF-8로 인코딩하므로 이진 데이터를 텍스트로 해석하는 데 문제가 있습니다.
  • 이진 파일을 base64로 인코딩하고, 인코딩 된 데이터를 변수에 저장하고 와 함께 복사 모듈을 사용합니다 content="{{base64_data | b64decode}}". Ansible은 "변수가 모듈 args에 새 매개 변수를 삽입했습니다"라고 불평합니다. 큰 따옴표 대신 작은 따옴표를 사용하는 경우 Ansible은 "오류 구문 분석 인수 문자열"및 터미널에 덤프 된 모든 이진 데이터의 사본으로 불평합니다.

groups.google.com/d/topic/ansible-project/IinZK14FyX4 의 토론에서 ansible은이 기능을 지원하지 않으며, base64 작업을 직접 수행해야하지만 타사 제품이있을 수 있다고 결론지었습니다. 쉽게 만들 수 있습니다.
Antonis Christofides

고마워, 이것은 좋아 보인다. 그것을 시도하고 다시보고합니다 ...
다니엘 Sather

아니요, 슬프게도 작동하지 않습니다 (편집 된 질문 참조). 관련이있을 가능성이있는 ansible 풀 요청 주위 논의가있다 : github.com/ansible/ansible-modules-extras/pull/142
다니엘 Seither

이것을 GPG 호출로 래핑하는 것에 대해 생각해 보셨습니까? Ansible Vault에 GPG 개인 키의 ASCII 표현을 저장하고이 파일을 사용하여 이진 파일의 암호를 해독 한 다음 문제없이 git에 저장할 수 있습니다.
Christopher Karel 2019

귀하의 제안에 감사드립니다.하지만이 해결 방법은 내가 원하는 것보다 조금 더 복잡합니다. 나는 base64로 인코딩 된 KeyStore를 대상 컴퓨터에 복사하고 업데이트시 파일을 디코딩하는 핸들러를 갖는 것에 대해 이미 생각했지만 임시 파일을 던지지 않는 솔루션을 선호합니다.
Daniel Seither

답변:


4

base64 변수와 함께 쉘 명령을 사용하여이를 수행 할 수 있습니다.

- vars:
  - myvar: "<my_base64_var>"
- name: Create binary file
  shell: "echo '{{myvar}}' | base64 -d > /var/tmp/binary.dat"

에릭


이것은 특히 임시 파일을 사용하지 않기 때문에 확실히 옵션입니다. 슬프게도 Ansible이 변경 여부를 감지 할 수는 없지만 내가 본 다른 모든 솔루션보다 낫습니다.
다니엘 사 르트

1
"볼트 기능은 바이너리 파일까지도 임의의 파일을 암호화 할 수 있습니다. 볼트 암호화 된 파일이 복사 모듈에 대한 src 인수로 제공되면 파일은 대상 호스트의 대상에 배치됩니다. 암호를 해독했습니다 (플레이를 실행할 때 유효한 볼트 암호가 제공되었다고 가정). " - docs.ansible.com/ansible/playbooks_vault.html
마이크 클리 슨 주니어 COUTURIER

2
@MikeGleasonjrCouturier가 인용 한 텍스트를 사용 가능한 문서의 다른 페이지로 이동 한 것으로 보입니다. 지금 docs.ansible.com/ansible/latest/vault.html을 참조하십시오 .
Liam

2

가능한 설정을위한 방법은 다음과 같습니다.

-우리는 https://www.agwa.name/projects/git-crypt/를 사용하여 개별 민감한 자료 (저장소의 작은 하위 집합)를 암호화합니다 -우리는 항상 git sign 태그를 사용하여 커밋합니다-서명되지 않은 파일이 있는지 주기적으로 확인합니다

git-crypt의 장점은 git 필터를 사용하므로 암호화가 투명하다는 것입니다. 또한 암호화 된 컨텐츠를 손상시키지 않고 개발자에게 저장소에 대한 액세스 권한을 부여 할 수 있습니다 (복호화 키를 얻을 수없는 경우 암호화 된 파일은 무시 됨).

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