题 Ansible用户管理的最新技术水平是什么?


我已经使用Ansible取得了巨大的成功,大约3年时间用于管理不断增长的Linux系统。在深入探讨我的问题之前,我需要设置一些背景信息。

作为我日常工作的一部分,我为各个公司进行系统设计,部署和维护,这些公司都在一家风险投资公司/孵化器公司的保护下运营。我们的投资组合公司之间有很多交叉授粉,因此,我们不能说只有用户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个用户来管理时,这工作正常,但随着用户群的增长,通过密钥轮换,新密码等保持最新状态变得越来越繁重。

通过背景故事和上下文设置,我的问题是:

假设使用集中式身份验证系统(LDAP等)不是一种选择,我如何解决创建各种ansible playbooks可能消耗的集中式用户数据库的问题?我希望能够维护一个用户,uids,密码哈希和公钥的中央列表,然后能够将用户(具有自定义的每个主机组成员身份)部署到每个公司的主机。

我正在设想某种游戏结构,如:

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

...每个用户的uid,哈希和公钥将从中央列表中拉出并像往常一样部署。

那么,我有什么选择?我一直在考虑这个问题已经有一段时间了,而且还没有能够提出比我现在做的更好的东西。我可以使用自定义事实文件来保存我的用户数据库吗?


10
2017-07-02 04:49






答案:


您需要将播放和数据分开。

我有一个单独的回购,包含我的所有角色,事实等,可以部署到各种客户系统。我确保所有角色都可以恢复并且没有数据。在 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

group_vars/ACME.yml 包括这个:

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

在您的情况下,只要roles文件夹是一个在所有客户中都相同的共享子模块,就可以在每个git repo中都有单独的ansible环境。


8
2017-07-02 07:37



这指向了正确的方向。谢谢Alex!我仍然需要弄清楚如何维护我可以从各种角色和/或组中引用的用户名/键/ uids / etc的单个数据库,但我想我对如何实现这一点有一些想法。 - EEAA
@EEAA记住角色/所有可以是包含文件的目录,这样您就可以轻松地集中角色/ all / staff.yml,roles / all / foo.yml等 - Alex Holst