# OpenShift - Tekton

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

**このページの元の著者は** [**Haroun**](https://www.linkedin.com/in/haroun-al-mounayar-571830211)

### tektonとは

ドキュメントによると：_Tektonは、CI/CDシステムを作成するための強力で柔軟なオープンソースフレームワークであり、開発者がクラウドプロバイダーやオンプレミスシステムでビルド、テスト、デプロイを行うことを可能にします。_ JenkinsとTektonの両方を使用してアプリケーションをテスト、ビルド、デプロイできますが、TektonはCloud Nativeです。

Tektonでは、すべてがYAMLファイルで表現されます。開発者は`Pipelines`タイプのカスタムリソース（CR）を作成し、実行したい複数の`Tasks`を指定できます。Pipelineを実行するには、`PipelineRun`タイプのリソースを作成する必要があります。

tektonがインストールされると、各ネームスペースに`pipeline`というサービスアカウント（sa）が作成されます。Pipelineが実行されると、YAMLファイルで定義されたタスクを実行するために、このsaを使用して`pipeline`という名前のポッドが生成されます。

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

### Pipelineサービスアカウントの機能

デフォルトでは、pipelineサービスアカウントは`pipelines-scc`機能を使用できます。これは、tektonのグローバルデフォルト設定によるものです。実際、tektonのグローバル設定も、クラスター内でいくつかのリーダーロールを持っている場合に見ることができる`TektonConfig`というオープンシフトオブジェクトのYAMLです。
```yaml
apiVersion: operator.tekton.dev/v1alpha1
kind: TektonConfig
metadata:
name: config
spec:
...
...
platforms:
openshift:
scc:
default: "pipelines-scc"
```
どの名前空間でも、パイプラインサービスアカウントトークンを取得できれば、`pipelines-scc`を使用できるようになります。

### 誤設定

問題は、パイプラインSAが使用できるデフォルトのSCCがユーザーによって制御可能であることです。これは、名前空間定義のラベルを使用して行うことができます。たとえば、次のYAML定義で名前空間を作成できる場合:
```yaml
apiVersion: v1
kind: Namespace
metadata:
name: test-namespace
annotations:
operator.tekton.dev/scc: privileged
```
テクトンオペレーターは、`test-namespace`のパイプラインサービスアカウントにscc privilegedを使用する権限を与えます。これにより、ノードのマウントが可能になります。

### 修正

Tektonは、`TektonConfig`オブジェクトにラベルを追加することでsccのオーバーライドを制限する方法について文書化しています。

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

このラベルは`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}}
