3.3 KiB
OpenShift - Tekton
{{#include ../../../banners/hacktricks-training.md}}
このページの元の著者は Haroun
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です。
apiVersion: operator.tekton.dev/v1alpha1
kind: TektonConfig
metadata:
name: config
spec:
...
...
platforms:
openshift:
scc:
default: "pipelines-scc"
どの名前空間でも、パイプラインサービスアカウントトークンを取得できれば、pipelines-sccを使用できるようになります。
誤設定
問題は、パイプラインSAが使用できるデフォルトのSCCがユーザーによって制御可能であることです。これは、名前空間定義のラベルを使用して行うことができます。たとえば、次の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と呼ばれます。
apiVersion: operator.tekton.dev/v1alpha1
kind: TektonConfig
metadata:
name: config
spec:
...
...
platforms:
openshift:
scc:
default: "restricted-v2"
maxAllowed: "privileged"
{{#include ../../../banners/hacktricks-training.md}}