This documentation is for a release that is no longer maintained
See documentation for the latest supported version 3 or the latest supported version 4.4.18. 非 root ユーザーとして Buildah を使用したコンテナーイメージのビルド
コンテナーで root ユーザーとして Pipelines を実行すると、コンテナープロセスとホストが他の悪意のあるリソースにさらされる可能性があります。コンテナー内の特定の root 以外のユーザーとしてワークロードを実行すると、このタイプの露出を減らすことができます。非 root ユーザーとして Buildah を使用してコンテナーイメージのビルドを実行するには、次の手順を実行します。
- カスタムサービスアカウント (SA) とセキュリティーコンテキスト制約 (SCC) を定義します。
-
ID が
1000
のbuild
ユーザーを使用するように Buildah を設定します。 - カスタム設定マップを使用してタスクの実行を開始するか、パイプラインの実行と統合します。
4.18.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 にバインドします。
4.18.2. build ユーザーを使用するための Buildah の設定 リンクのコピーリンクがクリップボードにコピーされました!
ユーザー ID が 1000
の build
ユーザーを使用する Buildah タスクを定義できます。
手順
buildah
クラスタータスクのコピーを通常のタスクとして作成します。oc get clustertask buildah -o yaml | yq '. |= (del .metadata |= with_entries(select(.key == "name" )))' | yq '.kind="Task"' | yq '.metadata.name="buildah-as-user"' | oc create -f -
$ oc get clustertask buildah -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-user
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例:
build
ユーザーで変更された Buildah タスクCopy to Clipboard Copied! Toggle word wrap Toggle overflow
4.18.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 - タスクの実行またはパイプラインの実行を開始します。
4.18.4. 非特権ビルドの制限 リンクのコピーリンクがクリップボードにコピーされました!
非特権ビルドのプロセスは、ほとんどの Dockerfile
オブジェクトで機能します。ただし、ビルドが失敗する原因となる既知の制限がいくつかあります。
-
--mount=type=cache
オプションの使用は、必要となる権限の問題が原因で失敗する場合があります。詳細は、この記事 を参照してください。 -
--mount=type=secret
オプションの使用は失敗します。リソースのマウントには、カスタム SCC によって提供されない追加の機能が必要になるためです。