安全策略即代码 | Conjur策略简介

2021-02-26 10:32:30 浏览数 (1)

Conjur策略简介

每个Conjur工作流都以Conjur策略开始:无论是教程、演练、设置脚本、博客发布指引,其中都包含安全策略。这是因为Conjur中的所有内容都存在于安全上下文中

安全是人类的概念,需要清晰的沟通工具。MAML(机器授权标记语言)策略是Conjur操作人员用来交流组织如何授予访问权限和维护控制权的主要工具。它就是安全策略即代码(security policyas code

为了开始和MAML一起思考,让我们来看看Alice的故事,她是一个大型假设IT组织的高级安全工程师。她负责保护对数据库的访问,并部署了开源Conjur.org,以更好地控制特权数据库帐户。

1. 角色

让我们从最简单的MAML策略开始:单个用户。

---

- !user alice

Alice加载代表其用户的此策略。目前,用户无权访问任何内容,并且该策略没有定义可以授予其访问权限的任何内容。但以后会有。

在Conjur中,用户是基于角色的访问控制( role-based access control意义上的角色。每个用户代表一个人,比如爱丽丝。她的角色隐式地具有一个相关的秘密:一个Conjur API密钥。这是爱丽丝唯一需要证明自己身份真实性的秘密。她可以轮换自己的API密钥,还可以选择设置密码。

2. 资源和权限

可以为用户分配访问资源的权限。爱丽丝想把她的生产和管理密码存储在Conjur中,所以她创建了资源来表示它们。她的策略如下:

---

- !user alice

- !variable database-password

- !variable database-admin-password

- !permit

role: !user alice

privileges:

- read

- execute

- update

resources:

- !variable database-password

- !variable database-admin-password

Alice的策略将负责安全的基础设施建模为一组角色资源,并明确定义了权限。将该策略加载到Conjur中会创建一个功能系统,该系统允许基于身份访问功能(如获取数据库密码的功能)。对于任何请求,Conjur将验证用户的身份,然后根据策略授权请求。

因为Alice对密码具有读取(read )权限,所以Conjur会将其作为搜索和资源列表的一部分显示出来。当她去获取密码值时,Conjur会检查她的执行(execute )权限以确保她得到授权。同样,它检查她的更新(update )权限以授权她轮换密码。

3. 授权

爱丽丝不是一个人工作的。她的同事Bob是一名开发人员,需要对数据库进行生产访问,但他不需要轮换密码或访问管理帐户。她可以根据最小权限原则更新她的策略,给予他适当的访问权。

---

# Roles

- !user alice

- !user bob

# Resources

- !variable database-password

- !variable database-admin-password

# Permissions

- !permit

role: !user alice

privileges:

- read

- execute

- update

resources:

- !variable database-password

- !variable database-admin-password

- !permit

role: !user bob

privileges:

- read

- execute

resource: !variable database-password

改变之处:我们添加了一个新用户和第二个许可证。

4. 机器身份

在与Alice进行的一次安全审查中,Bob提到他自己从未真正使用过数据库密码。相反,是他的应用程序登录到数据库运行查询。他有一个应用程序的部署密钥,他想把它存储在Conjur中。Alice建议他为他的代码使用机器身份(machine identity,而不是共享他的人类凭证。他们修改策略以反映他们的新理解:

---

# Roles

- !user alice

- !user bob

## Bob's Query Runner App

- !host query-runner

# Resources

- !variable database-password

- !variable database-admin-password

- !variable query-runner-deploy-key

# Permissions

- !permit

role: !user alice

privileges:

- read

- execute

- update

resources:

- !variable database-password

- !variable database-admin-password

- !permit

role: !user bob

privileges:

- read

- execute

- update

resource: !variable query-runner-deploy-key

- !permit

role:!host query-runner

privileges:

- read

- execute

resource: !variable database-password

改变之处:我们添加了一个新的主机(host)和一个新的变量(variable)。我们将Bob对数据库密码(database-password)资源的特权授予了 query-runner 角色,并授予Bob获取和轮换其部署密钥的权限。

5. 扩展到更大的人类组织

Bob和Alice认识到他们在Conjur中存储的秘密,对他们组织中的其他人有用,使用MAML策略来描述整个基础设施将是一件好事。

在计划这种扩展时,他们注意到,如果每次有人加入、离开或更改组织中的角色时都必须检查和更新安全策略,那么维护安全策略将是一件很麻烦的事情。

用层(layers)、组(groups)、权限(entitlements)来解决单调乏味的问题。通过创建(主机的)层和(层、用户、其他组的)组,并向这些角色授予权限,而不是直接向用户和主机授予权限,您可以通过更改用户和主机的组成员身份(groupmemberships轻松修改其权限。

Alice提出这种策略修改,以准备将Conjur推出到更大的用户群:

---

# Roles

- !user alice

- !user bob

## Bob's Query Runner App

- !host query-runner

# Groups and layers

- !group database-admins

- !layer database-users

- !group deployers

# Resources

- !variable database-password

- !variable database-admin-password

- !variable query-runner-deploy-key

# Permissions

- !permit

role: !group database-admins

privileges:

- read

- execute

- update

resources:

- !variable database-password

- !variable database-admin-password

- !permit

role: !group deployers

privileges:

- read

- execute

- update

resource: !variable query-runner-deploy-key

- !permit

role: !layer database-users

privileges:

- read

- execute

resource: !variable database-password

# Entitlements

- !grant

role: !group database-admins

member: !user alice

- !grant

role: !group deployers

member: !user bob

- !grant

role: !layer database-users

member: !host query-runner

改变之处:我们添加了三个新角色:数据库管理员(database-admins)和部署人员(deployers)组,以及数据库用户(database-users)层。许可证现在授予组或层权限,而不是直接授予用户或主机。最后,我们在底部添加了“权限”(Entitlements)部分。

当组织环境发生变化时,不需要更新或审查任何许可证。工作流只要求在适当的组或层中创建并授予新用户或主机成员资格,或者根据情况的要求取消角色的成员资格。

Conjur提供了一些工具来简化授权工作流。例如,可以通过与LDAP或Active Directory服务器同步将用户添加到系统中,并且可以使用主机工厂(hostfactory以自动方式将主机添加到系统中。

赋予更大的权力

随着Conjur的采用,Alice正在管理越来越多的团队的策略,需要将权力委托给每个团队的安全运营代表。Conjur通过策略分支(policy branches支持这一点。策略树的根目录可以包含由Conjur admin以外的角色拥有的任意数量的分支,并且这些分支可以依次拥有其他分支,并进一步授权。

Alice使用数据库的一个分支和查询运行程序的另一个分支,重新构造了她的策略。Alice的同事Charlie(另一名安全工程师)将负责审查和管理查询运行程序策略,因此将其所有权委托给他,而Alice仍然是其数据库策略的所有者。

# Roles

- !user alice

- !user bob

- !user charlie

# Policy branches for database andquery runner

- !policy

id: database

owner: !user alice

body:

# Database roles

- !layer users

- !group admins

# Database resources (variables)

- !variable password

- !variable admin-password

# Database permissions

- !permit

role: !group admins

privileges:

- read

- execute

- update

resources:

- !variable password

- !variable admin-password

- !permit

role: !group users

privileges:

- read

- execute

resources:

- !variable password

- !policy

id: query-runner

owner: !user charlie

body:

# Roles

- !group deployers

- !host

# Resources

- !variable deploy-key

# Permissions

- !permit

role: !group deployers

privileges:

- read

- execute

- update

resource: !variable deploy-key

# Entitlements

- !grant

role: !group database/admins

members:

- !user alice

- !user charlie

- !grant

role: !group query-runner/deployers

member: !user bob

- !grant

role: !layer database/users

member: !host query-runner

改变之处:数据库用户(database-users )和数据库管理员 (database-admins) 组移动到名为database的分支中,因此获得了新名称:database/users和database/admins。database-password 成为database/password 的原因与数据库管理员密码相同。这同样适用于现在属于query-runner策略分支的角色和资源。我们增加了一个新用户:Charlie。以前,Alice是唯一可以更改策略的Conjur管理员,现在她已将对query-runner分支的控制权委托给了Charlie。他有能力更改和更新这个策略分支,但不能更改它之外的任何内容。

将策略拆分为多个分支有一个好处,Alice可以将策略资源的“更新”权限授予安全团队中的另一个人。

从单个用户到一个完整的策略树,Conjur MAML使得建模基础设施、授予访问权限、维护控制变得容易,所有这些都使用人类可读和机器可执行的代码。

扩展阅读

更多有关将MAML策略与Conjur一起使用的操作详细信息,可以阅读完整的Conjur策略文档。我们还提供了一些策略教程,供您学习如何开始编写和使用自己的策略。如果你对于Conjur而言是新来的,你可以开始我们的在线学习平台。

0 人点赞