第6章 非 root ユーザーとして Buildah を使用したコンテナーイメージのビルド
コンテナーで root ユーザーとして OpenShift Pipelines を実行すると、コンテナープロセスとホストが他の悪意のあるリソースにさらされる可能性があります。コンテナー内の特定の root 以外のユーザーとしてワークロードを実行すると、このタイプの露出を減らすことができます。
ほとんどの場合は、イメージを構築するためのカスタムタスクを作成し、このタスクでユーザー namespace を設定することで、root 権限なしで Buildah を実行できます。
この設定を使用してイメージが正常にビルドされない場合は、カスタムサービスアカウント (SA) およびセキュリティーコンテキスト制約 (SCC) 定義を使用できます。ただし、このオプションを使用する場合は、Buildah ステップを有効にして権限を上げる必要があります (allowPrivilegeEscalation: true
)。
6.1. ユーザー namespace を設定して非ルートユーザーとして Buildah を実行する
ユーザー namespace を設定することは、非 root ユーザーとしてタスクで Buildah を実行する最も簡単な方法です。ただし、このオプションを使用しても一部のイメージはビルドされない可能性があります。
前提条件
-
oc
コマンドラインユーティリティーがインストールされました。
手順
openshift-pipelines
namespace で提供されている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 -
次のコマンドを入力して、コピーした
buildah
タスクを編集します。$ oc edit task buildah-as-user
新しいタスクで、次の例に示すように、
annotations
とstepTemplate
セクションを作成します。buildah-as-user
タスクへの追加例apiVersion: tekton.dev/v1 kind: Task metadata: annotations: io.kubernetes.cri-o.userns-mode: 'auto:size=65536;map-to-root=true' io.openshift.builder: 'true' name: assemble-containerimage namespace: pipeline-namespace spec: description: This task builds an image. # ... stepTemplate: env: - name: HOME value: /tekton/home image: $(params.builder-image) imagePullPolicy: IfNotPresent name: '' resources: limits: cpu: '1' memory: 4Gi requests: cpu: 100m memory: 2Gi securityContext: capabilities: add: - SETFCAP runAsNonRoot: true runAsUser: 1000 1 workingDir: $(workspaces.working-directory.path) # ...
- 1
podTemplate
が使用されるため、runAsUser:
設定は厳密には必要ありません。
-
新しい
buildah-as-user
タスクを使用して、パイプラインでイメージをビルドします。