อะไรคือแนวทางปฏิบัติที่ดีที่สุดสำหรับการใช้ Ansible Vault บนที่เก็บข้อมูลสาธารณะและ CI ของแหล่งควบคุมเช่น BitBucket?


11

บทนำ

บน CI ส่วนตัวและที่เก็บข้อมูลการควบคุมแหล่งเช่น Gitlab-ce คุณสามารถคัดลอก ~ / .vault_pass.txt ไปยังเซิร์ฟเวอร์และปล่อยให้ CI ใช้ถอดรหัสไฟล์โดยใช้ Ansible

ปัญหา

ในที่สาธารณะ CI และแหล่งที่มาการควบคุมแหล่งที่มาเช่น Bitbucket ไม่สามารถคัดลอก ~ / .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-vault ของคุณ สุดท้ายดำเนินการดังนี้:

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.

ขึ้นอยู่กับโพสต์นี้ต่อไปนี้ถูกกำหนดใน 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

คุณสามารถตั้งค่าการทดสอบที่ไม่ได้ใช้งานจริงและโหลดไฟล์ต่าง ๆ สำหรับไฟล์เหล่านั้น

สร้าง host_vars / localhost / vault ที่ใช้งานได้กับการติดตั้งทดสอบในเครื่องเท่านั้น

ด้วยวิธีนี้คุณสามารถใช้รหัสผ่าน vault แบบเปิดที่ใช้งานได้กับโลคัลโฮสต์ห้องนั้นเท่านั้น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.