검색

1.2. 보안 정책

download PDF

OpenShift Virtualization 보안 및 권한 부여에 대해 알아보십시오.

키 포인트

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 클러스터 역할을 확장하여 가상화 오브젝트에 대한 액세스 권한을 포함합니다.

표 1.1. OpenShift Virtualization 클러스터 역할
기본 클러스터 역할OpenShift Virtualization 클러스터 역할OpenShift Virtualization 클러스터 역할 설명

view

kubevirt.io:view

클러스터의 모든 OpenShift Virtualization 리소스를 볼 수 있지만 생성, 삭제, 수정 또는 액세스할 수 없는 사용자입니다. 예를 들어 사용자는 VM(가상 머신)이 실행 중이지만 이를 종료하거나 콘솔에 액세스할 수 없음을 확인할 수 있습니다.

edit

kubevirt.io:edit

클러스터의 모든 OpenShift Virtualization 리소스를 수정할 수 있는 사용자입니다. 예를 들어 사용자가 VM을 생성하고 VM 콘솔에 액세스한 후 VM을 삭제할 수 있습니다.

admin

kubevirt.io:admin

리소스 컬렉션 삭제 기능을 포함하여 모든 OpenShift Virtualization 리소스에 대한 전체 권한이 있는 사용자입니다. 사용자는 openshift-cnv 네임스페이스의 HyperConverged 사용자 지정 리소스에 있는 OpenShift Virtualization 런타임 구성을 보고 수정할 수도 있습니다.

1.2.3.2. OpenShift Virtualization의 스토리지 기능에 대한 RBAC 역할

cdi-operatorcdi-controller 서비스 계정을 포함하여 CDI(Containerized Data Importer)에 다음 권한이 부여됩니다.

1.2.3.2.1. 클러스터 전체 RBAC 역할
표 1.2. cdi.kubevirt.io API 그룹에 대해 집계된 클러스터 역할
CDI 클러스터 역할Resourcesverbs

cdi.kubevirt.io:admin

DataVolumes,uploadtokenrequests

* (모두)

DataVolumes/source

create

cdi.kubevirt.io:edit

DataVolumes,uploadtokenrequests

*

DataVolumes/source

create

cdi.kubevirt.io:view

cdiconfigs,dataimportcrons,데이터 소스,datavolumes,objecttransfers,storageprofiles,volumeimportsources,volumeuploadsources,volumeclonesources

get,list,watch

DataVolumes/source

create

cdi.kubevirt.io:config-reader

cdiconfigs,storageprofiles

get,list,watch

표 1.3. cdi-operator 서비스 계정의 클러스터 전체 역할
API 그룹Resourcesverbs

rbac.authorization.k8s.io

clusterrolebindings,clusterroles

get,list,watch,create,update,delete

security.openshift.io

securitycontextconstraints

get,list,watch,update,create

apiextensions.k8s.io

customresourcedefinitions, customresourcedefinitions/status

get,list,watch,create,update,delete

cdi.kubevirt.io

*

*

upload.cdi.kubevirt.io

*

*

admissionregistration.k8s.io

ValidatingWebhookConfigurations,mutatingwebhookconfigurations

생성,목록,감시

admissionregistration.k8s.io

ValidatingWebhookConfigurations

허용 목록: cdi-api-dataimportcron-validate, cdi-api-populator-validate, cdi-api-datavolume-validate, cdi-api-validate, objecttransfer-api-validate

get,update,delete

admissionregistration.k8s.io

mutatingwebhookconfigurations

허용 목록: cdi-api-datavolume-mutate

get,update,delete

apiregistration.k8s.io

APIServices

get,list,watch,create,update,delete

표 1.4. cdi-controller 서비스 계정의 클러스터 전체 역할
API 그룹Resourcesverbs

"" (코어)

이벤트

create,patch

"" (코어)

persistentvolumeclaims

get,list,watch,create,update,delete,deletecollection,patch

"" (코어)

persistentVolumes

get,list,watch,update

"" (코어)

PersistentVolumeClaims/finalizers,pods/finalizers

업데이트

"" (코어)

Pod,서비스

get,list,watch,create,delete

"" (코어)

configmaps

get,create

storage.k8s.io

storageclasses, csidrivers

get,list,watch

config.openshift.io

프록시

get,list,watch

cdi.kubevirt.io

*

*

snapshot.storage.k8s.io

VolumeSnapshots,volumesnapshotclasses,volumesnapshotcontents

get,list,watch,create,delete

snapshot.storage.k8s.io

VolumeSnapshots

업데이트,삭제 수집

apiextensions.k8s.io

CustomResourceDefinitions

get,list,watch

scheduling.k8s.io

priorityclasses

get,list,watch

image.openshift.io

이미지 스트림

get,list,watch

"" (코어)

secrets

create

kubevirt.io

virtualmachines/finalizers

업데이트

1.2.3.2.2. 네임스페이스가 지정된 RBAC 역할
표 1.5. cdi-operator 서비스 계정에 대한 네임스페이스 지정 역할
API 그룹Resourcesverbs

rbac.authorization.k8s.io

rolebindings,역할

get,list,watch,create,update,delete

"" (코어)

serviceaccounts,configmaps,events,secrets,services

get,list,watch,create,update,patch,delete

deployments, deployments/finalizers

get,list,watch,create,update,delete

route.openshift.io

routes, routes/custom-host

get,list,watch,create,update

config.openshift.io

프록시

get,list,watch

monitoring.coreos.com

ServiceMonitors,prometheusrules

get,list,watch,create,delete,update,patch

coordination.k8s.io

리스

get,create,update

표 1.6. cdi-controller 서비스 계정에 네임스페이스가 지정된 역할
API 그룹Resourcesverbs

"" (코어)

configmaps

get,list,watch,create,update,delete

"" (코어)

secrets

get,list,watch

batch

cronjobs

get,list,watch,create,update,delete

batch

작업

생성,삭제,목록,감시

coordination.k8s.io

리스

get,create,update

networking.k8s.io

ingresses

get,list,watch

route.openshift.io

routes

get,list,watch

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

1.2.4. 추가 리소스

Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

© 2024 Red Hat, Inc.