在Conjur中,机器是秘密的非人类消费者,如服务器、虚拟机、容器、应用程序、微服务、Kubernetes服务帐户、Ansible节点和其他自动化进程。识别和授权机器很重要,因为我们在自动化工作流中将权限委托给它们。
Conjur为机器提供可靠和安全的识别。这个身份是Conjur认证服务的一部分,为机器证明自己可以访问Conjur提供了一种方法。一旦你有了这些,DevOps团队就可以使用策略来控制机器可以访问哪些秘密。策略还管理哪些其他用户(机器和人员)可以访问机器,例如,管理操作、SSH访问或流量授权。
身份是什么?
它是一个唯一的标识符、一个密钥(secretkey),和配置信息。身份作为存储在文件或环境变量中的信息集合存在。Conjur服务器还维护在身份验证期间使用的每个主机的身份信息。
建立机器身份的一些方法是:Conjur策略中的声明、使用API调用、或集成加工(toolingin our integrations)。
主机(Hosts)
Conjur使用一个名为主机的资源来表示机器身份。主机资源类似于用户资源(代表人类用户),其中:
主机在默认情况下也是一个角色,这意味着RBAC策略语句可以直接向主机角色授予权限。
例如,这里是声明主机的策略。
- !host id: www-01.home.cern annotations: description: Hypertext web server
当您加载这几行策略时,Conjur会执行相当多的活动,包括:
层(Layers)
层是一组主机,用于将它们管理在一起,类似于一组用户。分配到层是主机获取权限的主要方式,也是用户获取主机访问权限的主要方式。出于后一个目的,用户也被列为层的成员。
一个层包括:
下面是我们上面使用的主机策略,还有几行用于向新主机授予已授予层的所有权限。成员行允许层的所有成员访问该新主机。
- !host id: www-01.home.cern annotations: description: Hypertext web server - !grant role: !layer webservers member: !host www-01.cern.org * all members of the layer * can access this host
可以想象,WebServers层中可能有多个主机,其中多个管理用户或一组用户是声明的成员。它们都具有更改主机密码、轮换API键或更改影响主机的策略的权限,包括授予主机访问所需秘密的权限。这些秘密在策略的其他地方声明为Conjur变量。
机器认证到Conjur
主机需要其身份(登录名和API密钥)来获取一个短期的签名证书(访问令牌),该证书提供对Conjur的访问。Conjur会验证访问令牌确实来自它所说的机器。只有这样,主机才能请求访问机密。
IP范围限制可应用于特定的机器和用户身份,以限制对特定网络位置的身份验证。例如,IP限制将阻止恶意程序或管理员先从操作服务器获取API密钥,然后从一个不同的网络位置(如个人工作站)使用该密钥。
机器授权以访问秘密
一台机器可以验证Conjur身份的一个主要原因是访问Conjur中的一个秘密。秘密(类变量的Conjur资源(Conjurresources of kind variables))向主机、层、用户或组授予权限,以允许不同级别的访问,例如读取、执行(获取秘密值)或更新。
以下是需要访问机密的机器的一些用例:
主机工厂(HostFactory)
在始终或经常生成新机器的情况下,管理单个机器身份及其相关主机策略可能是不切实际的。例如,虚拟环境通常会创建新的服务器和新的虚拟机;自动化工具(如Puppet和Chef)会为每个新的编排创建新的主机;CF或PCF会为容器中运行的每个应用程序创建机器身份。
对于这些情形,Conjur支持主机工厂服务,可以根据需要创建多个主机身份。主机工厂生成主机身份,这些身份分别进行认证,但在一个层中以相同的特权和权限自动管理在一起。
防止未经授权使用主机工厂的功能包括:通过IP范围限制主机工厂令牌的使用,将令牌设置为在创建后很快过期,随时撤销令牌。
作为机器的应用程序(Applications as machines)
使用Conjur API,应用程序可以使用以下序列访问所需的秘密:
我们的各种集成产生了访问秘密的其他方法。