11장. 전략에 따른 빌드 보안
OpenShift Container Platform의 빌드는 권한이 있는 컨테이너에서 실행됩니다. 권한이 있는 경우 사용한 빌드 전략에 따라 빌드를 실행하여 클러스터 및 호스트 노드에 대한 권한을 에스컬레이션할 수 있습니다. 그리고 일종의 보안 조치로 빌드 및 해당 빌드에 사용하는 전략을 실행할 수 있는 사람을 제한합니다. 사용자 정의 빌드는 권한 있는 컨테이너 내의 모든 코드를 실행할 수 있기 때문에 본질적으로 소스 빌드보다 안전하지 않으며, 기본적으로 비활성화되어 있습니다. Dockerfile 처리 논리의 취약성으로 인해 호스트 노드에 권한이 부여될 수 있으므로 Docker 빌드 권한을 주의하여 부여하십시오.
기본적으로 빌드를 생성할 수 있는 모든 사용자에게 Docker 및 S2I(Source-to-image) 빌드 전략을 사용할 수 있는 권한이 부여됩니다. 클러스터 관리자 권한이 있는 사용자는 ‘전역적으로 빌드 전략을 사용자로 제한’ 섹션에 언급된 대로 사용자 정의 빌드 전략을 활성화할 수 있습니다.
권한 부여 정책을 사용하여 빌드할 수 있는 사용자와 이들이 사용할 수 있는 빌드 전략을 제어할 수 있습니다. 각 빌드 전략에는 해당 빌드의 하위 소스가 있습니다. 사용자는 빌드를 생성할 수 있는 권한과 해당 전략을 사용하여 빌드를 생성하기 위해 빌드 전략 하위 리소스에서 생성할 수 있는 권한이 있어야 합니다. 빌드 전략 하위 리소스에 생성 권한을 부여하는 기본 역할이 제공됩니다.
전략 | 하위 리소스 | 역할 |
---|---|---|
Docker | 빌드/Docker | system:build-strategy-docker |
S2I(Source-to-Image) | 빌드/소스 | system:build-strategy-source |
사용자 정의 | 빌드/사용자 정의 | system:build-strategy-custom |
JenkinsPipeline | builds/jenkinspipeline | system:build-strategy-jenkinspipeline |
11.1. 전역적으로 빌드 전략에 대한 액세스 비활성화 링크 복사링크가 클립보드에 복사되었습니다!
특정 빌드 전략에 대한 액세스를 전역적으로 방지하려면 클러스터 관리자 권한이 있는 사용자로 로그인하여 system:authenticated
그룹에서 해당 역할을 제거한 후 주석 rbac.authorization.kubernetes.io/autoupdate: "false"
를 적용하여 API를 재시작할 때마다 변경되지 않도록 보호하십시오. 다음 예제에서는 Docker 빌드 전략을 비활성화하는 방법을 보여줍니다.
프로세스
다음 명령을 입력하여
rbac.authorization.kubernetes.io/autoupdate
주석을 적용합니다.oc annotate clusterrolebinding.rbac system:build-strategy-docker-binding 'rbac.authorization.kubernetes.io/autoupdate=false' --overwrite
$ oc annotate clusterrolebinding.rbac system:build-strategy-docker-binding 'rbac.authorization.kubernetes.io/autoupdate=false' --overwrite
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 입력하여 역할을 제거합니다.
oc adm policy remove-cluster-role-from-group system:build-strategy-docker system:authenticated
$ oc adm policy remove-cluster-role-from-group system:build-strategy-docker system:authenticated
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 빌드 전략 하위 리소스도
admin
에서 제거되고 사용자 역할을편집합니다
.oc get clusterrole admin -o yaml | grep "builds/docker"
$ oc get clusterrole admin -o yaml | grep "builds/docker"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc get clusterrole edit -o yaml | grep "builds/docker"
$ oc get clusterrole edit -o yaml | grep "builds/docker"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow