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 クラスターロールを拡張して、仮想化オブジェクトにアクセスするための権限を組み込みます。
デフォルトのクラスターロール | OpenShift Virtualization のクラスターロール | OpenShift Virtualization クラスターロールの説明 |
---|---|---|
|
| クラスター内の OpenShift Virtualization リソースをすべて表示できるユーザー。ただし、リソースの作成、削除、変更、アクセスはできません。たとえば、ユーザーは仮想マシン (VM) が実行中であることを確認できますが、それをシャットダウンしたり、そのコンソールにアクセスしたりすることはできません。 |
|
| クラスター内のすべての OpenShift Virtualization リソースを変更できるユーザー。たとえば、ユーザーは仮想マシンの作成、VM コンソールへのアクセス、仮想マシンの削除を行えます。 |
|
|
リソースコレクションの削除を含め、すべての OpenShift Virtualization リソースに対する完全な権限を持つユーザー。このユーザーは、 |
1.2.3.2. OpenShift Virtualization のストレージ機能の RBAC ロール
cdi-operator
および cdi-controller
サービスアカウントを含む、次のパーミッションがコンテナー化データインポーター (CDI) に付与されます。
1.2.3.2.1. クラスター全体の RBAC のロール
CDI クラスターのロール | リソース | 動詞 |
---|---|---|
|
|
|
|
| |
|
|
|
|
| |
|
|
|
|
| |
|
|
|
API グループ | リソース | 動詞 |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
許可リスト: |
|
|
許可リスト: |
|
|
|
|
API グループ | リソース | 動詞 |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1.2.3.2.2. namespace 付きの RBAC ロール
API グループ | リソース | 動詞 |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
API グループ | リソース | 動詞 |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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-controller
の SecurityContextConstraints
定義を表示できます。
$ oc get scc kubevirt-controller -o yaml
oc
ツールを使用して kubevirt-controller
クラスターロールの RBAC 定義を表示できます。
$ oc get clusterrole kubevirt-controller -o yaml