4.13. 特権付きセキュリティーコンテキストでの 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.13.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

      1
      適切なサービスアカウント名に置き換えます。
      2
      使用するロールバインディングに基づいて適切なクラスターロールに置き換えます。

      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.13.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 およびカスタムサービスアカウントを使用します。このアプローチを使用することで、柔軟性が増し、アップグレード時にデフォルト値が変更されても実行が失敗することはありません。

手順

  1. 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

  2. カスタム SCC を作成します。

    例: my-scc SCC の作成

    $ oc create -f my-scc.yaml

  3. カスタムサービスアカウントを作成します。

    例: fsgroup-runasany サービスアカウントの作成

    $ oc create serviceaccount fsgroup-runasany

  4. カスタム 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

  5. パイプライン実行およびタスク実行でカスタムサービスアカウントを使用します。

    例: fsgroup-runasany カスタムサービスアカウントを使用した Pipeline 実行 YAML

    apiVersion: tekton.dev/v1beta1
    kind: PipelineRun
    metadata:
      name: <pipeline-run-name>
    spec:
      pipelineRef:
        name: <pipeline-cluster-task-name>
      serviceAccountName: 'fsgroup-runasany'

    例: fsgroup-runasany カスタムサービスアカウントを使用したタスク実行 YAML

    apiVersion: tekton.dev/v1beta1
    kind: TaskRun
    metadata:
      name: <task-run-name>
    spec:
      taskRef:
        name: <cluster-task-name>
      serviceAccountName: 'fsgroup-runasany'

4.13.3. 関連情報