# OpenShift - Tekton

{{#include ../../../banners/hacktricks-training.md}}

**L'autore originale di questa pagina è** [**Haroun**](https://www.linkedin.com/in/haroun-al-mounayar-571830211)

### Cos'è tekton

Secondo la documentazione: _Tekton è un potente e flessibile framework open-source per la creazione di sistemi CI/CD, che consente agli sviluppatori di costruire, testare e distribuire su fornitori di cloud e sistemi on-premise._ Sia Jenkins che Tekton possono essere utilizzati per testare, costruire e distribuire applicazioni, tuttavia Tekton è Cloud Native.

Con Tekton tutto è rappresentato da file YAML. Gli sviluppatori possono creare Risorse Personalizzate (CR) di tipo `Pipelines` e specificare più `Tasks` in esse che desiderano eseguire. Per eseguire una Pipeline devono essere create risorse di tipo `PipelineRun`.

Quando tekton è installato, viene creata un'account di servizio (sa) chiamata pipeline in ogni namespace. Quando una Pipeline viene eseguita, verrà generato un pod utilizzando questo sa chiamato `pipeline` per eseguire i task definiti nel file YAML.

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

### Le capacità dell'account di servizio Pipeline

Per impostazione predefinita, l'account di servizio pipeline può utilizzare la capacità `pipelines-scc`. Questo è dovuto alla configurazione predefinita globale di tekton. In realtà, la configurazione globale di tekton è anch'essa un YAML in un oggetto openshift chiamato `TektonConfig` che può essere visualizzato se si hanno alcuni ruoli di lettura nel cluster.
```yaml
apiVersion: operator.tekton.dev/v1alpha1
kind: TektonConfig
metadata:
name: config
spec:
...
...
platforms:
openshift:
scc:
default: "pipelines-scc"
```
In qualsiasi namespace, se riesci a ottenere il token del service account della pipeline, sarai in grado di utilizzare `pipelines-scc`.

### La Misconfigurazione

Il problema è che il scc predefinito che il sa della pipeline può utilizzare è controllabile dall'utente. Questo può essere fatto utilizzando un'etichetta nella definizione del namespace. Ad esempio, se posso creare un namespace con la seguente definizione yaml:
```yaml
apiVersion: v1
kind: Namespace
metadata:
name: test-namespace
annotations:
operator.tekton.dev/scc: privileged
```
L'operatore tekton darà all'account di servizio della pipeline in `test-namespace` la possibilità di utilizzare lo scc privilegiato. Questo permetterà il montaggio del nodo.

### La soluzione

I documenti di Tekton riguardano come limitare l'override dello scc aggiungendo un'etichetta nell'oggetto `TektonConfig`.

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

Questa etichetta si chiama `max-allowed`
```yaml
apiVersion: operator.tekton.dev/v1alpha1
kind: TektonConfig
metadata:
name: config
spec:
...
...
platforms:
openshift:
scc:
default: "restricted-v2"
maxAllowed: "privileged"
```
{{#include ../../../banners/hacktricks-training.md}}
