講師：クラウド・コンピューティングが意図したコスト削減と効率性を得るためには､
仮想化に大きく依存する｡
現在では､ 仮想化を使用することで､
1台の物理サーバー上に多数の論理サーバーを配置することができる｡
その結果､ データセンター内に必要なスペース､ 電力､
冷却の物理的な量を削減することができる｡
さらに､ 仮想化を使うことで､ 必要なときにいつでも追加の仮想サーバーを立ち上げることができ､
より高いレベルの可用性を実現できる｡
メモリとCPUリソースを動的にプロビジョニングできるこの機能は､
クラウド・コンピューティングの重要な利点のひとつだ｡
さて､ クラウド・コンピューティングにはさまざまな利点がある一方で､
考慮しなければならないセキュリティ上の問題も数多くある｡
物理サーバーと同じセキュリティ問題のほとんどは､
クラウド環境にも持ち越される｡
経営者は､ クラウドに移行すればすべての問題が解決すると考えていることが多いが､
実際には決してそうではない｡
仮想化を使用する場合､ 1つまたは複数の論理サーバーが1つの物理サーバー上に存在する｡
そのために､ ハイパーバイザーと呼ばれる特殊なソフトウェアを使用する｡
ハイパーバイザーは､ プロセッサ､
メモリ､ ハードディスクの可用性など､ すべてのリソースの配分を制御する｡
基本的に､ ハイパーバイザーは物理マシンをエミュレートするため､
オペレーティング・システムとそのすべてのアプリケーションは､ 仮想環境内で動作していることに気づかない｡
現在､ ハイパーバイザーは､ タイプ1またはベアメタル・ハイパーバイザーと､
タイプ2またはホステッド・ハイパーバイザーの2つに分類される｡
ベアメタル型とホスト型ハイパーバイザーを比較した場合､
セキュリティの観点からの唯一の主な違いは､
ホスト型では基盤となるオペレーティング・システムも適切にセキュリティ保護され､ パッチが適用されていることを確認しなければならないことだ｡
パフォーマンスを考えれば､
ベアメタルはホスティングされたものよりも高速で効率的だ｡
もうひとつの仮想化オプションは､ コンテナ・ベース仮想化（コンテナ化）と呼ばれるものだ｡
このタイプでは､ ハイパーバイザーは全く利用されない｡ その代わりに､
各コンテナは､ 各コンテナのベースとして共通のオペレーティング・システムに依存する｡
各コンテナは同じ基礎となるオペレーティング・システムを共有するが､ 各コンテナは､
必要に応じてカスタマイズできる独自のバイナリ､ ライブラリ､ アプリケーションを持つことができる｡
現在､ コンテナベースの仮想化は､ Linuxを基盤とするオペレーティング・システムでほぼ独占的に使用されている｡
コンテナ・ベースの仮想化では､ 個々のコンテナに独自のオペレーティング・システムのコピーを必要としないため､
タイプ1やタイプ2の仮想化よりもリソースの使用量が少なくて済む｡
多くのクラウド・サービス・プロバイダーは､ ハイパーコンバージド・インフラストラクチャによって仮想化をさらに一歩進めている｡
これにより､ プロバイダーはハードウェアを変更することなく､
ストレージ､ ネットワーク､ サーバーを完全に統合することができる｡
その代わりに､ ソフトウェアと仮想化技術に依存して､
すべての統合を行っている｡
ベンダーのソリューションに煩わされることなく､
単一のインターフェイスやデバイスからこれらすべてを管理することができる｡
アプリケーション仮想化も仮想化の一種で､
基盤となるホストのセキュリティを強化するためによく使われる｡
アプリケーションの仮想化とは､ コンピュータ・プログラムを実行するオペレーティング・システムからカプセル化するソフトウェア技術である｡
完全に仮想化されたアプリケーションは､
あたかもインストールされているかのように実行されるが､
従来の意味ではインストールさえされていない｡
アプリケーションの仮想化により､ Windows
XPやWindows 7のような旧式のオペレーティング・システム向けに設計されたレガシー・アプリケーションを､
よりモダンなオペレーティング・システム上で実行したり､ Androidアプリケーションのようなクロスプラットフォーム・ソフトウェアをWindowsマシン上で実行したりすることができる｡
多くのクラウド・プロバイダーは､ VDI（仮想デスクトップ・インフラ）も提供している｡
現在VDIは､ クラウド・プロバイダーが集中管理されたサーバーからエンドユーザーに完全なデスクトップ・オペレーティング・システムを提供することを可能にしている｡
この方法を使うことには､ セキュリティ面で多くの利点がある｡
たとえば､ ある組織では､ 朝ログオンすると､
各ユーザーに新しい仮想デスクトップ・イメージを作成していた｡
このデスクトップは永続性がないため､
たとえ攻撃者に悪用されたとしても､ ユーザーがログオフするとすぐに､
あるいは毎日午前0時に破棄されるため､ マルウェアがインストールされていたとしても､
エンドユーザーのデスクトップに永続的にとどまる攻撃者の能力を効果的に破壊することができた｡
仮想化のもうひとつの素晴らしい使い方は､ サンドボックスを作ることだ｡
サンドボックスは､ ウイルス､
ワーム､ トロイの木馬､ その他のマルウェアをゲスト・オペレーティング・システム内で分析できる隔離された環境を作ることができる｡
この仮想サンドボックスは隔離された仮想マシン内にあるため､
ホストOSやハイパーバイザーをホストしている自分のコンピューターに感染することはない｡
サイバーセキュリティ・アナリストとして働く場合､
マルウェア分析を行うためにサンドボックスを多用することになる｡
特に動的マルウェア分析を行う場合は､ マルウェアの一部を取得し､ それを実行して､
そのマルウェアが特定のゲストOS上で実行されたときに何が起こっているかを特定する｡
仮想マシンのもう一つの良い使い道は､
クロスプラットフォームの仮想化である｡
例えば､ 私はMacBook Proをメインマシンとして使っている｡
つまり､ 異なるオペレーティング・システム用のソフトウェア・アプリケーションをテストしたい場合､
ウィンドウズ用ラップトップ､ リナックス用ラップトップ､
マック用ラップトップのように､ それぞれのオペレーティング・システム用に新しいマシンを用意することができる｡
しかし､ 仮想化を使うのであれば､
VMware､ Parallels､ VirtualBoxのようなソフトウェアを使ってMacBook
Pro上でホストシステムを使い､
既存のMac OS環境の上にゲストOSをインストールすることで､ クロスプラットフォーム仮想化を行うことができる｡
これによって､ オペレーティング・システムに関係なく､
すべてのソフトウエアをテストし､ それらがどのように相互作用するかを確認することができる｡
というのも､ ウェブ開発者としてウェブサイトを作成する際､
それがWindows 10､ Windows
11､ Mac､ Chromebook､ iPhone､
Androidデバイス､ その他あらゆるデバイスで動作することを確認したいからである｡
仮想化のもう一つの大きな用途はトレーニングだ｡
これらの仮想マシンを使って､ 実稼働中のオペレーティング・システムで練習ができるように設定されたラボ環境を作ることができる｡
例えば､ CompTIAの各種資格取得のために勉強する場合､ diontraining.comのコースを購入すれば､
CompTIAの各種資格取得のための勉強ができます｡
comには､
実習ラボが組み込まれている｡
これらのラボでは､ 私たちのクラウドベースの環境にログインし､
Linuxシステム､ Windows 10システム､ Windows
Serverシステムなどのアクションを安全かつセキュアな方法で実行することができます｡
トレーニングやラボ環境に仮想マシンを使うことのもう一つの利点は､
様々な時点でスナップショットを取り､
そのスナップショットを取ったところからまた再開できることだ｡
例えば､ 以前私が個人的に講義をしていたとき､ ウィンドウズ7の壊れたマシンを実際に作り､
A+の生徒たちにトラブルシューティングをさせるためにさまざまな問題を用意した｡
彼らに仮想マシンを渡し､
電源を入れ､ 私が壊した最後のセーフポイントからリストアする｡
これは､ トレーニングの中で仮想マシンを使用する素晴らしい方法だ｡
さらに勉強を続け､ LinuxやWindows､
サーバー環境､ Mac OSなどについて学び始めると､
それらのゲストOSを含むさまざまな仮想マシンをスピンアップし､
安全でセキュアな環境でスキルを練習することができる｡
多くの人がエミュレーションと仮想化を混同しているからだ｡
エミュレーションとは､ 他のシステムを模倣したシステムを使用することである｡
仮想化では､ 特定のハードウェアの仮想インスタンスが作成され､
使用される｡
つまり実際には､ ソフトウェアで表現された新しい物理的なマシンを使っていることになる｡
しかし､ エミュレーターでは､ あるソフトウェアがリアルタイムで環境を翻訳し､
それが何か別のものであるかのように装っている｡
例えば､ 古いスーパーファミコンのゲームをMacBook
Proでプレイしたい場合､ OpenEmuのようなスーパーファミコンのエミュレーターをダウンロードすれば､
ゲームのコードをリアルタイムでMacが理解できる命令に翻訳してくれる｡
仮想化では､ 実行中のソフトウェアが物理的にマシンのハードウェアにアクセスできるため､
エミュレーターを使うよりもはるかに高速に動作する｡
では､ 仮想化ではなくエミュレーターを使いたいのはどんな場合だろうか？
スーパーファミコンのような他のハードウェア向けのOSをMacやWindowsマシンで動かす必要がある場合は､
エミュレーターを使うことになる｡
ARMプロセッサー上で動作するように設計されたアンドロイドのように､
異なるオペレーティング・システム向けのソフトウェアを実行したいが､ インテル・プロセッサーとウィンドウズ・オペレーティング・システムを使用している場合は､
やはりエミュレーターが適している｡
一方､ 高速で優れたパフォーマンスが必要な場合は､
仮想化ソリューションを使用したい｡
しかし､ 仮想化では､ プロセッサーの特定のハードウェア用にコード化されたソフトウェアの実行に制限されることを忘れないでほしい｡
通常､ 私たちの多くはx86またはx64ベースのプロセッサーを使用しているため､ Windows､
Linux､ Mac､ またはこれら3つのオペレーティング・システムのどれかを､
これらのタイプのシステム上で仮想化を使って実行しても問題なく動作する｡
しかし､ ARMプロセッサー用に設計されたオペレーティング・システムを実行しようとする場合､
仮想化ではうまくいかず､ エミュレーターを使わなければならない｡
一般的には､ エミュレーターの代わりに仮想化を使うことが多いだろう｡
なぜなら､ 仮想化の方が高速で効率的だし､
ほとんどのものがx86またはx64プロセッサー上で動作するように書かれているからだ｡
しかし､ 別のプロセッサーで何かを実行する必要がある場合は､
エミュレーターを使うことになる｡