Ansible के साथ उपयोगकर्ता प्रबंधन के लिए कला की वर्तमान स्थिति क्या है?


10

मैं बड़ी सफलता के लिए, 3 साल के लिए, अब लिनक्स सिस्टम के बढ़ते झुंड के प्रबंधन के लिए, Ansible का उपयोग कर रहा हूं। अपने प्रश्न में गोता लगाने से पहले, मुझे कुछ संदर्भ निर्धारित करने की आवश्यकता है।

अपने दिन के काम के हिस्से के रूप में, मैं विभिन्न कंपनियों के लिए सिस्टम डिजाइन, तैनाती और रखरखाव करता हूं, जो सभी एक ही उद्यम / इनक्यूबेटर कंपनी की छतरी के नीचे काम करते हैं। हमारी पोर्टफोलियो कंपनियों के बीच बहुत अधिक पार-परागण है, और इस तरह, हम यह नहीं कह सकते हैं कि केवल उपयोगकर्ताओं को ए, बी और सी को कंपनी के एक्स सिस्टम तक पहुंच की आवश्यकता होगी। उन्हें कंपनी Y के सिस्टम तक भी पहुँच की आवश्यकता हो सकती है। यह इस तथ्य से जटिल है कि प्रत्येक कंपनी का पर्यावरणीय वातावरण एक अलग गिट रिपॉजिटरी में रहता है। इसका मतलब है कि विभिन्न कंपनी के सिस्टम में उपयोगकर्ताओं को तैनात करने के लिए बहुत सारे कोड डुप्लिकेट हैं। मैं कुछ खास कंपनी के सिस्टम में उपयोगकर्ताओं को तैनात करने के लिए कोड की कॉपी / पेस्ट को इस तरह से समाप्त करता हूं:

- 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

जब मैंने 5 <उपयोगकर्ताओं को प्रबंधित करने के लिए यह ठीक काम किया था, लेकिन जैसे-जैसे उपयोगकर्ता आधार बढ़ता है, तो यह महत्वपूर्ण हो जाता है कि वे कुंजी रोटेशन, नए पासवर्ड आदि के साथ अद्यतित रहें।

मेरे सवाल के साथ, बैकस्टोरी और संदर्भ सेट के साथ:

यह मानते हुए कि एक केंद्रीकृत प्रमाणीकरण प्रणाली (एलडीएपी, आदि) का उपयोग करना एक विकल्प नहीं है, मैं एक केंद्रीकृत उपयोगकर्ता डेटाबेस बनाने से कैसे निपट सकता हूं जो विभिन्न ansible playbooks उपभोग कर सकते हैं? मैं उपयोगकर्ताओं, यूआईडी, पासवर्ड हैश और सार्वजनिक कुंजी की एक केंद्रीय सूची बनाए रखने में सक्षम होना पसंद करूंगा, और फिर प्रत्येक कंपनी के मेजबानों के लिए उपयोगकर्ताओं (कस्टम प्रति-होस्ट समूह सदस्यता के साथ) को तैनात करने में सक्षम हो सकता हूं।

मैं किसी प्रकार की खेल संरचना की कल्पना कर रहा हूँ जैसे:

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

... जहां प्रत्येक उपयोगकर्ता के यूआईडी, हैश और सार्वजनिक कुंजी को केंद्रीय सूची से खींच लिया जाएगा और हमेशा की तरह तैनात किया जाएगा।

तो, मेरे पास क्या विकल्प हैं? मैं काफी समय से इसे घेर रहा हूं, और जो मैं पहले से कर रहा हूं उससे बेहतर कुछ भी नहीं कर पाया। क्या मैं अपने उपयोगकर्ता डेटाबेस को रखने के लिए कस्टम तथ्यों फ़ाइल के साथ कुछ कर सकता हूं?

जवाबों:


8

आपको अपने नाटकों और अपने डेटा को अलग करने की आवश्यकता है।

मेरे पास अपनी सभी भूमिकाओं, तथ्यों आदि के साथ एक ही रेपो है, जो ग्राहक प्रणालियों की एक विस्तृत श्रृंखला के लिए तैनात है। मैं यह सुनिश्चित करता हूं कि सभी भूमिकाएँ resuable और डेटा से मुक्त हों। में host_vars/fqdn.ymlया group_vars/customer_name.ymlमैं उस ग्राहक या दूरस्थ प्रणाली के लिए विशिष्ट डेटा को परिभाषित करता हूं।

मेरी अधिकांश भूमिकाओं को समय के साथ-साथ जरूरत के अनुसार विस्तारित किया जाता है और इसके बजाय from roles/foo/main.ymlमेरे पास जो कुछ भी है roles/foo/debian-foo.ymlऔर roles/foo/openbsd-foo.ymlवह केवल ओएस या किसी अन्य शर्त से मेल खाने पर ही शामिल होता है।

सरलीकृत, roles/adduser/main.ymlइसमें शामिल हो सकता है:

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

और group_vars/ACME.ymlइसमें शामिल हो सकते हैं:

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

आपके मामले में प्रत्येक जीआईटी रेपो में अलग वातावरण रखने के लिए यह ठीक हो सकता है जब तक कि रोल्स फ़ोल्डर एक साझा सबमॉड्यूल है जो आपके सभी ग्राहकों में समान है।


यह मुझे सही दिशा में इंगित करता है। धन्यवाद एलेक्स! मुझे अभी भी उपयोगकर्ता नामों / कुंजियों / uids / आदि के एक ही डेटाबेस को बनाए रखने की आवश्यकता है, जिसे मैं विभिन्न भूमिकाओं और / या समूहों से संदर्भित कर सकता हूं, लेकिन मुझे लगता है कि मेरे पास कुछ विचार हैं कि मैं इसे कैसे पूरा कर सकता हूं।
EEAA

1
@EEAA भूमिकाओं को याद रखें / सभी फाइलों के साथ एक निर्देशिका हो सकती है ताकि आप आसानी से भूमिकाओं / सभी / staff.yml, भूमिकाओं / सभी / foo.yml, आदि को केंद्रीकृत कर सकें
एलेक्स होल्स्ट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.