第5章 非 root ユーザーとして Buildah を使用したコンテナーイメージのビルド
コンテナーで root ユーザーとして OpenShift Pipelines を実行すると、コンテナープロセスとホストが他の悪意のあるリソースにさらされる可能性があります。コンテナー内の特定の root 以外のユーザーとしてワークロードを実行すると、このタイプの露出を減らすことができます。非 root ユーザーとして Buildah を使用してコンテナーイメージのビルドを実行するには、次の手順を実行します。
- カスタムサービスアカウント (SA) とセキュリティーコンテキスト制約 (SCC) を定義します。
-
ID が
1000
のbuild
ユーザーを使用するように Buildah を設定します。 - カスタム設定マップを使用してタスクの実行を開始するか、パイプラインの実行と統合します。
5.1. カスタムサービスアカウントとセキュリティーコンテキストの制約の設定
デフォルトの pipeline
SA では、namespace の範囲外のユーザー ID を使用できます。デフォルト SA への依存を減らすために、ユーザー ID 1000
の build
ユーザーに必要なクラスターロールとロールバインディングを使用して、カスタム SA と SCC を定義できます。
現時点で、Buildah がコンテナー内で正常に実行されるためには、allowPrivilegeEscalation
設定を有効にする必要があります。この設定により、Buildah は非 root ユーザーとして実行するときに SETUID
および SETGID
機能を活用できます。
手順
必要なクラスターロールとロールバインディングを使用して、カスタム SA と SCC を作成します。
例: 使用される ID が
1000
のカスタム SA および SCCapiVersion: v1 kind: ServiceAccount metadata: name: pipelines-sa-userid-1000 1 --- kind: SecurityContextConstraints metadata: annotations: name: pipelines-scc-userid-1000 2 allowHostDirVolumePlugin: false allowHostIPC: false allowHostNetwork: false allowHostPID: false allowHostPorts: false allowPrivilegeEscalation: true 3 allowPrivilegedContainer: false allowedCapabilities: null apiVersion: security.openshift.io/v1 defaultAddCapabilities: null fsGroup: type: MustRunAs groups: - system:cluster-admins priority: 10 readOnlyRootFilesystem: false requiredDropCapabilities: - MKNOD - KILL runAsUser: 4 type: MustRunAs uid: 1000 seLinuxContext: type: MustRunAs supplementalGroups: type: RunAsAny users: [] volumes: - configMap - downwardAPI - emptyDir - persistentVolumeClaim - projected - secret --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: pipelines-scc-userid-1000-clusterrole 5 rules: - apiGroups: - security.openshift.io resourceNames: - pipelines-scc-userid-1000 resources: - securitycontextconstraints verbs: - use --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: pipelines-scc-userid-1000-rolebinding 6 roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: pipelines-scc-userid-1000-clusterrole subjects: - kind: ServiceAccount name: pipelines-sa-userid-1000
- 1
- カスタム SA を定義します。
- 2
runAsUser
フィールドを変更して、制限された権限に基づいて作成されたカスタム SCC を定義します。- 3
- 現時点で、Buildah がコンテナー内で正常に実行されるためには、
allowPrivilegeEscalation
設定を有効にする必要があります。この設定により、Buildah は非 root ユーザーとして実行するときにSETUID
およびSETGID
機能を活用できます。 - 4
- カスタム SA を介してカスタム SCC にアタッチされた Pod を、ユーザー ID が
1000
として実行されるように制限します。 - 5
- カスタム SCC を使用するクラスターロールを定義します。
- 6
- カスタム SCC を使用するクラスターロールをカスタム SA にバインドします。