KMIP for VMware on IBM Cloud を使って VM Encryption を有効化する


# VM Encryption とは

vSphere 6.5 からの新機能です。
**VM Encyription の機能を有効化するためには、「サードパーティのキー管理サーバー（Key Management Server (KMS)）」が必要になります。**
そのため、VMware 基盤とは別に用意しておく必要があります。

## VM Encryption の流れ
1. vCenter Server -- キーを要求 --> KMS
2. KMS（キーを生成・保存） -- キーを配布 --> vCenter Server

    ※ vCenter Server --- KMS 間は、<a href="https://en.wikipedia.org/wiki/Key_Management_Interoperability_Protocol_(KMIP)" >Key Management Interoperability Protocol</a> (KMIP、デフォルト TCP 5696) を使用して通信します。

3.  vCenter Server -- キーを渡す --> ESXi ホスト

    ※ KMS から取得するキーは、キー暗号化キー (KEK) として使用されます。

4. データ暗号化キー（DEK）を KEK で暗号化し、設定ファイルに保存

    ※ ESXi ホストによって生成されるキー（データ暗号化キー：DEK）によって、仮想マシンのゲストデータが、ディスクへの保存時に確実に暗号化されるようにします

5. KEK を破棄（KEK は KMSでのみ保管され、必要に応じて要求されます）

