Ý tưởng là đưa tất cả dữ liệu nhạy cảm của chúng tôi [...]
Ý nghĩa của "tất cả" trong câu này cần được phân tích rất cẩn thận trước khi thực hiện giải pháp mà bạn dự định.
Ansible vault là một công cụ rất hữu ích, nhưng nó chỉ nên được sử dụng để lưu trữ các bí mật đó là:
- Cụ thể cần thiết cho việc triển khai ansible
- Dễ dàng làm cho vô dụng đối với các chủ sở hữu nên không biết về họ, nhưng điều đó có thể "nhớ" họ một cách bất hợp pháp (thường là nhân viên nghỉ việc)
Điểm thứ hai là quan trọng.
Nhiều người, và có khả năng là toàn bộ nhóm DevOps, sẽ có quyền truy cập vào mật khẩu kho tiền an toàn và do đó tất cả các bí mật.
Do đó, đối với tất cả các bí mật được lưu trữ trong kho tiền, cần phải có một điều kiện mà một người hoặc máy có quyền truy cập trái phép vào họ sẽ không có khả năng sử dụng chúng nếu muốn.
Nói một cách cụ thể, nếu bạn sử dụng ansible để triển khai cơ sở dữ liệu và người dùng của nó, bạn có thể lưu trữ mật khẩu trong kho tiền, nhưng bạn sẽ phải rất cẩn thận (và rất có thể sẽ xem xét một giải pháp khác) nếu dịch vụ đó sẽ có sẵn từ Internet và không cần bất kỳ xác thực VPN nào!
Người dùng (DevOps) tiếp xúc với bí mật, sẽ không thể sử dụng mật khẩu "đã nhớ" nếu một rào cản bảo mật được áp đặt cho họ (ví dụ: thu hồi quyền truy cập VPN). Ngoài ra, quyền truy cập vào kho lưu trữ mã nguồn (nơi lưu trữ vault) cũng nên được thu hồi trước khi mật khẩu được thay đổi.
Trong những điều kiện này, ansible vault là một công cụ rất hữu ích.
Cố gắng lưu trữ một bí mật có thể được sử dụng bởi bất kỳ người nào hoặc máy trên Internet trong kho tiền sẽ là một sai lầm (ví dụ: thông tin đăng nhập VPN của người dùng).
Có lựa chọn nào khác không, đó là cách tốt nhất (và an toàn) để lưu trữ mật khẩu ansible-vault
Theo các điều kiện từ đoạn trước, tôi nghĩ rằng một thực hành tốt sẽ là:
- Lưu trữ mật khẩu vault trong một hầm bảo mật bên ngoài (một cái gì đó như Vault từ HashiCorp hoặc bất kỳ SaaS nào để quản lý thông tin đăng nhập)
- Cho phép truy cập vào mục kho tiền bên ngoài vào DevOps (họ sẽ cần mật khẩu để kiểm tra) và hệ thống CI / CD hoặc bộ điều khiển ansible
Giữ một quy ước để sử dụng bí mật ! Bạn sẽ không thể xem xét các thay đổi đối với các bí mật và bạn sẽ không thể grep cho các biến có thể tìm thấy trong các tệp bí mật! Vì vậy, hãy cẩn thận kể từ đầu. Một quy ước tốt là đặt tên cho tất cả các biến được lưu trữ trong hầm ansible với secret_
tiền tố. Khi bạn sẽ thấy một cái gì đó như:
postgres.yml:
postgres_password: "{{ secret_postgres_password }}"
bạn sẽ biết rằng giá trị được lưu trữ trong hầm ansible.