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 annotate clusterrolebinding.rbac system:build-strategy-docker-binding 'rbac.authorization.kubernetes.io/autoupdate=false' --overwriteCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行してロールを削除します。
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-docker system:authenticatedCopy to Clipboard Copied! Toggle word wrap Toggle overflow ビルドストラテジーサブリソースが
adminおよびeditユーザーロールからも削除されていることを確認します。oc get clusterrole admin -o yaml | grep "builds/docker"
$ oc get clusterrole admin -o yaml | grep "builds/docker"Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc get clusterrole edit -o yaml | grep "builds/docker"
$ oc get clusterrole edit -o yaml | grep "builds/docker"Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.11.2. ユーザーへのビルドストラテジーのグルーバルな制限 リンクのコピーリンクがクリップボードにコピーされました!
一連の特定ユーザーのみが特定のストラテジーでビルドを作成できます。
前提条件
- ビルドストラテジーへのグローバルアクセスを無効にします。
手順
ビルドストラテジーに対応するロールを特定ユーザーに割り当てます。たとえば、
system:build-strategy-dockerクラスターロールをユーザーdevuserに追加するには、以下を実行します。oc adm policy add-cluster-role-to-user system:build-strategy-docker devuser
$ oc adm policy add-cluster-role-to-user system:build-strategy-docker devuserCopy to Clipboard Copied! Toggle word wrap Toggle overflow 警告ユーザーに対して
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
$ oc adm policy add-role-to-user system:build-strategy-docker devuser -n devprojectCopy to Clipboard Copied! Toggle word wrap Toggle overflow