4.8. 特権付きセキュリティーコンテキストでの Pod の使用
OpenShift Pipelines 1.3.x 以降のバージョンのデフォルト設定では、パイプライン実行またはタスク実行から Pod が作成される場合、特権付きセキュリティーコンテキストで Pod を実行できません。このような Pod の場合、デフォルトのサービスアカウントは pipeline
であり、pipelines
サービスアカウントに関連付けられた SCC (Security Context Constraint) は pipelines-scc
になります。pipelines-scc
SCC は anyuid
SCC と似ていますが、パイプラインの SCC について YAML ファイルに定義されるように若干の違いがあります。
SecurityContextConstraints
オブジェクトの例
apiVersion: security.openshift.io/v1 kind: SecurityContextConstraints ... fsGroup: type: MustRunAs ...
さらに、OpenShift Pipeline の一部として提供される Buildah
クラスタータスクは、デフォルトのストレージドライバーとして vfs
を使用します。
4.8.1. 特権付きセキュリティーコンテキストを使用したパイプライン実行 Pod およびタスク実行 Pod の実行
手順
privileged
セキュリティーコンテキストで (パイプライン実行またはタスク実行で作成された) Pod を実行するには、以下の変更を行います。
関連するユーザーアカウントまたはサービスアカウントを、明示的な SCC を持つように設定します。以下の方法のいずれかを使用して設定を実行できます。
以下のコマンドを実行します。
$ oc adm policy add-scc-to-user <scc-name> -z <service-account-name>
または、
RoleBinding
およびRole
またはClusterRole
の YAML ファイルを変更します。RoleBinding
オブジェクトの例apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: service-account-name 1 namespace: default roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: pipelines-scc-clusterrole 2 subjects: - kind: ServiceAccount name: pipeline namespace: default
ClusterRole
オブジェクトの例apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: pipelines-scc-clusterrole 1 rules: - apiGroups: - security.openshift.io resourceNames: - nonroot resources: - securitycontextconstraints verbs: - use
- 1
- 使用するロールバインディングに基づいて適切なクラスターロールに置き換えます。
注記ベストプラクティスとして、デフォルトの YAML ファイルのコピーを作成し、複製ファイルに変更を加えます。
-
vfs
ストレージドライバーを使用しない場合、タスク実行またはパイプライン実行に関連付けられたサービスアカウントを特権付き SCC を持つように設定し、セキュリティーコンテキストをprivileged: true
に設定します。
4.8.2. カスタム SCC およびカスタムサービスアカウントを使用したパイプライン実行およびタスク実行
デフォルトの pipelines
サービスアカウントに関連付けられた pipelines-scc
SCC(Security Context Constraints) を使用する場合には、パイプライン実行およびタスク実行 Pod はタイムアウトが生じる可能性があります。これは、デフォルトの pipelines-scc
SCC で fsGroup.type
パラメーターが MustRunAs
に設定されているために発生します。
Pod タイムアウトの詳細は、BZ#1995779 を参照してください。
Pod タイムアウトを回避するには、fsGroup.type
パラメーターを RunAsAny
に設定してカスタム SCC を作成し、これをカスタムサービスアカウントに関連付けることができます。
ベストプラクティスとして、パイプライン実行およびタスク実行にカスタム SCC およびカスタムサービスアカウントを使用します。このアプローチを使用することで、柔軟性が増し、アップグレード時にデフォルト値が変更されても実行が失敗することはありません。
手順
fsGroup.type
パラメーターをRunAsAny
に設定してカスタム SCC を定義します。例: カスタム SCC
apiVersion: security.openshift.io/v1 kind: SecurityContextConstraints metadata: annotations: kubernetes.io/description: my-scc is a close replica of anyuid scc. pipelines-scc has fsGroup - RunAsAny. name: my-scc allowHostDirVolumePlugin: false allowHostIPC: false allowHostNetwork: false allowHostPID: false allowHostPorts: false allowPrivilegeEscalation: true allowPrivilegedContainer: false allowedCapabilities: null defaultAddCapabilities: null fsGroup: type: RunAsAny groups: - system:cluster-admins priority: 10 readOnlyRootFilesystem: false requiredDropCapabilities: - MKNOD runAsUser: type: RunAsAny seLinuxContext: type: MustRunAs supplementalGroups: type: RunAsAny volumes: - configMap - downwardAPI - emptyDir - persistentVolumeClaim - projected - secret
カスタム SCC を作成します。
例:
my-scc
SCC の作成$ oc create -f my-scc.yaml
カスタムサービスアカウントを作成します。
例:
fsgroup-runasany
サービスアカウントの作成$ oc create serviceaccount fsgroup-runasany
カスタム SCC をカスタムサービスアカウントに関連付けます。
例:
my-scc
SCC をfsgroup-runasany
サービスアカウントに関連付けます。$ oc adm policy add-scc-to-user my-scc -z fsgroup-runasany
特権付きタスクにカスタムサービスアカウントを使用する必要がある場合は、以下のコマンドを実行して
特権付き
SCC をカスタムサービスアカウントに関連付けることができます。例:
fsgroup-runasany
サービスアカウントを使用した特権付き
SCC の関連付け$ oc adm policy add-scc-to-user privileged -z fsgroup-runasany
パイプライン実行およびタスク実行でカスタムサービスアカウントを使用します。
例:
fsgroup-runasany
カスタムサービスアカウントを使用した Pipeline 実行 YAMLapiVersion: tekton.dev/v1beta1 kind: PipelineRun metadata: name: <pipeline-run-name> spec: pipelineRef: name: <pipeline-cluster-task-name> serviceAccountName: 'fsgroup-runasany'
例:
fsgroup-runasany
カスタムサービスアカウントを使用したタスク実行 YAMLapiVersion: tekton.dev/v1beta1 kind: TaskRun metadata: name: <task-run-name> spec: taskRef: name: <cluster-task-name> serviceAccountName: 'fsgroup-runasany'
4.8.3. 関連情報
- SCC の管理に関する詳細は、SSC (Security Context Constraints) の管理 を参照してください。