Trạng thái hiện tại của quản lý người dùng với Ansible là gì?


10

Tôi đã sử dụng Ansible, để thành công lớn, trong 3 năm nay để quản lý một hệ thống linux ngày càng phát triển. Trước khi đi sâu vào câu hỏi của tôi, tôi cần đặt ra một số bối cảnh.

Là một phần của công việc hàng ngày của tôi, tôi làm thiết kế hệ thống, triển khai và bảo trì cho các công ty khác nhau, tất cả đều hoạt động dưới sự bảo trợ của một công ty liên doanh / ươm tạo. Có rất nhiều sự thụ phấn chéo giữa các công ty danh mục đầu tư của chúng tôi và do đó, chúng tôi không thể nói rằng chỉ người dùng A, B và C mới cần truy cập vào hệ thống của công ty X. Họ cũng có thể cần truy cập vào hệ thống của công ty Y. Điều này phức tạp bởi thực tế là môi trường ansible của mỗi công ty sống trong một kho git khác nhau. Điều này có nghĩa là có rất nhiều mã trùng lặp để triển khai người dùng đến các hệ thống khác nhau của công ty. Tôi kết thúc việc sao chép / dán các khối mã như thế này để triển khai người dùng đến các hệ thống của một công ty nhất định:

- 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

Điều này hoạt động tốt khi tôi có <5 người dùng để quản lý, nhưng khi cơ sở người dùng phát triển, nó sẽ ngày càng trở nên khó chịu hơn để giữ mọi thứ được cập nhật với xoay vòng khóa, mật khẩu mới, v.v.

Với bối cảnh và bối cảnh được đặt ra, với câu hỏi của tôi:

Giả sử rằng việc sử dụng một hệ thống xác thực tập trung (LDAP, v.v.) không phải là một tùy chọn, làm thế nào tôi có thể giải quyết việc tạo một cơ sở dữ liệu người dùng tập trung mà nhiều sách phát khác nhau có thể tiêu thụ? Tôi rất thích có thể duy trì một danh sách trung tâm gồm người dùng, uids, băm mật khẩu và khóa chung, sau đó có thể triển khai người dùng (với tư cách thành viên nhóm trên mỗi máy chủ tùy chỉnh) cho mỗi máy chủ của công ty.

Tôi đang hình dung một số loại cấu trúc chơi như:

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

... Trong đó mỗi uid, hàm băm và khóa chung của mỗi người dùng sẽ được lấy từ danh sách trung tâm và được triển khai như bình thường.

Vì vậy, tôi có những lựa chọn nào? Tôi đã nghiên cứu vấn đề này khá lâu và không thể tìm ra thứ gì tốt hơn những gì tôi đã làm. Tôi có thể làm gì đó với tệp sự kiện tùy chỉnh để giữ cơ sở dữ liệu người dùng của mình không?

Câu trả lời:


8

Bạn cần tách các vở kịch và dữ liệu của bạn.

Tôi có một repo duy nhất với tất cả các vai trò, sự kiện, vv của tôi triển khai cho một loạt các hệ thống khách hàng. Tôi đảm bảo tất cả các vai trò đều có thể thay đổi và không có dữ liệu. Trong host_vars/fqdn.ymlhoặc group_vars/customer_name.ymltôi xác định dữ liệu duy nhất cho khách hàng hoặc hệ thống từ xa đó.

Hầu hết các vai trò của tôi được mở rộng theo thời gian khi cần thiết và thay vì làm mọi thứ from roles/foo/main.ymltôi có roles/foo/debian-foo.ymlroles/foo/openbsd-foo.ymlđiều đó chỉ được bao gồm khi HĐH hoặc điều kiện khác phù hợp.

Đơn giản hóa, roles/adduser/main.ymlcó thể bao gồm điều này:

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

group_vars/ACME.ymlcó thể bao gồm điều này:

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

Trong trường hợp của bạn, có thể có các môi trường ansible riêng biệt trong mỗi repo git của họ miễn là thư mục vai trò là một mô hình con được chia sẻ giống hệt nhau trên tất cả các khách hàng của bạn.


Điều này chỉ cho tôi đi đúng hướng. Cảm ơn Alex! Tôi vẫn sẽ cần sắp xếp làm thế nào để duy trì một cơ sở dữ liệu duy nhất về tên người dùng / khóa / uids / vv mà tôi có thể tham khảo từ nhiều vai trò và / hoặc nhóm khác nhau, nhưng tôi nghĩ rằng tôi có một số ý tưởng về cách tôi có thể thực hiện điều đó.
EEAA

1
@EEAA Ghi nhớ vai trò / tất cả có thể là một thư mục chứa các tệp để bạn có thể dễ dàng tập trung vai trò / tất cả / staff.yml, vai trò / tất cả / foo.yml, v.v.
Alex Holst
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.