# OpenShift - Tekton

**L'auteur original de cette page est** [**Haroun**](https://www.linkedin.com/in/haroun-al-mounayar-571830211)

### Qu'est-ce que tekton

Selon la documentation : _Tekton est un cadre open-source puissant et flexible pour créer des systèmes CI/CD, permettant aux développeurs de construire, tester et déployer sur des fournisseurs de cloud et des systèmes sur site._ Jenkins et Tekton peuvent être utilisés pour tester, construire et déployer des applications, cependant Tekton est Cloud Native.&#x20;

Avec Tekton, tout est représenté par des fichiers YAML. Les développeurs peuvent créer des Ressources Personnalisées (CR) de type `Pipelines` et spécifier plusieurs `Tasks` qu'ils souhaitent exécuter. Pour exécuter une ressource Pipeline, des ressources de type `PipelineRun` doivent être créées.

Lorsque tekton est installé, un compte de service (sa) appelé pipeline est créé dans chaque namespace. Lorsqu'un Pipeline est exécuté, un pod sera généré en utilisant ce sa appelé `pipeline` pour exécuter les tâches définies dans le fichier YAML.

{{#ref}}
https://tekton.dev/docs/getting-started/pipelines/
{{#endref}}

### Les capacités du compte de service Pipeline

Par défaut, le compte de service pipeline peut utiliser la capacité `pipelines-scc`. Cela est dû à la configuration par défaut globale de tekton. En fait, la configuration globale de tekton est également un YAML dans un objet openshift appelé `TektonConfig` qui peut être vu si vous avez des rôles de lecteur dans le cluster.
```yaml
apiVersion: operator.tekton.dev/v1alpha1
kind: TektonConfig
metadata:
name: config
spec:
...
...
platforms:
openshift:
scc:
default: "pipelines-scc"
```
Dans n'importe quel espace de noms, si vous pouvez obtenir le jeton de compte de service de pipeline, vous pourrez utiliser `pipelines-scc`.

### La mauvaise configuration

Le problème est que le scc par défaut que le compte de service de pipeline peut utiliser est contrôlable par l'utilisateur. Cela peut être fait en utilisant une étiquette dans la définition de l'espace de noms. Par exemple, si je peux créer un espace de noms avec la définition yaml suivante :
```yaml
apiVersion: v1
kind: Namespace
metadata:
name: test-namespace
annotations:
operator.tekton.dev/scc: privileged
```
L'opérateur tekton donnera au compte de service de pipeline dans `test-namespace` la capacité d'utiliser le scc privileged. Cela permettra le montage du nœud.

### La solution

Les documents Tekton expliquent comment restreindre l'override de scc en ajoutant une étiquette dans l'objet `TektonConfig`.

{{#ref}}
https://tekton.dev/docs/operator/sccconfig/
{{#endref}}

Cette étiquette s'appelle `max-allowed`&#x20;
```yaml
apiVersion: operator.tekton.dev/v1alpha1
kind: TektonConfig
metadata:
name: config
spec:
...
...
platforms:
openshift:
scc:
default: "restricted-v2"
maxAllowed: "privileged"
```

