6.2. カスタム SA と SCC を定義して非ルートユーザーとして Buildah を実行する
非 root ユーザーとして Buildah を使用してコンテナーイメージのビルドを実行するには、次の手順を実行します。
- カスタムサービスアカウント (SA) とセキュリティーコンテキスト制約 (SCC) を定義します。
-
ID が
1000のbuildユーザーを使用するように Buildah を設定します。 - カスタム設定マップを使用してタスクの実行を開始するか、パイプラインの実行と統合します。
6.2.1. カスタムサービスアカウントとセキュリティーコンテキストの制約の設定 リンクのコピーリンクがクリップボードにコピーされました!
デフォルトの pipeline SA では、namespace の範囲外のユーザー ID を使用できます。デフォルト SA への依存を減らすために、ユーザー ID 1000 の build ユーザーに必要なクラスターロールとロールバインディングを使用して、カスタム SA と SCC を定義できます。
現時点で、Buildah がコンテナー内で正常に実行されるためには、allowPrivilegeEscalation 設定を有効にする必要があります。この設定により、Buildah は非 root ユーザーとして実行するときに SETUID および SETGID 機能を活用できます。
手順
必要なクラスターロールとロールバインディングを使用して、カスタム SA と SCC を作成します。
例: 使用される ID が
1000のカスタム SA および SCCCopy to Clipboard Copied! Toggle word wrap Toggle overflow
- 1
- カスタム SA を定義します。
- 2
runAsUserフィールドを変更して、制限された権限に基づいて作成されたカスタム SCC を定義します。- 3
- 現時点で、Buildah がコンテナー内で正常に実行されるためには、
allowPrivilegeEscalation設定を有効にする必要があります。この設定により、Buildah は非 root ユーザーとして実行するときにSETUIDおよびSETGID機能を活用できます。 - 4
- カスタム SA を介してカスタム SCC にアタッチされた Pod を、ユーザー ID が
1000として実行されるように制限します。 - 5
- カスタム SCC を使用するクラスターロールを定義します。
- 6
- カスタム SCC を使用するクラスターロールをカスタム SA にバインドします。
6.2.2. build ユーザーを使用するための Buildah の設定 リンクのコピーリンクがクリップボードにコピーされました!
ユーザー ID が 1000 の build ユーザーを使用する Buildah タスクを定義できます。
手順
openshift-pipelinesnamespace で提供されているbuildahタスクのコピーを作成し、コピーの名前をbuildah-as-userに変更します。oc get task buildah -n openshift-pipelines -o yaml | yq '. |= (del .metadata |= with_entries(select(.key == "name" )))' | yq '.kind="Task"' | yq '.metadata.name="buildah-as-user"' | oc create -f -
$ oc get task buildah -n openshift-pipelines -o yaml | yq '. |= (del .metadata |= with_entries(select(.key == "name" )))' | yq '.kind="Task"' | yq '.metadata.name="buildah-as-user"' | oc create -f -Copy to Clipboard Copied! Toggle word wrap Toggle overflow コピーした
buildahタスクを編集します。oc edit task buildah-as-user
$ oc edit task buildah-as-userCopy to Clipboard Copied! Toggle word wrap Toggle overflow 例:
buildユーザーで変更された Buildah タスクCopy to Clipboard Copied! Toggle word wrap Toggle overflow
6.2.3. カスタムの config map を使用したタスク実行またはパイプライン実行の開始 リンクのコピーリンクがクリップボードにコピーされました!
カスタム Buildah タスクを定義したら、ユーザー ID が 1000 の build ユーザーとしてイメージをビルドする TaskRun オブジェクトを作成できます。さらに、TaskRun オブジェクトを PipelineRun オブジェクトの一部として統合できます。
手順
カスタム
ConfigMapおよびDockerfileオブジェクトを使用してTaskRunオブジェクトを作成します。例: Buildah をユーザー ID
1000として実行するタスク実行Copy to Clipboard Copied! Toggle word wrap Toggle overflow (オプション) パイプラインと対応するパイプライン実行を作成します。
例: パイプラインと対応するパイプラインの実行
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - タスクの実行またはパイプラインの実行を開始します。