Saya telah menggunakan Ansible, untuk kesuksesan besar, selama ~ 3 tahun sekarang untuk mengelola kawanan sistem linux yang terus berkembang. Sebelum menyelam ke pertanyaan saya, saya perlu mengatur beberapa konteks.
Sebagai bagian dari pekerjaan saya sehari-hari, saya melakukan perancangan sistem, penyebaran, dan pemeliharaan untuk berbagai perusahaan yang semuanya beroperasi di bawah payung perusahaan satu usaha / inkubator. Ada banyak penyerbukan silang di antara perusahaan portofolio kami, dan karena itu, kami tidak dapat mengatakan bahwa hanya pengguna A, B, dan C yang akan memerlukan akses ke sistem perusahaan X. Mereka juga mungkin memerlukan akses ke sistem perusahaan Y juga. Ini diperumit oleh fakta bahwa lingkungan yang memungkinkan masing-masing perusahaan hidup dalam repositori git yang berbeda. Ini berarti ada banyak duplikasi kode untuk menempatkan pengguna ke sistem perusahaan yang berbeda. Saya akhirnya menyalin / menempel blok kode seperti ini untuk menyebarkan pengguna ke sistem perusahaan tertentu:
- name: add several users
user: >
name={{ item.name }}
state=present
groups={{ item.groups }}
uid={{ item.uid }}
password={{ item.password }}
shell=/bin/bash
with_items:
- { name: 'user1', groups: 'ssh-access,sudo', uid: '501', password: '<redacted>' }
- { name: 'user2', groups: 'ssh-access,sudo', uid: '502', password: '<redacted>' }
tags: users
- name: authorized_keys - user1
action: authorized_key user=user1 key="{{ lookup('file', 'pubkeys/user1') }}" manage_dir=yes
tags:
- pubkeys
- users
- name: authorized_keys - user2
action: authorized_key user=user2 key="{{ lookup('file', 'pubkeys/user2') }}" manage_dir=yes
tags:
- pubkeys
- users
Ini berfungsi dengan baik ketika saya memiliki <5 pengguna untuk dikelola, tetapi seiring dengan pertumbuhan basis pengguna, menjadi semakin sulit untuk terus memperbarui informasi dengan rotasi tombol, kata sandi baru, dll.
Dengan latar belakang dan konteks diatur, dilanjutkan dengan pertanyaan saya:
Dengan asumsi bahwa menggunakan sistem otentikasi terpusat (LDAP, dll.) Bukanlah suatu pilihan, bagaimana saya bisa menangani membuat database pengguna terpusat yang dapat dikonsumsi oleh berbagai buku pedoman yang mungkin? Saya ingin dapat mempertahankan satu daftar pusat pengguna, uids, kata sandi hash, dan kunci publik, dan kemudian dapat menyebarkan pengguna (dengan keanggotaan grup kustom per-host) ke host masing-masing perusahaan.
Saya membayangkan semacam struktur permainan seperti:
- name: Deploy users
user_management:
- { name: "user1", groups: "sudo" }
- { name: "user1", groups: "sudo" }
... di mana setiap pengguna uid, hash, dan kunci publik akan ditarik dari daftar pusat dan digunakan seperti biasa.
Jadi, opsi apa yang saya miliki? Saya telah merenungkan hal ini selama beberapa waktu, dan belum dapat menemukan sesuatu yang lebih baik dari apa yang sudah saya lakukan. Bisakah saya melakukan sesuatu dengan file fakta khusus untuk menampung basis data pengguna saya?