2.11. ストラテジーによるビルドのセキュリティー保護
OpenShift Container Platform のビルドは特権付きコンテナーで実行されます。使用されるビルドストラテジーに応じて、権限がある場合は、ビルドを実行してクラスターおよびホストノードでの自らのパーミッションをエスカレートすることができます。セキュリティー対策として、ビルドを実行できるユーザーおよびそれらのビルドに使用されるストラテジーを制限します。カスタムビルドは特権付きコンテナー内で任意のコードを実行できるためにソースビルドより安全性が低くなります。そのためデフォルトで無効にされます。Dockerfile 処理ロジックにある脆弱性により、権限がホストノードで付与される可能性があるため、docker ビルドパーミッションを付与する際には注意してください。
デフォルトで、ビルドを作成できるすべてのユーザーには docker および Source-to-Image (S2I) ビルドストラテジーを使用するためにパーミッションが付与されます。クラスター管理者権限を持つユーザーは、ビルドストラテジーをユーザーにぐローバルに制限する方法に関するセクションで言及されているようにカスタムビルドストラテジーを有効にできます。
許可ポリシーを使用して、どのユーザーがどのビルドストラテジーを使用してビルドできるかについて制限することができます。各ビルドストラテジーには、対応するビルドサブリソースがあります。ストラテジーを使用してビルド作成するには、ユーザーにビルドを作成するパーミッションおよびビルドストラテジーのサブリソースで作成するパーミッションがなければなりません。ビルドストラテジーのサブリソースでの create パーミッションを付与するデフォルトロールが提供されます。
ストラテジー | サブリソース | ロール |
---|---|---|
Docker | ビルド/docker | system:build-strategy-docker |
Source-to-Image | ビルド/ソース | system:build-strategy-source |
カスタム | ビルド/カスタム | system:build-strategy-custom |
JenkinsPipeline | ビルド/jenkinspipeline | system:build-strategy-jenkinspipeline |
2.11.1. ビルドストラテジーへのアクセスのグローバルな無効化
特定のビルドストラテジーへのアクセスをグローバルに禁止するには、クラスター管理者の権限を持つユーザーとしてログインし、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"
2.11.2. ユーザーへのビルドストラテジーのグルーバルな制限
一連の特定ユーザーのみが特定のストラテジーでビルドを作成できます。
前提条件
- ビルドストラテジーへのグローバルアクセスを無効にします。
手順
ビルドストラテジーに対応するロールを特定ユーザーに割り当てます。たとえば、
system:build-strategy-docker
クラスターロールをユーザーdevuser
に追加するには、以下を実行します。$ oc adm policy add-cluster-role-to-user system:build-strategy-docker devuser
警告ユーザーに対して
builds/docker
サブリソースへのクラスターレベルでのアクセスを付与することは、そのユーザーがビルドを作成できるすべてのプロジェクトにおいて、docker ストラテジーを使用してビルドを作成できることを意味します。
2.11.3. プロジェクト内でのユーザーへのビルドストラテジーの制限
ユーザーにビルドストラテジーをグローバルに付与するのと同様に、プロジェクト内の特定ユーザーのセットのみが特定ストラテジーでビルドを作成することを許可できます。
前提条件
- ビルドストラテジーへのグローバルアクセスを無効にします。
手順
ビルドストラテジーに対応するロールをプロジェクト内の特定ユーザーに付与します。たとえば、プロジェクト
devproject
内のsystem:build-strategy-docker
ロールをユーザーdevuser
に追加するには、以下を実行します。$ oc adm policy add-role-to-user system:build-strategy-docker devuser -n devproject