2.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 |
2.11.1. 전역적으로 빌드 전략에 대한 액세스 비활성화
특정 빌드 전략에 대한 액세스를 전역적으로 방지하려면 클러스터 관리자 권한이 있는 사용자로 로그인하여 system:authenticated
그룹에서 해당 역할을 제거한 후 주석 rbac.authorization.kubernetes.io/autoupdate: "false"
를 적용하여 API를 재시작할 때마다 변경되지 않도록 보호하십시오. 다음 예제에서는 Docker 빌드 전략을 비활성화하는 방법을 보여줍니다.
프로세스
rbac.authorization.kubernetes.io/autoupdate
주석을 적용합니다.$ oc edit clusterrolebinding system:build-strategy-docker-binding
출력 예
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: annotations: rbac.authorization.kubernetes.io/autoupdate: "false" 1 creationTimestamp: 2018-08-10T01:24:14Z name: system:build-strategy-docker-binding resourceVersion: "225" selfLink: /apis/rbac.authorization.k8s.io/v1/clusterrolebindings/system%3Abuild-strategy-docker-binding uid: 17b1f3d4-9c3c-11e8-be62-0800277d20bf roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: system:build-strategy-docker subjects: - apiGroup: rbac.authorization.k8s.io kind: Group name: system:authenticated
- 1
rbac.authorization.kubernetes.io/autoupdate
주석 값을"false"
로 변경합니다.
역할을 제거합니다.
$ oc adm policy remove-cluster-role-from-group system:build-strategy-docker system:authenticated
빌드 전략 하위 소스도 이러한 역할에서 제거되었는지 확인합니다.
$ oc edit clusterrole admin
$ oc edit clusterrole edit
각 역할에 대해 비활성화할 전략 리소스에 해당하는 하위 리소스를 지정합니다.
admin에 대한 Docker 빌드 전략을 비활성화합니다.
kind: ClusterRole metadata: name: admin ... - apiGroups: - "" - build.openshift.io resources: - buildconfigs - buildconfigs/webhooks - builds/custom 1 - builds/source verbs: - create - delete - deletecollection - get - list - patch - update - watch ...
- 1
- admin 역할의 사용자에 대해 Docker 빌드를 전역적으로 비활성화하는
builds/custom
및builds/source
를 추가합니다.
2.11.2. 전역적으로 빌드 전략을 사용자로 제한
특정 사용자 집합이 특정 전략을 사용하여 빌드를 생성하도록 허용할 수 있습니다.
사전 요구 사항
- 빌드 전략에 대한 글로벌 액세스 권한을 비활성화합니다.
프로세스
빌드 전략에 해당하는 역할을 특정 사용자에게 할당합니다. 예를 들어
system:build-strategy-docker
클러스터 역할을 사용자devuser
에 추가하려면 다음을 수행합니다.$ oc adm policy add-cluster-role-to-user system:build-strategy-docker devuser
주의클러스터 수준의 사용자 액세스 권한을
builds/docker
하위 리소스에 부여하면 사용자가 빌드를 생성할 수 있는 모든 프로젝트에서 Docker 전략을 사용하여 빌드를 생성할 수 있습니다.
2.11.3. 프로젝트 내 사용자로 빌드 전략 제한
전역적으로 사용자에게 빌드 전략 역할을 부여하는 것과 유사하게 프로젝트 내의 특정 사용자 집합이 특정 전략을 사용하여 빌드를 생성하도록 허용할 수 있습니다.
사전 요구 사항
- 빌드 전략에 대한 글로벌 액세스 권한을 비활성화합니다.
프로세스
빌드 전략에 해당하는 역할을 특정 프로젝트 내 사용자에게 할당합니다. 예를 들어 프로젝트
devproject
내에서system:build-strategy-docker
역할을 사용자devuser
에 추가하려면 다음을 실행합니다.$ oc adm policy add-role-to-user system:build-strategy-docker devuser -n devproject