>| <a href="https://docs.vmware.com/jp/VMware-vSphere/6.5/com.vmware.vsphere.security.doc/GUID-E6C5CE29-CD1D-4555-859C-A0492E7CB45D.html" >仮想マシンの暗号化</a> | <a href="https://docs.vmware.com/jp/VMware-vSphere/6.5/com.vmware.vsphere.security.doc/GUID-9035D542-B76B-4244-966D-2A8D92ABF54C.html" >vSphere 仮想マシンの暗号化のコンポーネント</a> |
|--------|--------|
|   vSphere 6.5 からは、仮想マシンの暗号化を利用できます。<br>暗号化により、仮想マシンだけでなく仮想マシンのディスクやファイルも保護することができます。<br>vCenter Server とキー管理サーバ (KMS) の間に信頼できる接続を設定します。<br>これにより、vCenter Server は必要に応じて KMS からキーを取得できるようになります。     |   ![Kobito.7v1PzS.png](https://qiita-image-store.s3.amazonaws.com/0/101361/65d9f4d4-423a-03ac-9788-25cd4b75b5b3.png "Kobito.7v1PzS.png")     |


##【参考】暗号化されるもの、暗号化されないもの
以下に記述があります。

><a href="https://docs.vmware.com/jp/VMware-vSphere/6.5/com.vmware.vsphere.security.doc/GUID-8D7D09AC-8579-4A33-9449-8E8BA49A3003.html" >vSphere 仮想マシンの暗号化で環境を保護する方法</a>

>**暗号化されるもの**
>vSphere 仮想マシンの暗号化機能は、仮想マシン ファイル、仮想ディスク ファイル、およびコア ダンプ ファイルの暗号化に対応しています。

>- 仮想マシン ファイル（vm_name.nvram など）
>	- 仮想マシンのほとんど、具体的には、VMDK ファイルに保存されていないゲスト データが暗号化されます。このファイル セットには、NVRAM、VSWP、および VMSN ファイルが含まれますが、これに限定されません。vCenter Server が KMS から取得するキーにより、内部キーおよびその他のシークレットが含まれる VMX ファイル内の、暗号化されたバンドルのロックが解除されます。
>- 仮想ディスク ファイル（vm_name-flat.vmdk）
>	- 暗号化された仮想ディスク (VMDK) ファイルのデータが、クリアテキストでストレージや物理ディスクに書き込まれたり、ネットワーク経由で転送されたりすることはありません。VMDK 記述子ファイルは、ほとんどがクリアテキストですが、暗号化されたバンドルに KEK のキー ID と内部キー (DEK) が含まれます。
>- コア ダンプ
>	- 暗号化モードが有効になっている ESXi ホストのコア ダンプは常に暗号化されます。vSphere 仮想マシンの暗号化とコア ダンプを参照してください。

>**暗号化されないもの**
仮想マシンに関連付けられているファイルの中には、暗号化されないもの、または部分的に暗号化されるものがあります。

>- ログ ファイル
>	- ログ ファイルには機密データが含まれていないため、暗号化されません。
>- 仮想マシン設定ファイル（vm_name.vmsd, vm_name.vmx）
>	- VMX および VMSD ファイルに保存される仮想マシン構成情報のほとんどが暗号化されません。
>- 仮想ディスク記述子ファイル（vm_name.vmdk）
>	- キーなしでディスクを管理できるように、仮想ディスク記述子ファイルのほとんどが暗号化されません。

##【参考】互換性
VM Encryption を使うときは、互換性のない機能があるので注意が必要です。

><a href="https://docs.vmware.com/jp/VMware-vSphere/6.5/com.vmware.vsphere.security.doc/GUID-C0AF1F3A-67B4-41A6-A933-7E52A3603D9D.html#GUID-C0AF1F3A-67B4-41A6-A933-7E52A3603D9D" >仮想マシンの暗号化の相互運用性</a>
いくつかの機能は、vSphere 仮想マシンの暗号化と同時に使用することはできません。

>- vSphere Fault Tolerance
>- クローン作成は条件付きでサポートされます。
>- vSphere ESXi Dump Collector
>- 暗号化された仮想マシンから別の vCenter Server インスタンスへの vMotion による移行。vMotion を使用して、暗号化されていない仮想マシンの移行を暗号化することがサポートされます。
>- vSphere Replication
>- コンテンツ ライブラリ
>- 仮想ディスクのバックアップに VMware vSphere Storage API - Data Protection (VADP) を使用するバックアップ ソリューションは、サポートされない場合もあります。
>- vSphere 仮想マシンの暗号化は、混合モードの IPv6 では使用できますが、IPv6 のみの環境では使用できません。IPv6 アドレスのみを使用して KMS に接続することはできません。
>- VMware Workstation などの他の VMware 製品の暗号化のために、vSphere 仮想マシンの暗号化を使用することはできません。
>- 暗号化された仮想マシンからの出力をシリアル ポートまたはパラレル ポートに送信することはできません。構成が成功したように見えても、出力はファイルに送信されます。
>- 暗号化された仮想マシンでは、サスペンドまたはメモリ スナップショットの操作を実行することはできません。

#認定された KMS
VMware と KMS を使うときは、認定されたものの中から使うようにしてください。
下記リンクにあるように、IBM Cloud 上では「KMIP for VMware on IBM Cloud」を使うことができます。

>Certified Key Management Server (KMS) Guide
https://www.vmware.com/resources/compatibility/pdf/vi_kms_guide.pdf

>VMware Compatibility Guide - kms
https://www.vmware.com/resources/compatibility/search.php?deviceCategory=kms&details=1&partner=43&page=1&display_interval=20&sortColumn=Partner&sortOrder=Asc
![Kobito.anvJyf.png](https://qiita-image-store.s3.amazonaws.com/0/101361/d34df4ec-be89-e1a9-f447-28eb241b0967.png "Kobito.anvJyf.png")

##【参考】テスト用の Docker KMS
テスト用に以下の Docker KMS をローカル環境に立てることもできます。
<a href="https://hub.docker.com/r/lamw/vmwkmip/" >lamw/vmwkmip - Docker Hub</a>

#KMIP for VMware on IBM Cloud とは
IBM Key Protect サービスを使い、24x7 で稼働するよう設計された KMS になります。
vSphere Web Client または vSphere API を使用することで、KMS インスタンスのクラスタを vCenter Server システムに追加できます。
通信には、KMIP の標準の TCP 5696 を使用します。

- サービス概要

><a href="https://cloudcontent.mybluemix.net/cloud/garage/tutorials/vmware-security-data-encryption?task=4" >Storage requirements, security, and data encryption - IBM Cloud Garage Method</a>
![Kobito.k2AV0Q.png](https://qiita-image-store.s3.amazonaws.com/0/101361/e0b7ce8d-473f-3603-3890-8323d2316a8e.png "Kobito.k2AV0Q.png")

- 2018年4月時点で利用可能なリージョン

><a href="https://console.bluemix.net/docs/services/vmwaresolutions/services/kmip_considerations.html#considerations-for-kmip-for-vmware-on-ibm-cloud" >Considerations for KMIP for VMware on IBM Cloud</a>
![Kobito.Iq4Q6z.png](https://qiita-image-store.s3.amazonaws.com/0/101361/618e7604-aec1-3ca2-d6d0-2e93cf8c0942.png "Kobito.Iq4Q6z.png")

##【参考】IBM Key Protect とは
鍵を守るための物理的な装置、IBM Cloud HSM（Hardware security module）を活用し、サービスを提供しています。

>[技術よりな人が最初に読む：IBMCloud柔らか層本.2.0](https://ibm.biz/BdE9ab) P129参照
![Kobito.QLW6yk.png](https://qiita-image-store.s3.amazonaws.com/0/101361/edfaca12-dd89-f4b4-88d9-4699efc912e5.png "Kobito.QLW6yk.png")


><a href="https://console.bluemix.net/docs/services/keymgmt/keyprotect_about.html#about" >About Key Protect</a>
<img src="https://qiita-image-store.s3.amazonaws.com/0/101361/e1186b50-a5c6-d613-b26b-4646e575c1c2.png" width =50%><img src="https://qiita-image-store.s3.amazonaws.com/0/101361/072a73ea-8a1e-6360-9a35-0f0fe2045325.png" width =50%>



※ IBM Key Protect サービスは、VMware 以外では、IBM Cloud Object Storage サービスとも <a href="https://console.bluemix.net/docs/services/keymgmt/keyprotect_integration.html#integrations" >Integrations</a> し、 BYOK（Bring Your Own Key）による暗号化が可能です。

# 今回の構成

vCenter から KMS への通信要件は、宛先エンドポイントに対して、TCP 5696 で通信できればよいです。
今回は、以下のようにベアメタル上の vCenter Server Appliance から KMS に出ていく通信に対して SNAT（IP masquerade）をかけて疎通できるようにしています。

![Kobito.fj7CZA.png](https://qiita-image-store.s3.amazonaws.com/0/101361/b315cb23-9c1d-539f-f3fd-f12e6567e218.png "Kobito.fj7CZA.png")

# 導入
前置きが長くなりましたが、こちらの手順を参考にして導入します。

><a href="https://console.bluemix.net/docs/services/vmwaresolutions/vcenter/vc_orderinginstance.html#ordering-vcenter-server-instances" >Ordering vCenter Server instances</a>

>- To install KMIP for VMware on IBM Cloud, specify the following settings in the Configure KMIP for VMware on IBM Cloud area:
>	- **Service Region**: Select the IBM Cloud region where your KMIP for VMware IBM Cloud service instance is to be hosted.
>	- **Client SSL Certificate**: This field is optional at the time of initial configuration. You can leave this field blank at this time because the client certificate of the Key Management Server (KMS) in vCenter Server is known after your instance is deployed. But you must enter the cerficate after your instance is deployed, so that your vCenter Server connection to the KMS can be completed successfully.
>	- **API Key for Service ID**: Enter the API key for the IBM Cloud Service ID that is used to access the IBM Key Protect Service instances.
>	- Key Protect Instance: Click Retrieve to get a list of all available IBM Key Protect Service instances and then select the one that is used for key management.
>	- **Customer Root Key**: Click Retrieve to get the customer root key that is stored in the IBM Key Protect instance selected above.

まずは下記リンクから、V2.2 以上のインスタンスがあることを確認します。

>https://console.bluemix.net/infrastructure/vmware-solutions/console/gettingstarted
![Kobito.9aQkLT.png](https://qiita-image-store.s3.amazonaws.com/0/101361/b7cc613c-4546-9262-7b2a-b302c84c0c10.png "Kobito.9aQkLT.png")

こちらの画面からオーダーを進めます。
![Kobito.uFzcOG.png](https://qiita-image-store.s3.amazonaws.com/0/101361/2dd9f979-f929-f65d-bd92-744e63958ca2.png "Kobito.uFzcOG.png")

引き続き、パラメータを指定します。
ここで必要な API Key と Key Protect インスタンスは事前に作成しておきましょう。
API Key は画面のとおり、発行します。
Key Protect インスタンスは、カタログから作成し、Root Key を作成します。

![Kobito.0IhnpD.png](https://qiita-image-store.s3.amazonaws.com/0/101361/dd8575a1-1ae0-aaf7-fa15-38a3d2d72078.png "Kobito.0IhnpD.png")

最終確認をして、完了です。

![180406-0004.png](https://qiita-image-store.s3.amazonaws.com/0/101361/d59e0aea-0f0f-11a9-9bc7-8191f470551f.png "180406-0004.png")

「Installing」から「Installed」になるのを待ちましょう。

![Kobito.NImv8j.png](https://qiita-image-store.s3.amazonaws.com/0/101361/710e7c7c-0c6c-c36f-6122-55f2b4fb69de.png "Kobito.NImv8j.png")
![Kobito.S88Ign.png](https://qiita-image-store.s3.amazonaws.com/0/101361/23da2fe1-5af8-ba56-4d30-8b72dcade7d3.png "Kobito.S88Ign.png")

「View Detail」から、Endpoint の情報を覚えておきます。
![Kobito.cC3j0k.png](https://qiita-image-store.s3.amazonaws.com/0/101361/893df399-95e1-d306-a082-145fcb7aabf1.png "Kobito.cC3j0k.png")

# vCenter の設定
こちらの手順を参考に進めます。

><a href="https://docs.vmware.com/jp/VMware-vSphere/6.5/com.vmware.vsphere.security.doc/GUID-70248689-A0E5-495B-A619-72561BA3A6C9.html" >vCenter Server への KMS の追加</a>
>1. vSphere Web Client で vCenter Server にログインします。
>2. インベントリ リストを参照し、vCenter Server インスタンスを選択します。
>3. 構成 をクリックし、キー管理サーバ をクリックします。
>4. KMS の追加をクリックし、ウィザードに KMS 情報を指定して、OK をクリックします。

![Kobito.TanQWR.png](https://qiita-image-store.s3.amazonaws.com/0/101361/3797013e-4001-2ea0-0dec-015e835fe007.png "Kobito.TanQWR.png")

任意の名前を入力し、先ほど控えておいた Endpoint を入力します。
![Kobito.gTos82.png](https://qiita-image-store.s3.amazonaws.com/0/101361/e46ddd01-e001-f5d5-804a-625da39368b0.png "Kobito.gTos82.png")

「Yes」で先に進みます。
![Kobito.Fq4wIV.png](https://qiita-image-store.s3.amazonaws.com/0/101361/a3299144-9aa1-79d7-ca28-dc3f443f64d1.png "Kobito.Fq4wIV.png")

一旦、接続エラーとなりますが、「Establish trust with KMS ...」から証明書を取得します。
![Kobito.6gBdMJ.png](https://qiita-image-store.s3.amazonaws.com/0/101361/e0152fb7-b5f2-da05-bd38-f825f2e96d90.png "Kobito.6gBdMJ.png")
![Kobito.bYublN.png](https://qiita-image-store.s3.amazonaws.com/0/101361/c62d9de5-7453-852a-434c-13d9778008c3.png "Kobito.bYublN.png")

「KMIP for VMware on IBM Cloud」の情報確認画面に戻り、空白となっていた「Client SSL Certificate」に vCenter から取得した証明書情報を入れて「Confirm」します。

![Kobito.IXthYK.png](https://qiita-image-store.s3.amazonaws.com/0/101361/7b58748a-f2ca-f40a-161f-560d98d4e6e9.png "Kobito.IXthYK.png")

その後、vCenter の方で接続をリトライすると、接続先情報が表示されますので、信頼された接続を構成（Trust）します。

![Kobito.NJC8zW.png](https://qiita-image-store.s3.amazonaws.com/0/101361/82af1bab-4ce8-e810-f7b6-7df35e97b91f.png "Kobito.NJC8zW.png")

これで接続が成功しました。

![Kobito.7e96QD.png](https://qiita-image-store.s3.amazonaws.com/0/101361/e133f7ed-7b39-28a3-7702-71cd1bd33f47.png "Kobito.7e96QD.png")

#VM Encryption
ようやく本題である「VM Encryption」を下記手順を実施して有効化してみました。

>- <a href="https://docs.vmware.com/jp/VMware-vSphere/6.5/com.vmware.vsphere.security.doc/GUID-7DE1ED8F-880B-421E-B27B-5AAA58454AFA.html" >暗号化ストレージ ポリシーの作成</a>
>- <a href="https://docs.vmware.com/jp/VMware-vSphere/6.5/com.vmware.vsphere.security.doc/GUID-431FDB2F-7F34-468D-9D6B-BC5E95279237.html" >暗号化された仮想マシンの作成</a>

![Kobito.5vyyqZ.png](https://qiita-image-store.s3.amazonaws.com/0/101361/05bbacff-a54b-d61e-97fd-69d187b4cc18.png "Kobito.5vyyqZ.png")

肝はストレージポリシーなので、簡単に暗号化の有効・無効化が可能です。
（無効化したいときは、デフォルトのストレージポリシーに戻せばOK）
![Kobito.IBUWPT.png](https://qiita-image-store.s3.amazonaws.com/0/101361/72522d2d-2efe-5007-e1d0-75a67952313e.png "Kobito.IBUWPT.png")

#さいごに
vSphere 6.5 で暗号化機能が強化されましたが、外部 KMS をどうつないで使うのか、という点が見えにくい部分でありましたが、これを機会に VMware on IBM Cloud で暗号化を検討してみてはいかがでしょうか。