策略
策略是一组针对GoCD实体(如环境、配置存储库等)的权限。策略定义了某个角色中的用户对GoCD实体的访问权限。GoCD支持限制性访问模型,即在未授予访问权限之前,任何人均无法访问该实体(管理员除外)。
权限由3个值组成:
- 类型: GoCD实体的类型。支持的值为
environment, config_repo, cluster_profile, elastic_agent_profile
. 通配符(*
) 也是允许的,表示所有支持的值。 - 操作: 受控的操作。支持的值为
view
和administer
- 资源: 资源可以是实体的名称或包含通配符(
*
) 的模式,匹配一个或多个实体,并可选择在父实体下使用:
分隔符命名空间。
目前,GoCD有两种类型的权限:
- 允许:允许权限授予对指定实体的特定操作的访问。
- 拒绝:拒绝权限限制对指定实体的特定操作的访问。
注意:如果为同一实体指定了两种权限,则
deny
权限优先。
特权-动作矩阵
每个GoCD实体都有一组动作,用于授予/限制对更细粒度的控制。以下矩阵描述了相同的内容。
环境
-
API
索引 获取 创建 更新 修补 删除 查看 ✔ ✔ ✘ ✘ ✘ ✘ 管理 ✔ ✔ ✔ ✔ ✔ ✔ -
UI
列表 创建 更新 删除 查看 ✔ ✘ ✘ ✘ 管理 ✔ ✔ ✔ ✔
配置存储库
-
API
索引 获取 创建 更新 删除 查看 ✔ ✔ ✘ ✘ ✘ 管理 ✔ ✔ ✔ ✔ ✔ -
UI
列表 创建 刷新 更新 删除 查看 ✔ ✘ ✘ ✘ ✘ 管理 ✔ ✔ ✔ ✔ ✔
弹性代理配置
GoCD支持通过弹性代理动态预配代理。要在GoCD中配置弹性代理,用户需要配置集群配置文件和弹性代理配置文件。
在大多数情况下,单个GoCD实例被多个团队使用。每个团队可以有其自己的构建环境,例如开发、暂存、生产等。每个构建环境映射到一个集群配置文件,而代理的类型和配置则指定为弹性代理配置文件。
由于集群配置文件和弹性代理配置文件相互依赖,可以指定特定的权限策略以按团队提供精细的访问权限。
基本权限
集群配置文件
-
API
索引 获取 创建 更新 删除 查看 ✔ ✔ ✘ ✘ ✘ 管理 ✔ ✔ ✔ ✔ ✔ -
UI
列表 创建 更新 删除 集群状态报告 查看 ✔ ✘ ✘ ✘ ✔ 管理 ✔ ✔ ✔ ✔ ✔
弹性代理配置文件
-
API
索引 获取 创建 更新 删除 查看 ✔ ✔ ✘ ✘ ✘ 管理 ✔ ✔ ✔ ✔ ✔ -
UI
列表 创建 更新 删除 代理状态报告 弹性配置文件使用情况 查看 ✔ ✘ ✘ ✘ ✔ ✔ 管理 ✔ ✔ ✔ ✔ ✔ ✔
隐式权限
-
集群配置文件上的任何权限都会隐式应用于同一集群的所有弹性代理配置文件。
示例:
<cruise> <roles> <role name="frontend_team"> <users> <user>Bob</user> </users> <policy> <allow action="administer" type="cluster_profile">frontend_team_uat_cluster</allow> </policy> </role> </roles> <elastic> <agentProfiles> <agentProfile id="node6-agent" clusterProfileId="frontend_team_uat_cluster"/> <agentProfile id="node8-agent" clusterProfileId="frontend_team_uat_cluster"/> </agentProfiles> <clusterProfiles> <clusterProfile id="frontend_team_uat_cluster" pluginId="cd.go.contrib.docker"/> </clusterProfiles> </elastic> </cruise>
在给定的角色中,用户
Bob
已获得frontend_team_uat_cluster
集群的管理访问权限。通过隐式权限,用户Bob
被允许管理frontend_team_uat_cluster
集群配置文件和node6-agent
,node8-agent
弹性代理配置文件。 -
弹性代理配置文件上的任何权限提供对关联的集群配置文件的视图权限。
示例:
<cruise> <roles> <role name="frontend_team"> <users> <user>Bob</user> </users> <policy> <allow action="administer" type="elastic_agent_profile">node6-agent</allow> </policy> </role> </roles> <elastic> <agentProfiles> <agentProfile id="node6-agent" clusterProfileId="frontend_team_uat_cluster"/> </agentProfiles> <clusterProfiles> <clusterProfile id="frontend_team_uat_cluster" pluginId="cd.go.contrib.docker"/> </clusterProfiles> </elastic> </cruise>
在给定的角色中,用户
Bob
已获得node6-agent
弹性代理配置文件的管理访问权限。通过隐式权限,用户Bob
被允许管理node6-agent
弹性代理配置文件并能够查看frontend_team_uat_cluster
集群配置文件。
命名空间权限
在分布式团队设置中,除了授予创建GoCD实体的权限外,我们通常希望限制用户执行某些操作。通过命名空间资源权限,我们可以将用户的权限限制在特定实体内。
命名空间资源权限可以使用冒号 (:
) 分隔符指定。示例:parent_entity:child_entity
.这将强制执行给定用户仅在child_entity
内具有操作权限。parent_entity
.
在创建弹性代理配置时,我们经常要限制用户只能访问其团队的集群配置文件和弹性配置文件。以下是根据团队使用命名空间资源演示权限限制的示例。
<roles>
<role name="frontend_team">
<users>
<user>Bob</user>
</users>
<policy>
<allow action="administer" type="elastic_agent_profiles">frontend_*:*</allow>
</policy>
</role>
<role name="backend_team">
<users>
<user>John</user>
</users>
<policy>
<allow action="administer" type="elastic_agent_profiles">backend_*:*</allow>
</policy>
</role>
<role name="devops_team">
<users>
<user>Admin</user>
</users>
<policy>
<allow action="administer" type="elastic_agent_profiles">*:*</allow>
</policy>
</role>
</roles>
在给定的示例中:
- 作为角色
frontend_team
的一部分,用户Bob
已获得对所有引用frontend_*
集群配置文件的弹性代理配置文件的管理访问权限。 - 作为角色
backend_team
的一部分,用户John
已获得对所有引用backend_*
集群配置文件的弹性代理配置文件的管理访问权限。 - 作为角色
devops_team
的一部分,用户Admin
已获得对所有弹性代理配置文件的管理访问权限。这也可以通过指定*
作为资源来实现。
配置策略
-
登录到您的 GoCD 服务器。
-
前往管理菜单 →角色配置.
-
点击
Add
按钮。 -
输入角色配置的唯一名称。
-
点击
Add Permission
按钮。 -
将权限选择为
Allow
,类型选择为Environment
,操作选择为View
。输入resource
值为*
。这将授予对此角色的用户查看所有环境的权限。 -
点击
Save
按钮。
创建角色后,请继续添加用户到该角色。这些用户的GoCD实体访问将根据所配置的权限进行管理。