×

OpenShift Container Platform中的构建在特权容器中运行。根据使用的构建策略,如果您具有权限,则可以运行构建以升级其在集群和主机节点上的权限。作为安全措施,它限制了可以运行构建的用户以及用于这些构建的策略。自定义构建本质上不如源代码构建安全,因为它们可以在特权容器中执行任何代码,并且默认情况下是禁用的。谨慎授予docker构建权限,因为Dockerfile处理逻辑中的漏洞可能导致主机节点上授予特权。

默认情况下,所有可以创建构建的用户都被授予使用docker和Source-to-image (S2I)构建策略的权限。具有集群管理员权限的用户可以启用自定义构建策略,如全局限制用户对构建策略的访问部分所述。

您可以使用授权策略来控制谁可以构建以及他们可以使用哪些构建策略。每个构建策略都有一个相应的构建子资源。用户必须具有创建构建的权限和在构建策略子资源上创建的权限才能使用该策略创建构建。提供默认角色来授予构建策略子资源上的创建权限。

表1. 构建策略子资源和角色
策略 子资源 角色

Docker

builds/docker

system:build-strategy-docker

Source-to-Image

builds/source

system:build-strategy-source

自定义

builds/custom

system:build-strategy-custom

JenkinsPipeline

builds/jenkinspipeline

system:build-strategy-jenkinspipeline

全局禁用对构建策略的访问

要全局阻止对特定构建策略的访问,请以具有集群管理员权限的用户身份登录,从system:authenticated组中删除相应角色,并应用注释rbac.authorization.kubernetes.io/autoupdate: "false" 以保护它们免受API重启之间的更改。以下示例显示了禁用docker构建策略。

步骤
  1. 通过输入以下命令应用rbac.authorization.kubernetes.io/autoupdate注释

    $ oc annotate clusterrolebinding.rbac system:build-strategy-docker-binding 'rbac.authorization.kubernetes.io/autoupdate=false' --overwrite
  2. 通过输入以下命令删除角色

    $ oc adm policy remove-cluster-role-from-group system:build-strategy-docker system:authenticated
  3. 确保构建策略子资源也从adminedit用户角色中删除

    $ oc get clusterrole admin -o yaml | grep "builds/docker"
    $ oc get clusterrole edit -o yaml | grep "builds/docker"

全局限制用户对构建策略的访问

您可以允许一组特定用户使用特定策略创建构建。

先决条件
  • 禁用对构建策略的全局访问。

步骤
  • 将对应于构建策略的角色分配给特定用户。例如,要将system:build-strategy-docker集群角色添加到用户devuser

    $ oc adm policy add-cluster-role-to-user system:build-strategy-docker devuser

    授予用户在集群级别访问builds/docker子资源的权限,意味着该用户可以在其有权创建构建的任何项目中使用docker策略创建构建。

限制项目内用户的构建策略

类似于在全局范围内向用户授予构建策略角色,您可以在项目中允许一组特定用户使用特定策略创建构建。

先决条件
  • 禁用对构建策略的全局访问。

步骤
  • 将对应于构建策略的角色分配给项目中的特定用户。例如,要将system:build-strategy-docker角色添加到项目devproject中的用户devuser

    $ oc adm policy add-role-to-user system:build-strategy-docker devuser -n devproject