OpenShift - Tekton

このページでは、クラスターにtektonがインストールされており、ネームスペースを作成できる(編集権限がある場合もあります)という前提で特権昇格シナリオを示しています。

このページの元の著者は Haroun

tektonとは

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

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

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

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

デフォルトでは、pipelineサービスアカウントはpipelines-scc機能を使用できます。これは、tektonのグローバルデフォルト構成によるものです。実際、tektonのグローバル構成もTektonConfigというopenshiftオブジェクト内のYAMLであり、クラスターにいくつかのリーダーロールがある場合に表示できます。

apiVersion: operator.tekton.dev/v1alpha1
kind: TektonConfig
metadata:
name: config
spec:
...
...
platforms:
openshift:
scc:
default: "pipelines-scc"

ミスコンフィグ

問題は、パイプラインサービスアカウントが使用できるデフォルトのsccがユーザーによって制御可能であることです。これは、ネームスペース定義内のラベルを使用して行うことができます。たとえば、次のyaml定義を持つネームスペースを作成できる場合:

apiVersion: v1
kind: Namespace
metadata:
name: test-namespace
annotations:
operator.tekton.dev/scc: privileged

修正

Tektonのドキュメントによると、TektonConfigオブジェクトにラベルを追加することで、sccのオーバーライドを制限する方法が記載されています。

このラベルはmax-allowedと呼ばれます。

apiVersion: operator.tekton.dev/v1alpha1
kind: TektonConfig
metadata:
name: config
spec:
...
...
platforms:
openshift:
scc:
default: "restricted-v2"
maxAllowed: "privileged"

Last updated