Làm thế nào để mã hóa tập tin nhị phân trong Ansible?


9

Chúng tôi đang sử dụng Ansible Vault để lưu trữ mật khẩu, khóa riêng cho chứng chỉ, v.v. trong kho git Ansible Playbook của chúng tôi. Tất cả dữ liệu riêng tư hiện tại của chúng tôi ở dạng văn bản, vì vậy chúng tôi có thể lưu trữ nó trong các biến. Chúng sau đó được sử dụng trong các mẫu hoặc với contenttham số của mô-đun sao chép.

Bây giờ, chúng ta có một tệp Java KeyStore, đáng buồn là có định dạng nhị phân. Như vậy, nó không thể được lưu trữ bên trong một biến - hoặc ít nhất là tôi không biết làm thế nào để làm điều đó. Điều gì sẽ là cách dễ nhất để tệp của chúng tôi được mã hóa chính xác trong khi nó nằm trong git, nhưng có sẵn khi chạy ansible-playbook?

Những gì tôi đã thử mà không thành công:

  • Mã hóa tệp nhị phân trong base64, lưu trữ dữ liệu được mã hóa trong một biến và sử dụng mô-đun mẫu với {{base64_data | b64decode}}. Dẫn đến rất nhiều EF BF BDtrong kết xuất hex của tệp kết quả. Ba byte mã hóa ký tự thay thế Unicode trong UTF-8, do đó, có một vấn đề với việc diễn giải dữ liệu nhị phân dưới dạng văn bản.
  • Mã hóa tệp nhị phân trong base64, lưu trữ dữ liệu được mã hóa trong một biến và sử dụng mô-đun sao chép với content="{{base64_data | b64decode}}". Ansible phàn nàn với "Một biến chèn một tham số mới vào mô-đun args." Khi sử dụng dấu ngoặc đơn thay vì dấu ngoặc kép, Ansible phàn nàn với "chuỗi đối số phân tích lỗi" và một bản sao của tất cả dữ liệu nhị phân, được đổ vào thiết bị đầu cuối ...

Từ một cuộc thảo luận trong nhóm.google.com/d/topic/ansible-project/IinZK14FyX4 Tôi kết luận rằng ansible không hỗ trợ điều này và bạn phải tự mình thực hiện một số nội dung64, nhưng có thể có một số nội dung của bên thứ ba Điều đó có thể làm cho nó dễ dàng hơn.
Antonis Christofides

Cảm ơn, điều này là tìm kiếm tốt. Sẽ thử và báo cáo lại ...
Daniel Seither 11/215

Không, thật đáng buồn khi nó không hoạt động (xem câu hỏi được chỉnh sửa). Có một số cuộc thảo luận xung quanh một yêu cầu kéo khả thi có thể có liên quan: github.com/ansible/ansible-modules-extras/pull/142
Daniel Seither 12/215

Bạn đã nghĩ về việc gói này với các cuộc gọi GPG? Bạn có thể có bản trình bày ASCII của khóa riêng GPG được lưu trữ trong Ansible Vault và sử dụng mã đó để giải mã tệp nhị phân của bạn, sau đó có thể được lưu trữ trong git mà không gặp vấn đề gì.
Christopher Karel

Cảm ơn đề xuất của bạn, nhưng cách giải quyết này có liên quan nhiều hơn một chút so với tôi muốn. Tôi đã nghĩ về việc sao chép KeyStore được mã hóa base64 vào máy đích và có một trình xử lý giải mã tệp khi cập nhật, nhưng tôi thích một giải pháp không ném xung quanh các tệp tạm thời.
Daniel Seither

Câu trả lời:


4

Bạn có thể sử dụng lệnh shell với biến base64 để làm điều đó.

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

Eric


Đây chắc chắn là một tùy chọn, đặc biệt là vì nó không sử dụng tệp tạm thời. Đáng buồn thay, nó không cho phép Ansible phát hiện xem có thay đổi hay không, nhưng nó tốt hơn tất cả các giải pháp khác mà tôi đã thấy.
Daniel Seither

1
Tôi nghĩ rằng vault hỗ trợ nó ngay bây giờ: "Tính năng vault cũng có thể mã hóa các tệp tùy ý, thậm chí các tệp nhị phân. Nếu tệp được mã hóa vault được cung cấp làm đối số src cho mô-đun sao chép, tệp sẽ được đặt ở đích trên máy chủ đích được giải mã (giả sử mật khẩu vault hợp lệ được cung cấp khi chạy phát). " - docs.ansible.com/ansible/playbooks_vault.html
Mike

2
Lưu ý rằng họ dường như đã di chuyển văn bản được trích dẫn bởi @MikeGleasonjrCouturier sang một trang khác trong tài liệu ansible; xem docs.ansible.com/ansible/latest/vault.html ngay bây giờ.
Liam

2

Cách chúng tôi làm điều đó cho thiết lập ansible của chúng tôi là:

-Chúng tôi mã hóa tài liệu nhạy cảm riêng lẻ (một tập hợp con nhỏ trong kho lưu trữ của chúng tôi) bằng cách sử dụng https://www.agwa.name/projects/git-crypt/ -Chúng tôi luôn cam kết sử dụng thẻ ký hiệu git -Chúng tôi kiểm tra định kỳ nếu có bất kỳ tệp không dấu nào

Ưu điểm của git-crypt là vì nó phụ thuộc vào các bộ lọc git, mã hóa là trong suốt. Ngoài ra, bạn có thể cấp quyền truy cập vào kho lưu trữ cho các nhà phát triển mà không ảnh hưởng đến nội dung được mã hóa (nó sẽ bỏ qua các tệp được mã hóa nếu không có khóa giải mã nào có thể lấy được).

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.