OpenShift - Tekton

Ta strona przedstawia scenariusz eskalacji uprawnień, zakładając że tekton jest zainstalowany w klastrze i że można utworzyć przestrzeń nazw (czasami wystarczą prawa do edycji)

Oryginalnym autorem tej strony jest Haroun

Czym jest tekton

Zgodnie z dokumentacją: Tekton to potężny i elastyczny framework typu open-source do tworzenia systemów CI/CD, pozwalający programistom budować, testować i wdrażać aplikacje w różnych środowiskach chmurowych i systemach lokalnych. Zarówno Jenkins, jak i Tekton mogą być używane do testowania, budowania i wdrażania aplikacji, jednak Tekton jest natywny dla chmury.

W Tektonie wszystko jest reprezentowane przez pliki YAML. Programiści mogą tworzyć zasoby niestandardowe (CR) typu Pipelines i określać w nich wiele Tasks, które chcą uruchomić. Aby uruchomić zasoby Pipeline, należy utworzyć zasoby typu PipelineRun.

Gdy tekton jest zainstalowany, konto usługi (sa) o nazwie pipeline jest tworzone w każdej przestrzeni nazw. Gdy Pipeline jest uruchamiany, pojawi się moduł nazywany pipeline korzystający z tego konta sa, aby uruchomić zadania zdefiniowane w pliku YAML.

Możliwości konta usługi Pipeline

Domyślnie konto usługi pipeline może korzystać z możliwości pipelines-scc. Wynika to z globalnej domyślnej konfiguracji tekton. Faktycznie, globalna konfiguracja tekton jest również plikiem YAML w obiekcie openshift o nazwie TektonConfig, który można zobaczyć, mając pewne role czytelnika w klastrze.

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

W dowolnym namespace, jeśli uzyskasz token konta usługi pipeline, będziesz mógł użyć pipelines-scc.

Błąd konfiguracji

Problem polega na tym, że domyślne scc, które konto sa pipeline może używać, jest kontrolowalne przez użytkownika. Można to zrobić za pomocą etykiety w definicji namespace. Na przykład, jeśli mogę utworzyć namespace z następującą definicją yaml:

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

Naprawa

Dzięki operatorowi tekton, konto usługi przepływu w przestrzeni nazw test-namespace będzie miało możliwość korzystania z uprzywilejowanego scc. Pozwoli to na montowanie węzła.

Tekton dokumentuje, jak ograniczyć nadpisanie scc poprzez dodanie etykiety w obiekcie TektonConfig.

Ta etykieta nazywa się max-allowed

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

Last updated