libvirt:仮想化管理のためのオープンソースAPI
libvirtは、
レッドハットを中心とした開発者コミュニティによって開発されているオープンソース
プロジェクトです。様々な
仮想化技術を抽象化し、共通のAPIを提供することで、仮想マシンの管理を容易にすることを目的としています。その高い汎用性と柔軟性から、
仮想化基盤における事実上の標準として広く利用されています。
主要な特徴
幅広い仮想化技術のサポート: libvirtは、
Xen、KVM、
QEMU、LXC、
OpenVZ、UML、
VirtualBox、
VMware ESX/GSX/Workstation/Player、
Hyper-V、そしてOpenNebulaといった、主要な
仮想化技術をサポートしています。 さらに、
Linux-VServerなどへの対応も検討されており、常に最新の
仮想化技術に対応するよう進化を続けています。 サポートする
ハイパーバイザーのバージョンも多岐に渡り、高い互換性を提供しています。
多様なプラットフォームと言語への対応: x86、x86-64、
IA-64、POWERなど、様々な
CPUアーキテクチャと、32
ビット/64
ビット、ビッグ
エンディアン/リトル
エンディアンといった
エンディアンネスを問わず動作します。
Unix系OSだけでなく、Windows上でも
MinGWや
Cygwinを用いて利用可能です。 主要なAPIはCと
Pythonで提供され、
Perl、
OCaml、
Ruby、
Javaなど、他の言語用のバインディングもオプションで提供されています。
柔軟なライセンス: LGPL
ライセンスの下で提供されているため、GPL
ライセンスの
ソフトウェアと比較して、アプリケーション開発における制約が少なく、開発者にとって使い勝手の良い
ライブラリとなっています。
堅牢なセキュリティ: libvirtは、様々な認証方法に対応しています。
UNIXドメインソケットを用いた伝統的な権限管理、Polkitによる高度なアクセス制御、ユーザ名とパスワードによる認証、そしてKerberos認証など、セキュリティ要件に合わせて柔軟に設定できます。 また、TCPソケットを用いる際にはSASL認証機構を標準で採用し、Digest-MD5を用いた基本的なユーザ名とパスワード認証に加え、TLSによるデータ暗号化もサポートします。
libvirtの中心となるのはlibvirt.cです。 この
ライブラリの上に、管理コマンドである`virsh`や
Pythonバインディングが構築されています。 一方、下層には、
Xen、
QEMU/KVMなどの
仮想化技術に対応したドライバが存在し、それぞれの
ハイパーバイザーを制御します。 ネットワーク越しでの制御は、クライアント側の`remote_internal.c`と、サーバ側の`libvirtd`によって実現されています。
アクセス制御の詳細
libvirtへのアクセス制御は、libvirtdの設定ファイル(/etc/libvirt/libvirtd.conf)で設定可能です。認証方法は、なし、Polkit、SASLの3種類から選択できます。
UNIXドメインソケットによる伝統的権限管理: 従来のファイルアクセス権限を用いたシンプルな方法です。読み書き可能なソケットと読み取り専用のソケットの2種類があり、アクセス権限は、`libvirtd.conf`ファイルで調整できます。
Polkitを使ったUNIXドメインソケットの認証: Polkitを用いた、より高度なアクセス制御です。PolicyKit.confファイルで詳細なアクセスルールを設定できます。 アプリケーションはPolkitと連携して認証を行い、ルート権限を持たない状態で仮想マシンを管理できます。
ユーザ名とパスワードによる認証: TCPソケットを用いた場合の標準的な認証方法です。SASL認証機構とDigest-MD5アルゴリズムを使用します。 `saslpasswd2`コマンドを使用してユーザアカウントを追加・削除できます。
Kerberos認証: シングルサインオンを実現するKerberos認証もサポートしています。`/etc/sasl2/libvirt.conf`ファイルの設定を変更することで有効化できます。 Kerberos認証を用いるには、適切なKerberos設定と、libvirtサーバ用のプリンシパルの設定が必要です。
各種ドライバ
libvirtは、
Xen、
QEMU/KVM、そしてネットワーク越しでのリモート管理に対応したドライバを提供しています。それぞれのドライバは、対応する
ハイパーバイザーと適切に連携して動作します。
まとめ
libvirtは、その汎用性、柔軟性、そしてセキュリティの高さから、大規模な
仮想化環境構築において重要な役割を果たしています。 様々な
仮想化技術を統一的に管理できるプラットフォームとして、今後もその重要性は増していくと考えられます。