# 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}}