我一直在使用 Ansible,取得了巨大的成功,大约 3 年以来,我一直在使用 Ansible 来管理不断增长的 linux 系统群。在深入研究我的问题之前,我需要设置一些上下文。
作为我日常工作的一部分,我为所有在单一风险投资/孵化器公司旗下运营的各种公司进行系统设计、部署和维护。我们的投资组合公司之间存在很多交叉影响,因此,我们不能说只有用户 A、B 和 C 需要访问 X 公司的系统。他们可能还需要访问 Y 公司的系统。由于每个公司的 ansible 环境都位于不同的 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
Run Code Online (Sandbox Code Playgroud)
当我要管理 <5 个用户时,这很有效,但是随着用户群的增长,通过密钥轮换、新密码等来保持最新状态变得越来越繁重。
有了背景故事和上下文,我的问题是:
假设使用集中式身份验证系统(LDAP 等)不是一种选择,我如何解决创建各种 ansible playbook 可以使用的集中式用户数据库的问题?我希望能够维护一个用户、uid、密码哈希和公钥的中央列表,然后能够将用户(具有自定义的每个主机组成员资格)部署到每个公司的主机。
我正在设想某种游戏结构,例如:
- name: Deploy users
user_management:
- { name: "user1", groups: "sudo" }
- { name: "user1", groups: "sudo" }
Run Code Online (Sandbox Code Playgroud)
...每个用户的 uid、hash 和公钥将从中央列表中提取并照常部署。
那么,我有哪些选择?我已经考虑了很长一段时间,并没有想出比我已经在做的更好的事情。我可以使用自定义事实文件来保存我的用户数据库吗?
你需要把你的剧本和你的数据分开。
我有一个存储库,其中包含我部署到各种客户系统的所有角色、事实等。我确保所有角色都是可重用的并且没有数据。在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
Run Code Online (Sandbox Code Playgroud)
并且group_vars/ACME.yml
可以包括这个:
customer_users:
- name: sausage
uid: 32153
- name: beans
uid: 1024
Run Code Online (Sandbox Code Playgroud)
在您的情况下,只要角色文件夹是所有客户都相同的共享子模块,则可以在每个 git 存储库中拥有单独的 ansible 环境。
归档时间: |
|
查看次数: |
675 次 |
最近记录: |