1.2. セキュリティーポリシー


OpenShift Virtualization のセキュリティーと認可を説明します。

主なポイント

  • OpenShift Virtualization は、Pod セキュリティーの現在のベストプラクティスを強制することを目的とした、restricted Kubernetes pod security standards プロファイルに準拠しています。
  • 仮想マシン (VM) のワークロードは、特権のない Pod として実行されます。
  • Security Context Constraints (SCC) は、kubevirt-controller サービスアカウントに対して定義されます。
  • OpenShift Virtualization コンポーネントの TLS 証明書は更新され、自動的にローテーションされます。

1.2.1. ワークロードのセキュリティーについて

デフォルトでは、OpenShift Virtualization の仮想マシン (VM) ワークロードは root 権限では実行されず、root 権限を必要とするサポート対象の OpenShift Virtualization 機能はありません。

仮想マシンごとに、virt-launcher Pod が libvirt のインスタンスを セッションモード で実行し、仮想マシンプロセスを管理します。セッションモードでは、libvirt デーモンは root 以外のユーザーアカウントとして実行され、同じユーザー識別子 (UID) で実行されているクライアントからの接続のみを許可します。したがって、仮想マシンは権限のない Pod として実行し、最小権限のセキュリティー原則に従います。

1.2.2. TLS 証明書

OpenShift Virtualization コンポーネントの TLS 証明書は更新され、自動的にローテーションされます。手動で更新する必要はありません。

自動更新スケジュール

TLS 証明書は自動的に削除され、以下のスケジュールに従って置き換えられます。

  • KubeVirt 証明書は毎日更新されます。
  • Containerized Data Importer controller (CDI) 証明書は、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 コンソールへのアクセス、仮想マシンの削除を行えます。

admin

kubevirt.io:admin

リソースコレクションの削除を含め、すべての OpenShift Virtualization リソースに対する完全な権限を持つユーザー。このユーザーは、openshift-cnv namespace の HyperConverged カスタムリソースにある OpenShift Virtualization ランタイム設定も表示および変更できます。

1.2.3.2. OpenShift Virtualization のストレージ機能の RBAC ロール

cdi-operator および cdi-controller サービスアカウントを含む、次のパーミッションがコンテナー化データインポーター (CDI) に付与されます。

1.2.3.2.1. クラスター全体の RBAC のロール
表1.2 cdi.kubevirt.io API グループの集約されたクラスターロール
CDI クラスターのロールリソース動詞

cdi.kubevirt.io:admin

datavolumesuploadtokenrequests

* (すべて)

datavolumes/source

create

cdi.kubevirt.io:edit

datavolumesuploadtokenrequests

*

datavolumes/source

create

cdi.kubevirt.io:view

cdiconfigsdataimportcronsdatasourcesdatavolumesobjecttransfersstorageprofilesvolumeimportsourcesvolumeuploadsourcesvolumeclonesources

get, list, watch

datavolumes/source

create

cdi.kubevirt.io:config-reader

cdiconfigsstorageprofiles

get, list, watch

表1.3 cdi-operator サービスアカウントのクラスター全体のロール
API グループリソース動詞

rbac.authorization.k8s.io

clusterrolebindingsclusterroles

getlistwatchcreateupdatedelete

security.openshift.io

securitycontextconstraints

getlistwatchupdatecreate

apiextensions.k8s.io

customresourcedefinitionscustomresourcedefinitions/status

getlistwatchcreateupdatedelete

cdi.kubevirt.io

*

*

upload.cdi.kubevirt.io

*

*

admissionregistration.k8s.io

validatingwebhookconfigurationsmutatingwebhookconfigurations

createlistwatch

admissionregistration.k8s.io

validatingwebhookconfigurations

許可リスト: cdi-api-dataimportcron-validate, cdi-api-populator-validate, cdi-api-datavolume-validate, cdi-api-validate, objecttransfer-api-validate

getupdatedelete

admissionregistration.k8s.io

mutatingwebhookconfigurations

許可リスト: cdi-api-datavolume-mutate

getupdatedelete

apiregistration.k8s.io

apiservices

getlistwatchcreateupdatedelete

表1.4 cdi-controller サービスアカウントのクラスター全体のロール
API グループリソース動詞

"" (core)

events

createpatch

"" (core)

persistentvolumeclaims

getlistwatchcreateupdatedeletedeletecollectionpatch

"" (core)

persistentvolumes

getlistwatchupdate

"" (core)

persistentvolumeclaims/finalizerspods/finalizers

update

"" (core)

podsservices

getlistwatchcreatedelete

"" (core)

configmaps

getcreate

storage.k8s.io

storageclassescsidrivers

get, list, watch

config.openshift.io

proxies

get, list, watch

cdi.kubevirt.io

*

*

snapshot.storage.k8s.io

volumesnapshotsvolumesnapshotclassesvolumesnapshotcontents

getlistwatchcreatedelete

snapshot.storage.k8s.io

volumesnapshots

updatedeletecollection

apiextensions.k8s.io

customresourcedefinitions

get, list, watch

scheduling.k8s.io

priorityclasses

get, list, watch

image.openshift.io

imagestreams

get, list, watch

"" (core)

secrets

create

kubevirt.io

virtualmachines/finalizers

update

1.2.3.2.2. namespace 付きの RBAC ロール
表1.5 cdi-operator サービスアカウントの namespace ロール
API グループリソース動詞

rbac.authorization.k8s.io

rolebindingsroles

getlistwatchcreateupdatedelete

"" (core)

serviceaccountsconfigmapseventssecretsservices

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

apps

deploymentsdeployments/finalizers

getlistwatchcreateupdatedelete

route.openshift.io

routesroutes/custom-host

getlistwatchcreateupdate

config.openshift.io

proxies

get, list, watch

monitoring.coreos.com

servicemonitorsprometheusrules

getlistwatchcreatedeleteupdatepatch

coordination.k8s.io

leases

getcreateupdate

表1.6 cdi-controller サービスアカウントの namespace ロール
API グループリソース動詞

"" (core)

configmaps

getlistwatchcreateupdatedelete

"" (core)

secrets

get, list, watch

batch

cronjobs

getlistwatchcreateupdatedelete

batch

jobs

createdeletelistwatch

coordination.k8s.io

leases

getcreateupdate

networking.k8s.io

ingresses

get, list, watch

route.openshift.io

routes

get, list, watch

1.2.3.3. kubevirt-controller サービスアカウントの追加の SCC とパーミッション

SCC (Security Context Constraints) は Pod のパーミッションを制御します。これらのパーミッションには、コンテナーのコレクションである Pod が実行できるアクションおよびそれがアクセスできるリソース情報が含まれます。SCC を使用して、Pod がシステムに受け入れられるために必要な Pod の実行に関する条件の一覧を定義できます。

virt-controller は、クラスター内の仮想マシンの virt-launcher Pod を作成するクラスターコントローラーです。これらの Pod には、kubevirt-controller サービスアカウントによってパーミッションが付与されます。

kubevirt-controller サービスアカウントには追加の SCC および Linux 機能が付与され、これにより適切なパーミッションを持つ virt-launcher Pod を作成できます。これらの拡張パーミッションにより、仮想マシンは通常の 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-controllerSecurityContextConstraints 定義を表示できます。

$ oc get scc kubevirt-controller -o yaml

oc ツールを使用して kubevirt-controller クラスターロールの RBAC 定義を表示できます。

$ oc get clusterrole kubevirt-controller -o yaml

1.2.4. 関連情報

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.