3.13. Utiliser les pods dans un contexte de sécurité privilégié


La configuration par défaut d'OpenShift Pipelines 1.3.x et des versions ultérieures ne vous permet pas d'exécuter des pods avec un contexte de sécurité privilégié, si les pods résultent de l'exécution d'un pipeline ou d'une tâche. Pour de tels pods, le compte de service par défaut est pipeline, et la contrainte de contexte de sécurité (SCC) associée au compte de service pipeline est pipelines-scc. La SCC pipelines-scc est similaire à la SCC anyuid, mais avec des différences mineures telles que définies dans le fichier YAML pour la SCC des pipelines :

Exemple pipelines-scc.yaml snippet

apiVersion: security.openshift.io/v1
kind: SecurityContextConstraints
...
allowedCapabilities:
  - SETFCAP
...
fsGroup:
  type: MustRunAs
...
Copy to Clipboard Toggle word wrap

En outre, la tâche de cluster Buildah, livrée avec OpenShift Pipelines, utilise vfs comme pilote de stockage par défaut.

Procédure

Pour exécuter un pod (résultant de l'exécution d'un pipeline ou d'une tâche) avec le contexte de sécurité privileged, procédez aux modifications suivantes :

  • Configurez le compte d'utilisateur ou le compte de service associé pour qu'il dispose d'une CSC explicite. Vous pouvez effectuer la configuration en utilisant l'une des méthodes suivantes :

    • Exécutez la commande suivante :

      $ oc adm policy add-scc-to-user <scc-name> -z <service-account-name>
      Copy to Clipboard Toggle word wrap
    • Vous pouvez également modifier les fichiers YAML pour RoleBinding, et Role ou ClusterRole:

      Exemple d'objet 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
      Copy to Clipboard Toggle word wrap

      1
      Remplacer par un nom de compte de service approprié.
      2
      Remplacer par un rôle de cluster approprié en fonction de la liaison de rôle que vous utilisez.

      Exemple d'objet 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
      Copy to Clipboard Toggle word wrap

      1
      Remplacer par un rôle de cluster approprié en fonction de la liaison de rôle que vous utilisez.
    Note

    La meilleure pratique consiste à créer une copie des fichiers YAML par défaut et à apporter des modifications au fichier dupliqué.

  • Si vous n'utilisez pas le pilote de stockage vfs, configurez le compte de service associé à l'exécution de la tâche ou du pipeline pour qu'il ait un SCC privilégié, et définissez le contexte de sécurité comme privileged: true.

Lors de l'utilisation de la contrainte de contexte de sécurité (SCC) pipelines-scc associée au compte de service par défaut pipelines, les pods d'exécution de pipeline et d'exécution de tâche peuvent être confrontés à des dépassements de délai. Cela se produit parce que dans la SCC par défaut pipelines-scc, le paramètre fsGroup.type est défini sur MustRunAs.

Note

Pour plus d'informations sur les délais d'attente des pods, voir BZ#1995779.

Pour éviter les délais d'attente des pods, vous pouvez créer un SCC personnalisé avec le paramètre fsGroup.type défini sur RunAsAny, et l'associer à un compte de service personnalisé.

Note

La meilleure pratique consiste à utiliser un SCC et un compte de service personnalisés pour les exécutions de pipeline et les exécutions de tâches. Cette approche permet une plus grande flexibilité et n'interrompt pas les exécutions lorsque les valeurs par défaut sont modifiées lors d'une mise à niveau.

Procédure

  1. Définir une CSC personnalisée avec le paramètre fsGroup.type fixé à RunAsAny:

    Exemple : CCN personnalisé

    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
    Copy to Clipboard Toggle word wrap

  2. Créer le SCC personnalisé :

    Exemple : Créer le site my-scc SCC

    $ oc create -f my-scc.yaml
    Copy to Clipboard Toggle word wrap

  3. Créer un compte de service personnalisé :

    Exemple : Créer un compte de service fsgroup-runasany

    $ oc create serviceaccount fsgroup-runasany
    Copy to Clipboard Toggle word wrap

  4. Associer le SCC personnalisé au compte de service personnalisé :

    Exemple : Associer le CCN my-scc au compte de service fsgroup-runasany

    $ oc adm policy add-scc-to-user my-scc -z fsgroup-runasany
    Copy to Clipboard Toggle word wrap

    Si vous souhaitez utiliser le compte de service personnalisé pour des tâches privilégiées, vous pouvez associer le privileged SCC au compte de service personnalisé en exécutant la commande suivante :

    Exemple : Associer le CCN privileged au compte de service fsgroup-runasany

    $ oc adm policy add-scc-to-user privileged -z fsgroup-runasany
    Copy to Clipboard Toggle word wrap

  5. Utilisez le compte de service personnalisé dans l'exécution du pipeline et l'exécution de la tâche :

    Exemple : Pipeline exécuter YAML avec fsgroup-runasany compte de service personnalisé

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

    Exemple : Exécution d'une tâche YAML avec le compte de service personnalisé fsgroup-runasany

    apiVersion: tekton.dev/v1beta1
    kind: TaskRun
    metadata:
      name: <task-run-name>
    spec:
      taskRef:
        name: <cluster-task-name>
      serviceAccountName: 'fsgroup-runasany'
    Copy to Clipboard Toggle word wrap

Retour au début
Red Hat logoGithubredditYoutubeTwitter

Apprendre

Essayez, achetez et vendez

Communautés

À propos de la documentation Red Hat

Nous aidons les utilisateurs de Red Hat à innover et à atteindre leurs objectifs grâce à nos produits et services avec un contenu auquel ils peuvent faire confiance. Découvrez nos récentes mises à jour.

Rendre l’open source plus inclusif

Red Hat s'engage à remplacer le langage problématique dans notre code, notre documentation et nos propriétés Web. Pour plus de détails, consultez le Blog Red Hat.

À propos de Red Hat

Nous proposons des solutions renforcées qui facilitent le travail des entreprises sur plusieurs plates-formes et environnements, du centre de données central à la périphérie du réseau.

Theme

© 2025 Red Hat