Ansible ile kullanıcı yönetimi için en son teknoloji nedir?


10

Ansible'ı ~ 3 yıldır sürekli büyüyen linux sistemleri sürüsünü yönetmek için kullanıyorum. Soruma dalmadan önce bir bağlam belirlemem gerekiyor.

Günlük işimin bir parçası olarak, hepsi tek bir girişim / inkübatör şirketi çatısı altında faaliyet gösteren çeşitli şirketler için sistem tasarımı, kurulumu ve bakımı yapıyorum. Portföy şirketlerimiz arasında çok fazla çapraz tozlaşma vardır ve bu nedenle, sadece A, B ve C kullanıcılarının X şirketinin sistemlerine erişmesi gerektiğini söyleyemeyiz. Ayrıca Y şirketinin sistemlerine de erişmeleri gerekebilir. Bu, her şirketin sorumlu ortamının farklı bir git deposunda yaşadığı için karmaşıktır. Bu, kullanıcıları farklı şirket sistemlerine dağıtmak için çok sayıda kod çoğaltması olduğu anlamına gelir . Kullanıcıları belirli bir şirketin sistemlerine dağıtmak için bu gibi kod bloklarını kopyalayıp yapıştıracağım:

- 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

Yönetmek için <5 kullanıcım olduğunda bu işe yaradı, ancak kullanıcı tabanı büyüdükçe, anahtar döndürme, yeni parolalar, vb. İle işleri güncel tutmak gittikçe daha zahmetli hale geliyor.

Backstory ve bağlam belirlendiğinde sorum şu:

Merkezi bir kimlik doğrulama sistemi (LDAP, vb.) Kullanmanın bir seçenek olmadığını varsayarsak, çeşitli duyarlı oyun kitaplarının tüketebileceği merkezi bir kullanıcı veritabanı oluşturmakla nasıl başa çıkabilirim? Kullanıcıların, kullanıcı adlarının, parola karmasının ve genel anahtarların tek bir merkezi listesini tutabilmek ve ardından kullanıcıları (ana bilgisayar başına grup üyelikleriyle) her şirketin ana bilgisayarlarına dağıtabilmek isterim.

Bir çeşit oyun yapısı öngörüyorum:

- name: Deploy users
  user_management:
    - { name: "user1", groups: "sudo" }
    - { name: "user1", groups: "sudo" }

... her kullanıcının kullanıcı kimliği, karması ve ortak anahtarı merkezi listeden alınır ve her zamanki gibi konuşlandırılır.

Peki, hangi seçeneklerim var? Bunu bir süredir gündemde tutuyorum ve zaten yaptığımdan daha iyi bir şey bulamadım. Kullanıcı veritabanımı tutmak için özel bilgiler dosyasıyla bir şeyler yapabilir miyim?

Yanıtlar:


8

Oyunlarınızı ve verilerinizi ayırmanız gerekir.

Çok çeşitli müşteri sistemlerine yayılan tüm rollerim, gerçeklerim, vb. İle tek bir temsilcim var. Tüm rollerin esnek ve veri içermediğinden eminim. İçinde host_vars/fqdn.ymlveya group_vars/customer_name.ymlbu müşteriye veya uzak sisteme özgü verileri tanımlarım.

Benim rolleri çoğu gerektiği kadar zaman içinde genişletilir ve bunun yerine her şeyi yapmanın from roles/foo/main.ymlBen roles/foo/debian-foo.ymlve roles/foo/openbsd-foo.ymlyalnızca işletim sistemi veya başka bir durum maçları dahildir.

Basitleştirilmiş, roles/adduser/main.ymlşunları içerebilir:

- user: name={{ item.name }} ...
  with_items:
  - customer_users

ve group_vars/ACME.ymlşunları içerebilir:

customer_users:
- name: sausage
   uid: 32153
- name: beans
   uid: 1024

Sizin durumunuzda, roller klasörü tüm müşterilerinizde aynı olan paylaşılan bir alt modül olduğu sürece, git repolarında ayrı ve kabul edilebilir ortamlara sahip olmanız uygun olabilir.


Bu beni doğru yönde gösteriyor. Teşekkürler Alex! Yine de çeşitli rollerden ve / veya gruplardan başvurabileceğim tek bir kullanıcı adı / anahtar / uids / vb veritabanını nasıl koruyacağımı sıralamam gerekecek, ancak bunu nasıl başarabileceğim konusunda bazı fikirlerim olduğunu düşünüyorum.
EEAA

1
Rolleri hatırla @EEAA / tüm dosyaları ile bir dizin olabilir yapabilirsiniz kolayca centralize roller / all / staff.yml, roller / all / foo.yml, vb yüzden
Alex Holst
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.