OpenShift - Tekton
Reading time: 3 minutes
このページの元の著者は Haroun
tektonとは
ドキュメントによると:Tektonは、開発者がクラウドプロバイダーやオンプレミスシステム全体でビルド、テスト、デプロイを行うことを可能にする、強力で柔軟なオープンソースのCI/CDシステムを作成するためのフレームワークです。 JenkinsとTektonの両方を使用してアプリケーションをテスト、ビルド、デプロイできますが、TektonはCloud Nativeです。
Tektonでは、すべてがYAMLファイルで表現されます。開発者はPipelines
タイプのカスタムリソース(CR)を作成し、実行したい複数のTasks
を指定できます。Pipelineを実行するには、PipelineRun
タイプのリソースを作成する必要があります。
tektonがインストールされると、各ネームスペースにpipelineというサービスアカウント(sa)が作成されます。Pipelineが実行されると、YAMLファイルで定義されたタスクを実行するために、このsaを使用してpipeline
と呼ばれるポッドが生成されます。
Getting Started with Pipelines | Tekton
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のオーバーライドを制限する方法について文書化しています。
このラベルはmax-allowed
と呼ばれます。
apiVersion: operator.tekton.dev/v1alpha1
kind: TektonConfig
metadata:
name: config
spec:
...
...
platforms:
openshift:
scc:
default: "restricted-v2"
maxAllowed: "privileged"