나는 점점 더 많은 리눅스 시스템을 관리하기 위해 ~ 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에 별도의 사용 가능한 환경을 갖는 것이 좋습니다.