OpenShift - Tekton

이 페이지는 클러스터에 tekton이 설치되어 있고 네임스페이스를 생성할 수 있는 경우 특권 상승 시나리오를 보여줍니다 (때로는 편집 권한만 있으면 충분합니다).

이 페이지의 원 저자는 Haroun

Tekton이란

문서에 따르면: Tekton은 클라우드 제공업체 및 온프레미스 시스템에서 개발자가 빌드, 테스트 및 배포할 수 있는 강력하고 유연한 오픈 소스 프레임워크입니다. Jenkins와 Tekton은 모두 애플리케이션을 테스트, 빌드 및 배포할 수 있지만 Tekton은 클라우드 네이티브입니다.

Tekton에서 모든 것은 YAML 파일로 표현됩니다. 개발자는 Pipelines 유형의 사용자 정의 리소스(CR)를 생성하고 실행하려는 여러 Tasks를 지정할 수 있습니다. Pipeline을 실행하려면 PipelineRun 유형의 리소스를 생성해야 합니다.

Tekton이 설치되면 모든 네임스페이스에 pipeline라는 서비스 계정(sa)이 생성됩니다. Pipeline이 실행되면 YAML 파일에서 정의된 작업을 실행하기 위해 이 sa인 pipeline을 사용하는 pod가 생성됩니다.

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"

잘못된 구성

문제는 파이프라인 서비스 계정 토큰을 얻을 수 있다면 pipelines-scc를 사용할 수 있습니다.

Misconfig

문제는 파이프라인 서비스 계정이 사용할 수 있는 기본 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