1.2. 보안 정책
OpenShift Virtualization 보안 및 권한 부여에 대해 알아보십시오.
키 포인트
-
OpenShift Virtualization은 Pod 보안을 위해 현재 모범 사례를 적용하는 것을 목표로
제한된
Kubernetes Pod 보안 표준 프로필을 준수합니다. - VM(가상 머신) 워크로드는 권한이 없는 Pod로 실행됩니다.
-
SCC( 보안 컨텍스트 제약 조건 )는
kubevirt-controller
서비스 계정에 대해 정의됩니다. - OpenShift Virtualization 구성 요소의 TLS 인증서는 자동으로 갱신되고 순환됩니다.
1.2.1. 워크로드 보안 정보
기본적으로 VM(가상 머신) 워크로드는 OpenShift Virtualization에서 root 권한으로 실행되지 않으며 루트 권한이 필요한 OpenShift Virtualization 기능이 없습니다.
각 VM에 대해 virt-launcher
Pod는 세션 모드에서 libvirt
인스턴스를 실행하여 VM 프로세스를 관리합니다. 세션 모드에서 libvirt
데몬은 루트가 아닌 사용자 계정으로 실행되며 동일한 사용자 식별자(UID)에서 실행 중인 클라이언트의 연결만 허용합니다. 따라서 VM은 권한이 없는 포드로 실행되며 최소 권한의 보안 원칙을 따릅니다.
1.2.2. TLS 인증서
OpenShift Virtualization 구성 요소의 TLS 인증서는 자동으로 갱신되고 순환됩니다. 수동으로 새로 고치지 않아도 됩니다.
자동 갱신 일정
TLS 인증서는 다음 일정에 따라 자동으로 삭제되고 교체됩니다.
- KubeVirt 인증서는 매일 갱신됩니다.
- CDI(Containerized Data Importer) 컨트롤러 인증서는 15일마다 갱신됩니다.
- MAC 풀 인증서는 매년 갱신됩니다.
자동 TLS 인증서 순환이 수행되어도 작업이 중단되지 않습니다. 예를 들면 다음 작업이 중단되지 않고 계속 수행됩니다.
- 마이그레이션
- 이미지 업로드
- VNC 및 콘솔 연결
1.2.3. 권한 부여
OpenShift Virtualization에서는 역할 기반 액세스 제어 (RBAC)를 사용하여 사용자 및 서비스 계정에 대한 권한을 정의합니다. 서비스 계정에 정의된 권한은 OpenShift Virtualization 구성 요소가 수행할 수 있는 작업을 제어합니다.
RBAC 역할을 사용하여 가상화 기능에 대한 사용자 액세스를 관리할 수도 있습니다. 예를 들어 관리자는 가상 머신을 시작하는 데 필요한 권한을 제공하는 RBAC 역할을 생성할 수 있습니다. 그러면 관리자가 특정 사용자에게 역할을 바인딩하여 액세스를 제한할 수 있습니다.
1.2.3.1. OpenShift Virtualization의 기본 클러스터 역할
클러스터 역할 집계를 사용하면 OpenShift Virtualization에서 기본 OpenShift Container Platform 클러스터 역할을 확장하여 가상화 오브젝트에 대한 액세스 권한을 포함합니다.
기본 클러스터 역할 | OpenShift Virtualization 클러스터 역할 | OpenShift Virtualization 클러스터 역할 설명 |
---|---|---|
|
| 클러스터의 모든 OpenShift Virtualization 리소스를 볼 수 있지만 생성, 삭제, 수정 또는 액세스할 수 없는 사용자입니다. 예를 들어 사용자는 VM(가상 머신)이 실행 중이지만 이를 종료하거나 콘솔에 액세스할 수 없음을 확인할 수 있습니다. |
|
| 클러스터의 모든 OpenShift Virtualization 리소스를 수정할 수 있는 사용자입니다. 예를 들어 사용자가 VM을 생성하고 VM 콘솔에 액세스한 후 VM을 삭제할 수 있습니다. |
|
|
리소스 컬렉션 삭제 기능을 포함하여 모든 OpenShift Virtualization 리소스에 대한 전체 권한이 있는 사용자입니다. 사용자는 |
1.2.3.2. OpenShift Virtualization의 스토리지 기능에 대한 RBAC 역할
cdi-operator
및 cdi-controller
서비스 계정을 포함하여 CDI(Containerized Data Importer)에 다음 권한이 부여됩니다.
1.2.3.2.1. 클러스터 전체 RBAC 역할
CDI 클러스터 역할 | Resources | verbs |
---|---|---|
|
|
|
|
| |
|
|
|
|
| |
|
|
|
|
| |
|
|
|
API 그룹 | Resources | verbs |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
허용 목록: |
|
|
허용 목록: |
|
|
|
|
API 그룹 | Resources | verbs |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1.2.3.2.2. 네임스페이스가 지정된 RBAC 역할
API 그룹 | Resources | verbs |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
API 그룹 | Resources | verbs |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1.2.3.3. kubevirt-controller 서비스 계정에 대한 추가 SCC 및 권한
SCC(보안 컨텍스트 제약 조건)는 Pod에 대한 권한을 제어합니다. 이러한 권한에는 컨테이너 모음인 Pod에서 수행할 수 있는 작업과 액세스할 수 있는 리소스가 포함됩니다. Pod가 시스템에 수용되려면 일련의 조건을 함께 실행해야 하는데, SCC를 사용하여 이러한 조건을 정의할 수 있습니다.
virt-controller
는 클러스터의 가상 머신에 대해 virt-launcher
Pod를 생성하는 클러스터 컨트롤러입니다. 이러한 Pod에는 kubevirt-controller
서비스 계정에서 권한을 부여합니다.
kubevirt-controller
서비스 계정에는 적절한 권한으로 virt-launcher
Pod를 생성할 수 있도록 추가 SCC 및 Linux 기능이 부여됩니다. 이러한 확장된 권한을 통해 가상 머신은 일반적인 Pod 범위를 벗어나는 OpenShift Virtualization 기능을 사용할 수 있습니다.
kubevirt-controller
서비스 계정에는 다음 SCC가 부여됩니다.
-
scc.AllowHostDirVolumePlugin = true
가상 머신에서 hostpath 볼륨 플러그인을 사용할 수 있습니다. -
scc.AllowPrivilegedContainer = false
virt-launcher Pod가 권한 있는 컨테이너로 실행되지 않습니다. scc.AllowedCapabilities = []corev1.Capability{"SYS_NICE", "NET_BIND_SERVICE"}
-
SYS_NICE
를 사용하면 CPU 선호도를 설정할 수 있습니다. -
NET_BIND_SERVICE
는 DHCP 및 Slirp 작업을 허용합니다.
-
kubevirt-controller에 대한 SCC 및 RBAC 정의 보기
oc
툴을 사용하여 kubevirt-controller
에 대한 SecurityContextConstraints
정의를 볼 수 있습니다.
$ oc get scc kubevirt-controller -o yaml
oc
툴을 사용하여 kubevirt-controller
clusterrole에 대한 RBAC 정의를 볼 수 있습니다.
$ oc get clusterrole kubevirt-controller -o yaml