Thực hành tốt nhất về cấu trúc các biến mã hóa kể từ Ansible 2.3.0 là gì?


8

Tài liệu này chỉ ra rằng vì Ansible 2.3 nên có thể mã hóa một số vars nhất định bằng cách sử dụng !vault |tiền tố thay vì đặt một biến và khóa trong tệp vault và mã hóa hoàn toàn.

notsecret: myvalue
mysecret: !vault |
          $ANSIBLE_VAULT;1.1;AES256
          66386439653236336462626566653063336164663966303231363934653561363964363833313662
          6431626536303530376336343832656537303632313433360a626438346336353331386135323734
          62656361653630373231613662633962316233633936396165386439616533353965373339616234
          3430613539666330390a313736323265656432366236633330313963326365653937323833366536
          34623731376664623134383463316265643436343438623266623965636363326136
other_plain_text: othervalue

Hiện tại cấu trúc như sau:

ansible/group_vars/testing/vars
ansible/group_vars/testing/vault

Khi một biến được mã hóa được chuyển từ vault sang thư mục vars và ansible-vault decrypt ansible/group_vars/testing/varsđược chạy, nó sẽ trả về:

ERROR! input is not vault encrypted data for ansible/group_vars/testing/vars

Biến vault này được giải mã với bí mật vault được cung cấp và được sử dụng như một biến thông thường. Dòng lệnh ansible-vault hỗ trợ stdin và stdout để mã hóa dữ liệu một cách nhanh chóng, có thể được sử dụng từ trình soạn thảo yêu thích của bạn để tạo các biến bị lỗi này; bạn chỉ cần chắc chắn thêm thẻ! vault để cả Ansible và YAML đều biết cần phải giải mã. | cũng được yêu cầu, vì mã hóa vault dẫn đến một chuỗi nhiều dòng.

Câu hỏi

  1. Các biến cần được mã hóa, được mã hóa từng cái một bằng cách sử dụng dòng lệnh?
  2. Thực hành tốt nhất để tái cấu trúc cấu trúc Ansible cũ là gì? Ví dụ: loại bỏ các tập tin vault và đặt tất cả các vars được mã hóa trong tập tin vars?

Câu trả lời:


2

Gần đây đã làm việc với kho tiền ansible khá nhiều (cụ thể là về cách mã hóa và cách mã hóa những thứ đó mà không làm cho mã không thể đọc được) Tôi đã tìm thấy rất ít động lực để thay đổi thói quen của mình trong 2.3.

Nếu tôi sẽ có một loạt các biến hoặc tệp được mã hóa, hãy tách chúng ra (tôi đặt tiền tố cho tất cả chúng vault_) và chỉ để nó ở đó.

Một vài lần tôi đã sử dụng tính năng! Vault nhưng lại vô cùng ngạc nhiên vì có vẻ dễ hiểu hơn về những gì đang và không đến từ một tập tin bí mật. Bằng cách đó, không ai chỉnh sửa các vở kịch của tôi đưa ra các giả định về dữ liệu nhạy cảm và không nhạy cảm.


1

Tôi đã quyết định xóa ansible/group_vars/testingthư mục và thay thế nó bằng một tệp, tức là ansible/group_vars/testingcó chứa các vars được mã hóa:

mysecret: !vault |
          $ANSIBLE_VAULT;1.1;AES256
          66386439653236336462626566653063336164663966303231363934653561363964363833313662
          6431626536303530376336343832656537303632313433360a626438346336353331386135323734
          62656361653630373231613662633962316233633936396165386439616533353965373339616234
          3430613539666330390a313736323265656432366236633330313963326365653937323833366536
          34623731376664623134383463316265643436343438623266623965636363326136

Thay vì chạy, ansible-vault edit ansible/group_vars/testing/vaultngười ta có thể chuyển các giá trị cần được mã hóa sang ansible-vault, tức là printf mysecret | ansible-vault encrypt. Cái sau sẽ mã hóa mysecretvà đầu ra có thể được thêm vào ansible/group_vars/testingtập tin. Khi nào ansible-playbookđược chạy, các biến được mã hóa sẽ được giải mã nếu tệp vault ansible được chỉ định tất nhiên.

Nếu giá trị được mã hóa cần được gỡ lỗi thì có thể sử dụng đoạn mã sau:

- debug: msg="Decrypted value: {{ encrypted_var }}"
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.