4.8. 권한 있는 보안 컨텍스트에서 Pod 사용
OpenShift Pipelines 1.3.x 이상 버전의 기본 구성에서는 파이프라인 실행 또는 작업 실행으로 인해 pod가 실행된 경우 권한 있는 보안 컨텍스트로 Pod를 실행할 수 없습니다. 이러한 Pod의 기본 서비스 계정은 pipeline
이며 pipelines
서비스 계정과 연결된 SCC(보안 컨텍스트 제약 조건)는 pipelines-scc
입니다. pipelines-scc
SCC는 anyuid
SCC와 유사하지만 파이프라인 SCC의 YAML 파일에 정의된 것과 약간의 차이가 있습니다.
SecurityContextConstraints
오브젝트 예
apiVersion: security.openshift.io/v1 kind: SecurityContextConstraints ... fsGroup: type: MustRunAs ...
또한 OpenShift Pipelines의 일부로 제공되는 Buildah
클러스터 작업은 vfs
를 기본 스토리지 드라이버로 사용합니다.
4.8.1. 파이프라인 실행 및 작업 실행 권한이 있는 보안 컨텍스트에서 Pod 실행
절차
privileged
있는 보안 컨텍스트를 사용하여 Pod(파이프라인 실행 또는 작업 실행)를 실행하려면 다음 수정 작업을 수행합니다.
명시적 SCC를 갖도록 연결된 사용자 계정 또는 서비스 계정을 구성합니다. 다음 방법을 사용하여 구성을 수행할 수 있습니다.
다음 명령을 실행합니다.
$ oc adm policy add-scc-to-user <scc-name> -z <service-account-name>
또는
RoleBinding
및Role
또는ClusterRole
에 대한 YAML 파일을 수정합니다.RoleBinding
오브젝트의 예apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: service-account-name 1 namespace: default roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: pipelines-scc-clusterrole 2 subjects: - kind: ServiceAccount name: pipeline namespace: default
ClusterRole
오브젝트의 예apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: pipelines-scc-clusterrole 1 rules: - apiGroups: - security.openshift.io resourceNames: - nonroot resources: - securitycontextconstraints verbs: - use
- 1
- 사용하는 역할 바인딩에 따라 적절한 클러스터 역할로 바꿉니다.
참고기본 YAML 파일의 복사본을 만들고 중복 파일을 변경하는 것이 좋습니다.
-
vfs
스토리지 드라이버를 사용하지 않는 경우 작업 실행 또는 파이프라인 실행과 연결된 서비스 계정을 구성하여 권한 있는 SCC를 구성하고 보안 컨텍스트를privileged: true
로 설정합니다.
4.8.2. 사용자 정의 SCC 및 사용자 정의 서비스 계정을 사용하여 파이프라인 실행 및 작업 실행
기본 pipelines
SCC(보안 컨텍스트 제약 조건)를 사용하는 경우 파이프라인 실행 및 작업 실행 Pod가 시간 초과에 발생할 수 있습니다. 이 문제는 기본 서비스
계정과 연결된 pipelines-sccpipelines-scc
SCC에서 fsGroup.type
매개변수가 MustRunAs
로 설정되어 있기 때문에 발생합니다.
Pod 시간 초과에 대한 자세한 내용은 BZ#1995779 에서 참조하십시오.
Pod의 시간 초과를 방지하려면 fsGroup.type
매개 변수를 RunAsAny로
설정하여 사용자 지정 SCC를 만들고 사용자 지정 서비스 계정과 연결할 수 있습니다.
파이프라인 실행 및 작업 실행에 사용자 정의 SCC 및 사용자 지정 서비스 계정을 사용하는 것이 좋습니다. 이 접근 방식을 사용하면 유연성이 향상되고 업그레이드 중에 기본값을 수정할 때 실행을 중단하지 않습니다.
절차
fsGroup.type
매개변수를RunAsAny
로 설정하여 사용자 지정 SCC를 정의합니다.예제: 사용자 지정 SCC
apiVersion: security.openshift.io/v1 kind: SecurityContextConstraints metadata: annotations: kubernetes.io/description: my-scc is a close replica of anyuid scc. pipelines-scc has fsGroup - RunAsAny. name: my-scc allowHostDirVolumePlugin: false allowHostIPC: false allowHostNetwork: false allowHostPID: false allowHostPorts: false allowPrivilegeEscalation: true allowPrivilegedContainer: false allowedCapabilities: null defaultAddCapabilities: null fsGroup: type: RunAsAny groups: - system:cluster-admins priority: 10 readOnlyRootFilesystem: false requiredDropCapabilities: - MKNOD runAsUser: type: RunAsAny seLinuxContext: type: MustRunAs supplementalGroups: type: RunAsAny volumes: - configMap - downwardAPI - emptyDir - persistentVolumeClaim - projected - secret
사용자 정의 SCC를 생성합니다.
예제:
my-scc
SCC 생성$ oc create -f my-scc.yaml
사용자 정의 서비스 계정을 생성합니다.
예제:
fsgroup-runasany
서비스 계정 만들기$ oc create serviceaccount fsgroup-runasany
사용자 지정 SCC를 사용자 지정 서비스 계정과 연결합니다.
예제:
my-scc
SCC를fsgroup-runasany
서비스 계정과 연결합니다.$ oc adm policy add-scc-to-user my-scc -z fsgroup-runasany
권한 있는 작업에 사용자 지정 서비스 계정을 사용하려면 다음 명령을 실행하여
권한 있는
SCC를 사용자 지정 서비스 계정과 연결할 수 있습니다.예제:
권한이
있는 SCC를fsgroup-runasany
서비스 계정과 연결합니다.$ oc adm policy add-scc-to-user privileged -z fsgroup-runasany
파이프라인 실행 및 작업 실행에서 사용자 정의 서비스 계정을 사용합니다.
예제: 파이프라인은
fsgroup-runasany
사용자 정의 서비스 계정을 사용하여 YAML을 실행합니다.apiVersion: tekton.dev/v1beta1 kind: PipelineRun metadata: name: <pipeline-run-name> spec: pipelineRef: name: <pipeline-cluster-task-name> serviceAccountName: 'fsgroup-runasany'
예제: 작업 실행
fsgroup-runasany
사용자 정의 서비스 계정apiVersion: tekton.dev/v1beta1 kind: TaskRun metadata: name: <task-run-name> spec: taskRef: name: <cluster-task-name> serviceAccountName: 'fsgroup-runasany'
4.8.3. 추가 리소스
- SCC 관리에 대한 자세한 내용은 보안 컨텍스트 제약 조건 관리를 참조하십시오.