Chef infra 使用Chef,限制用户对特定服务器/环境的访问

Chef infra 使用Chef,限制用户对特定服务器/环境的访问,chef-infra,Chef Infra,我有一个用例,我有一个承包商,他需要ssh和sudo访问一个服务器,但不需要访问我们的其他服务器。我们所有的服务器都由Chef管理,我们使用数据包来配置每个用户。有没有关于最佳方法的建议?一如既往,有很多种可能性:-) ,我们如何基于用户数据包配置每个节点的用户访问 具有group:sysadmin的所有用户都会自动分配给具有sudo权限的所有节点 所有其他用户都是根据其对特定主机的分配添加的。用户数据包是 在数据包的“节点”键中搜索包含节点['fqdn']项的项目: 要从所有节点删除用户,

我有一个用例,我有一个承包商,他需要ssh和sudo访问一个服务器,但不需要访问我们的其他服务器。我们所有的服务器都由Chef管理,我们使用数据包来配置每个用户。有没有关于最佳方法的建议?

一如既往,有很多种可能性:-) ,我们如何基于
用户
数据包配置每个节点的用户访问

  • 具有
    group:sysadmin
    的所有用户都会自动分配给具有sudo权限的所有节点
  • 所有其他用户都是根据其对特定主机的分配添加的。
    用户
    数据包是 在数据包的
    “节点”
    键中搜索包含
    节点['fqdn']
    项的项目:
要从所有节点删除用户,可以设置
操作:删除

在最高一级:

{
    "id": "a-user-to-remove",
    "action": "remove"
}
要从某个节点删除用户,可以设置
操作:删除

在节点级别:

{
    "id": "a-user-to-remove",
    ...
    "nodes": {
            "srv123.typo3.org": {
                    "action": "remove"
            }
    }
}
(不幸的是,事实上不是很干净)只搜索与
节点[fqdn]
关联的所有用户:

node\u attribute=“fqdn”
日志“搜索与节点#{node[node_属性]}关联的用户”
开始
users=search(users_databag_name,“节点:{node[node_属性]}”)
救援网::HTTPServerException
Chef::Log.warn“在“用户”数据库中搜索用户失败,搜索与节点“#{node[node_attribute]}”关联的用户”
用户={}
结束
用户。每个人都做| u|
node_options=u['nodes'][节点[node_属性]]
Chef::Log.info“获得节点选项:{node\u options}”
如果u['action']==“删除”| |节点_选项['action']==“删除”
用户u['username']| |=u['id']do
措施:删除
结束
其他的
#剪断。。。
#创建用户对象。
用户u['username']do
uid u['uid']如果u['uid']
gid u['gid']如果u['gid']
外壳u[“外壳”]
评论u['comment']
密码u['password']如果u['password']
支持管理您的主页:true
家庭主任
动作u['action']如果u['action']
结束
#sudo管理
如果节点_选项['sudo']=“true”
sudo u['username']do
不正确
用户u['username']
结束
其他的
sudo u['username']do
措施:删除
结束
结束
结束
结束
编辑:请注意,任何有权访问Chef客户端证书的用户都可以根据客户端可以读取的内容查询数据。这可能包括存储在其他节点属性中的密码。RBAC或chef vault可以缓解这一问题

{
    "id": "a-user-to-remove",
    ...
    "nodes": {
            "srv123.typo3.org": {
                    "action": "remove"
            }
    }
}