$ oc annotate clusterrolebinding.rbac system:build-strategy-docker-binding 'rbac.authorization.kubernetes.io/autoupdate=false' --overwrite
OpenShift Container Platform中的构建在特权容器中运行。根据使用的构建策略,如果您具有权限,则可以运行构建以升级其在集群和主机节点上的权限。作为安全措施,它限制了可以运行构建的用户以及用于这些构建的策略。自定义构建本质上不如源代码构建安全,因为它们可以在特权容器中执行任何代码,并且默认情况下是禁用的。谨慎授予docker构建权限,因为Dockerfile处理逻辑中的漏洞可能导致主机节点上授予特权。
默认情况下,所有可以创建构建的用户都被授予使用docker和Source-to-image (S2I)构建策略的权限。具有集群管理员权限的用户可以启用自定义构建策略,如全局限制用户对构建策略的访问部分所述。
您可以使用授权策略来控制谁可以构建以及他们可以使用哪些构建策略。每个构建策略都有一个相应的构建子资源。用户必须具有创建构建的权限和在构建策略子资源上创建的权限才能使用该策略创建构建。提供默认角色来授予构建策略子资源上的创建权限。
策略 | 子资源 | 角色 |
---|---|---|
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构建策略。
通过输入以下命令应用rbac.authorization.kubernetes.io/autoupdate
注释
$ oc annotate clusterrolebinding.rbac system:build-strategy-docker-binding 'rbac.authorization.kubernetes.io/autoupdate=false' --overwrite
通过输入以下命令删除角色
$ oc adm policy remove-cluster-role-from-group system:build-strategy-docker system:authenticated
确保构建策略子资源也从admin
和edit
用户角色中删除
$ oc get clusterrole admin -o yaml | grep "builds/docker"
$ oc get clusterrole edit -o yaml | grep "builds/docker"