第29章 ストラテジーによるビルドのセキュリティー保護
29.1. 概要
Builds in OpenShift Container Platform are run in privileged containers that have access to the Docker daemon socket. As a security measure, it is recommended to limit who can run builds and the strategy that is used for those builds. Custom builds are inherently less safe than Source builds, given that they can execute any code in the build with potentially full access to the node’s Docker socket, and as such are disabled by default. Docker build permission should also be granted with caution as a vulnerability in the Docker build logic could result in a privileges being granted on the host node.
By default, all users that can create builds are granted permission to use the Docker and Source-to-Image build strategies. Users with cluster-admin privileges can enable the Custom build strategy, as referenced in the Restricting Build Strategies to a User Globally section of this page.
You can control who can build with what build strategy using an authorization policy. Each build strategy has a corresponding build subresource. A user must have permission to create a build and permission to create on the build strategy subresource in order to create builds using that strategy. Default roles are provided which grant the create permission on the build strategy subresource.
ストラテジー | サブリソース | ロール |
---|---|---|
Docker |
ビルド/docker |
system:build-strategy-docker |
Source-to-Image |
ビルド/ソース |
system:build-strategy-source |
カスタム |
ビルド/カスタム |
system:build-strategy-custom |
JenkinsPipeline |
ビルド/jenkinspipeline |
system:build-strategy-jenkinspipeline |
29.2. ビルドストラテジーのグローバルな無効化
To prevent access to a particular build strategy globally, log in as a user with cluster-admin privileges and remove the corresponding role from the system:authenticated group:
$ oc adm policy remove-cluster-role-from-group system:build-strategy-custom system:authenticated $ oc adm policy remove-cluster-role-from-group system:build-strategy-docker system:authenticated $ oc adm policy remove-cluster-role-from-group system:build-strategy-source system:authenticated $ oc adm policy remove-cluster-role-from-group system:build-strategy-jenkinspipeline system:authenticated
In versions prior to 3.2, the build strategy subresources were included in the admin
and edit
roles. Ensure the build strategy subresources are also removed from these roles:
$ oc edit clusterrole admin $ oc edit clusterrole edit
それぞれのロールについて、無効にするストラテジーのリソースに対応する行を削除します。
例29.1 admin の Docker ビルドストラテジーの無効化
kind: ClusterRole
metadata:
name: admin
...
rules:
- resources:
- builds/custom
- builds/docker 1
- builds/source
...
...
- 1
- admin ロールを持つユーザーに対して Docker ビルドをグローバルに無効にするためにこの行を削除します。
29.3. ユーザーへのビルドストラテジーのグルーバルな制限
一連の特定ユーザーのみが特定のストラテジーでビルドを作成できるようにするには、以下を実行します。
- ビルドストラテジーへのグローバルアクセスを無効にします。
ビルドストラテジーに対応するロールを特定ユーザーに割り当てます。たとえば、system:build-strategy-docker クラスターロールをユーザー devuser に追加するには、以下を実行します。
$ oc adm policy add-cluster-role-to-user system:build-strategy-docker devuser
ユーザーに対して builds/docker サブリソースへのクラスターレベルでのアクセスを付与することは、そのユーザーがビルドを作成できるすべてのプロジェクトにおいて、Docker ストラテジーを使ってビルドを作成できることを意味します。
29.4. プロジェクト内でのユーザーへのビルドストラテジーの制限
ユーザーにビルドストラテジーをグローバルに付与するのと同様に、プロジェクト内の特定ユーザーのセットのみが特定ストラテジーでビルドを作成できるようにするには、以下を実行します。
- ビルドストラテジーへのグローバルアクセスを無効にします。
ビルドストラテジーに対応するロールをプロジェクト内の特定ユーザーに付与します。たとえば、プロジェクト devproject 内の system:build-strategy-docker ロールをユーザー devuser に追加するには、以下を実行します。
$ oc adm policy add-role-to-user system:build-strategy-docker devuser -n devproject