Ansible을 통한 사용자 관리의 현재 상태는 무엇입니까? Y의 시스템에 액세스해야 할 수도 있습니다.

나는 점점 더 많은 리눅스 시스템을 관리하기 위해 ~ 3 년 동안 Ansible을 큰 성공을 거두었습니다. 내 질문에 뛰어 들기 전에 컨텍스트를 설정해야합니다.

하루의 일의 일환으로, 단일 벤처 / 인큐베이터 회사의 우산 아래에서 운영되는 다양한 회사의 시스템 설계, 배포 및 유지 관리를 수행합니다. 우리의 포트폴리오 회사들 사이에는 많은 수분이 존재하므로 사용자 A, B 및 C만이 회사 X의 시스템에 액세스해야한다고 말할 수 없습니다. 또한 회사 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 명인 경우에는 문제가 없었지만, 사용자 수가 증가함에 따라 키 순환, 새 비밀번호 등으로 최신 정보를 유지하는 것이 점점 더 번거로워졌습니다.

내 이야기와 배경을 설정하고 내 질문에 :

중앙 집중식 인증 시스템 (LDAP 등)을 사용하는 것이 옵션이 아니라고 가정 할 때 다양한 다양한 플레이 북이 소비 할 수있는 중앙 집중식 사용자 데이터베이스를 만드는 방법은 무엇입니까? 하나의 중앙 사용자 목록, uid, 암호 해시 및 공개 키를 유지 한 다음 사용자 (호스트 별 그룹 구성원 자격으로)를 각 회사의 호스트에 배포 할 수 있기를 바랍니다.

다음과 같은 일종의 놀이 구조를 구상하고 있습니다.

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

… 각 사용자의 uid, 해시 및 공개 키가 중앙 목록에서 가져와 평소처럼 배포됩니다.

그래서 어떤 옵션이 있습니까? 나는 이것을 잠시 동안 멀링 해 왔으며, 내가 이미하고있는 것보다 더 좋은 것을 만들 수 없었습니다. 사용자 데이터베이스를 보유하기 위해 사용자 정의 사실 파일로 무언가를 수행 할 수 있습니까?



답변

연극과 데이터를 분리해야합니다.

다양한 고객 시스템에 배포하는 모든 역할, 사실 등이 포함 된 단일 리포지토리가 있습니다. 모든 역할에 재개 가능하고 데이터가 없어야합니다. 에서 host_vars/fqdn.yml또는 group_vars/customer_name.yml그 고객이나 원격 시스템에 고유 한 데이터를 정의합니다.

내 역할의 대부분은 필요에 따라 시간이 지남에 따라 확장하는 대신 모든 일을 from roles/foo/main.yml내가해야 roles/foo/debian-foo.yml하고 roles/foo/openbsd-foo.yml경우에만 OS 나 다른 조건이 일치하는 항목을 포함하고 있습니다.

단순화, 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

귀하의 경우 역할 폴더가 모든 고객에서 동일한 공유 하위 모듈 인 한 각 git repo에 별도의 사용 가능한 환경을 갖는 것이 좋습니다.