Các thực tiễn tốt nhất để sử dụng Ansible Vault trên các kho lưu trữ kiểm soát nguồn và kiểm soát nguồn công cộng như BitBucket là gì?


11

Giới thiệu

Trên các kho lưu trữ kiểm soát nguồn và CI riêng như Gitlab-ce, có thể sao chép ~ / .vault_pass.txt vào máy chủ và cho phép CI sử dụng để giải mã các tệp bằng Ansible.

Vấn đề

Trên các kho lưu trữ kiểm soát nguồn và kiểm soát nguồn công cộng như Bitbucket, không thể sao chép một ~ / .vault_pass.txt vào máy chủ CI.

Thảo luận

Trong Bitbucket nó có thể định nghĩa các biến mã hóa, nhưng khi này tập tin sẽ được kiểm tra các biến có liên quan chỉ VAULT là:

  • ANSIBLE_ASK_VAULT_PASS
  • ANSIBLE_VAULT_PASSWORD_FILE

Các biến này không phải là một tùy chọn để giải quyết vấn đề như khi ANSIBLE_ASK_VAULT_PASSđược đặt ansible-vaultvẫn nhắc:

user@host $
Vault password:

Khi nhập cùng một mật khẩu, nó có thể mở tệp được mã hóa, nhưng mục đích là để mở tệp mà không cần tệp hoặc nhập mật khẩu trong lời nhắc.

Một nỗ lực khác để giải quyết vấn đề đang chạy export ANSIBLE_ASK_VAULT_PASS=<ansible-vault-password>, nhưng chế độ tương tác vẫn tồn tại.

Một tùy chọn khác là export ANSIBLE_VAULT_PASSWORD_FILE=~/.vault_pass.txt, nhưng sau đó tệp này cần được đẩy vào kho lưu trữ, nhưng kho Điều khiển nguồn không được chứa mật khẩu.


2
Xin chào @ 030, bạn có thể nói rõ ý của bạn về CI không? Đối với tôi điều này có nghĩa là Tích hợp liên tục , tuy nhiên cả GitLab và BitBucket cũng là Kho lưu trữ kiểm soát nguồn - câu hỏi sẽ rõ ràng hơn nếu CI được mở rộng ra.
Richard Slater

Câu trả lời:


8

--vault-password-filethay vào đó có thể trỏ đến một tập lệnh thực thi ghi vào thiết bị xuất chuẩn. Tính năng ít được biết đến này sẽ giải quyết vấn đề của bạn.

Đầu tiên, hãy viết một tập lệnh đơn giản, có thể thực thi, in một biến môi trường hệ thống và kiểm tra nó vào kiểm soát nguồn của bạn. Sau đó, sử dụng tính năng biến được mã hóa của Bitbucket để đặt biến môi trường đó thành bí mật ansible-vault của bạn. Cuối cùng, thực hiện như vậy:

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

Người giới thiệu:

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

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


Và sau đó mypass.sh sẽ chứa echo $VARví dụ và var này sẽ được đặt trong UI BitBucket?
030

Vâng Ngoài ra, đây là một ví dụ về Python: stackoverflow.com/questions/4906977/ từ
Woodland Hunter

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

1

Sử dụng

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

dẫn đến:

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.

Dựa trên bài đăng này, những điều sau đây được xác định trong bitbucket-pipelines:

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

Bạn có thể có một thiết lập thử nghiệm không chạy sản xuất và tải các tệp khác nhau cho các tệp đó.

Tạo một host_vars / localhost / vault chỉ hoạt động để cài đặt thử nghiệm cục bộ.

Bằng cách đó, bạn có thể sử dụng mật khẩu vault mở chỉ hoạt động cho kho lưu trữ cục bộ đó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.