ฉันใช้ Ansible ไปสู่ความสำเร็จเป็นเวลาประมาณ 3 ปีในการจัดการระบบลินุกซ์ที่เพิ่มขึ้นเรื่อย ๆ ก่อนที่จะดำน้ำในคำถามของฉันฉันต้องกำหนดบริบท
เป็นส่วนหนึ่งของงานประจำวันของฉันฉันทำการออกแบบระบบการปรับใช้และการบำรุงรักษาสำหรับ บริษัท ต่าง ๆ ที่ดำเนินงานภายใต้ บริษัท เดียวหรือ บริษัท ศูนย์บ่มเพาะ มีการผสมข้ามสายพันธุ์จำนวนมากในกลุ่ม บริษัท ผลงานของเราและดังนั้นเราจึงไม่สามารถพูดได้ว่ามีเพียงผู้ใช้ A, B และ C เท่านั้นที่จะต้องเข้าถึงระบบของ บริษัท X พวกเขาอาจต้องเข้าถึงระบบของ บริษัท Y เช่นกัน สิ่งนี้มีความซับซ้อนเนื่องจากข้อเท็จจริงที่ว่าสภาพแวดล้อมที่เข้าใจได้ของแต่ละ บริษัท นั้นอาศัยอยู่ในที่เก็บ git ที่แตกต่างกัน ซึ่งหมายความว่ามีการทำสำเนารหัสจำนวนมากสำหรับการปรับใช้ผู้ใช้กับระบบของ บริษัท ต่าง ๆ ฉันสิ้นสุดการคัดลอก / วางบล็อคของรหัสเช่นนี้เพื่อนำผู้ใช้ไปใช้กับระบบของ บริษัท :
- 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 คนที่จะจัดการ แต่เมื่อฐานผู้ใช้เติบโตขึ้นเรื่อย ๆ มันก็ยิ่งมีภาระมากขึ้นในการติดตามการหมุนของกุญแจรหัสผ่านใหม่ ฯลฯ
ด้วย backstory และบริบทตั้งอยู่กับคำถามของฉัน:
สมมติว่าการใช้ระบบการรับรองความถูกต้องจากส่วนกลาง (LDAP และอื่น ๆ ) ไม่ใช่ตัวเลือกฉันจะจัดการกับการสร้างฐานข้อมูลผู้ใช้จากส่วนกลางที่ playbooks ที่มีความหลากหลายและสามารถบริโภคได้อย่างไร ฉันชอบที่จะสามารถรักษารายชื่อผู้ใช้ส่วนกลาง uids รหัสผ่านแฮชคีย์สาธารณะและจากนั้นสามารถปรับใช้ผู้ใช้ (ด้วยการเป็นสมาชิกแบบกลุ่มต่อโฮสต์ที่กำหนดเอง) กับโฮสต์ของแต่ละ บริษัท
ฉันจินตนาการโครงสร้างการเล่นบางอย่างเช่น:
- name: Deploy users
user_management:
- { name: "user1", groups: "sudo" }
- { name: "user1", groups: "sudo" }
... ที่ซึ่งผู้ใช้ของผู้ใช้แต่ละคนโพสต์แฮชและกุญแจสาธารณะจะถูกดึงจากรายการส่วนกลางและปรับใช้ตามปกติ
ฉันมีทางเลือกอะไรบ้าง? ฉันครุ่นคิดเรื่องนี้มาระยะหนึ่งแล้วและไม่สามารถทำอะไรได้ดีไปกว่าสิ่งที่ฉันทำไปแล้ว ฉันสามารถทำบางสิ่งกับไฟล์ข้อมูลที่กำหนดเองเพื่อเก็บฐานข้อมูลผู้ใช้ได้หรือไม่