6장. Buildah를 루트가 아닌 사용자로 사용하여 컨테이너 이미지 빌드
컨테이너에서 root 사용자로 OpenShift Pipelines를 실행하면 컨테이너 프로세스 및 호스트를 다른 잠재적으로 악의적인 리소스에 노출할 수 있습니다. 컨테이너에서 루트가 아닌 특정 사용자로 워크로드를 실행하여 이러한 유형의 노출을 줄일 수 있습니다.
대부분의 경우 이 작업에서 이미지를 빌드하고 사용자 네임스페이스를 구성하는 사용자 지정 작업을 생성하여 root 권한 없이 Buildah를 실행할 수 있습니다.
이 구성을 사용하여 이미지가 성공적으로 빌드되지 않는 경우 사용자 정의 서비스 계정(SA) 및 SCC(보안 컨텍스트 제약 조건) 정의를 사용할 수 있지만 이 옵션을 사용하는 경우 Buildah 단계를 활성화하여 권한을 부여해야 합니다(allowPrivilegeEscalation: true
).
6.1. 사용자 네임스페이스를 구성하여 루트가 아닌 사용자로 Buildah 실행
사용자 네임스페이스를 구성하는 것은 루트가 아닌 사용자로 작업에서 Buildah를 실행하는 가장 간단한 방법입니다. 그러나 일부 이미지는 이 옵션을 사용하여 빌드하지 못할 수 있습니다.
사전 요구 사항
-
oc
명령줄 유틸리티를 설치했습니다.
프로세스
openshift-pipelines
네임스페이스에 제공된buildah
작업의 사본을 생성하고 복사 이름을buildah-as-user
로 변경하려면 다음 명령을 입력합니다.$ oc get task buildah -n openshift-pipelines -o yaml | yq '. |= (del .metadata |= with_entries(select(.key == "name" )))' | yq '.kind="Task"' | yq '.metadata.name="buildah-as-user"' | oc create -f -
다음 명령을 입력하여 복사한
buildah
작업을 편집합니다.$ oc edit task buildah-as-user
다음 예와 같이 새 작업에서
주석
및stepTemplate
섹션을 생성합니다.buildah-as-user
작업에 추가된 예apiVersion: tekton.dev/v1 kind: Task metadata: annotations: io.kubernetes.cri-o.userns-mode: 'auto:size=65536;map-to-root=true' io.openshift.builder: 'true' name: assemble-containerimage namespace: pipeline-namespace spec: description: This task builds an image. # ... stepTemplate: env: - name: HOME value: /tekton/home image: $(params.builder-image) imagePullPolicy: IfNotPresent name: '' resources: limits: cpu: '1' memory: 4Gi requests: cpu: 100m memory: 2Gi securityContext: capabilities: add: - SETFCAP runAsNonRoot: true runAsUser: 1000 1 workingDir: $(workspaces.working-directory.path) # ...
- 1
podTemplate
이 사용되므로runAsUser:
설정은 엄격하게 필요하지 않습니다.
-
새
buildah-as-user
작업을 사용하여 파이프라인에 이미지를 빌드합니다.