暗号化カスタム・イメージの作成
IBM Cloud® Virtual Private Cloudの要件を満たす qcow2がある場合、それを暗号化することができます。 以下の手順では、QEMUと独自のパスフレーズを使用して、LUKS暗号化でカスタムイメージを暗号化する方法を説明します。 イメージを暗号化した後、パスフレーズをカスタマー・ルート鍵 (CRK) でラップします。 ラップされた (または暗号化された) データ暗号鍵は、 IBM Cloud VPCにインポートすると、イメージ・メタデータとともに保管されます。
暗号化されたカスタム・イメージを作成する簡単な方法は、ボリュームからイメージを使用することです。 この機能を使用して、インスタンスのブート・ボリュームからカスタム・イメージを作成し、お客様管理の暗号化を指定することができます。 詳しくは、ボリュームからのイメージの作成についてを参照してください。
暗号化されたカスタム・イメージをプライベート・カタログやベア・メタル・サーバーで使用することはできません。
詳しくは、 SSH 鍵の概要 を参照してください。
暗号化カスタム・イメージの仕組み
独自のパスフレーズを使用してカスタム・イメージを暗号化したら、そのイメージを IBM Cloud Object Storage にアップロードします。 暗号化したイメージを IBM Cloud VPC にインポートする前に、鍵管理サービス (KMS) をセットアップしてカスタマー・ルート鍵 (CRK) を作成しておく必要があります。 次に、CRKを使用して、イメージを暗号化する際に使用するパスフレーズを保護します。 シークレットのパスフレーズを CRK でラップすることで、KMS のいわゆる「ラップされたデータ暗号鍵」(WDEK) を作成できます。 パスフレーズを暗号化することで、パスフレーズを平文で共有する必要がなくなります。
イメージをインポートするときに、KMS に保管されているカスタマー・ルート鍵 (CRK) のクラウド・リソース名 (CRN) を指定する必要があります。 また、ラップされたデータ暗号化鍵 (WDEK) の暗号文も指定する必要があります。 パスフレーズは、常に暗号化されて WDEK に保管されます。 暗号化イメージを使用する仮想サーバーを始動したときにのみアンラップされます。
暗号化されたイメージを使用して仮想サーバーをプロビジョンする準備ができたら、暗号化情報は必要ありません。 WDEK および CRK の CRN は、メタデータとしてイメージに一緒に保管されています。 詳しくは、暗号化カスタム・イメージについてを参照してください。
暗号化イメージのプロセスの概要
以下の手順は、暗号化イメージを正常に作成してインポートするために実行する必要があるプロセスを大まかにまとめたものです。 これ以降のセクションで、各手順を実行する方法について詳しく説明します。
- QEMU と任意のパスフレーズを使用して qcow2 ファイルを LUKS 暗号化で暗号化することで、暗号化イメージを作成します。
- 暗号化イメージのファイルを IBM Cloud Object Storage にアップロードします。
- 鍵管理サービスをプロビジョンし、カスタマー・ルート鍵 (CRK) を作成してから、パスフレーズをその CRK でラップすることで、ラップされたデータ暗号化鍵 (WDEK) を生成します。
- Cloud Identity and Access Management からのイメージのインポート、および WDEK を使用したデータの暗号化を行うために必要な IBM IBM Cloud Object Storage の許可を作成したことを確認します。
- IBM Cloud VPC にイメージをインポートします。 IBM Cloud Object Storage の場所、KMS に保管されている CRK、および WDEK の暗号文を指定する必要があります。
イメージを暗号化する
このステップでは、QEMUを使用して独自のパスフレーズを指定し、LUKS暗号化でカスタムイメージを暗号化します。
暗号化するカスタム・イメージは、IBM Cloud VPC インフラストラクチャーのカスタム・イメージの要件を満たしている必要があります。 以下のトピックで画像の準備要件を完了したことを確認してください
暗号化タスクを完了するには、 QEMU バージョン 2.12がインストールされている必要があります。
この QEMU の暗号化手順を実行するには、Linux または Windows オペレーティング・システムを使用する必要があります。 Mac オペレーティング・システムはサポートされません。
QEMU を使用して、カスタムイメージの2つ目の暗号化された qcow2を作成するには、以下の手順に従います。
-
イメージの暗号化に使用する独自のパスフレーズを決定します。 このタスクのサンプル・コマンドでは、パスフレーズ「
abc123
」を使用します。 パスフレーズを使用可能にしておきます。 その後、パスフレーズをラップして、ラップされたデータ暗号化キー(WDEK)を作成する必要があります。 その WDEK が、イメージを IBM Cloud VPC にインポートするときに必要になります。 -
以下のコマンドを使用して、現在の qcow2 カスタム・イメージを確認します。
qemu-img info my_100G_custom_image.qcow2
この例の場合、以下の出力のような応答が表示されます。
image: my_100G_custom_image.qcow2 file format: qcow2 virtual size: 100 GiB (107374182400 bytes) disk size: 1.28 GiB cluster_size: 65536 Format specific information: compat: 1.1 lazy refcounts: false refcount bits: 16 corrupt: false
-
まったく同じサイズの空の qcow2 ファイルを新規作成し、LUKS 暗号化を使用して暗号化します。 任意のパスフレーズ (例えば
abc123
など) を使用して、ファイルを暗号化します。qemu-img create --object secret,id=sec0,data=abc123 -f qcow2 -o encrypt.format=luks,encrypt.key-secret=sec0 my_100G_custom_image-encrypted.qcow2 100G
-
qcow2 イメージ、
my_100G_custom_image.qcow2
を暗号化されたイメージ、my_100G_custom_image-encrypted.qcow2
に変換します。qemu-img convert --object secret,id=sec0,data=abc123 --image-opts driver=qcow2,file.filename=my_100G_custom_image.qcow2 --target-image-opts driver=qcow2,encrypt.key-secret=sec0,file.filename=my_100G_custom_image-encrypted.qcow2 -n -p
-
2 つのファイルを比較して、同じファイルであることを確認します。
qemu-img compare --object secret,id=sec0,data=abc123 --image-opts driver=qcow2,file.filename=my_100G_custom_image.qcow2 driver=qcow2,encrypt.key-secret=sec0,file.filename=my_100G_custom_image-encrypted.qcow2 -p
-
エラーがないかファイルを検査します。
qemu-img check --object secret,id=sec0,data=abc123 --image-opts driver=qcow2,encrypt.key-secret=sec0,file.filename=my_100G_custom_image-encrypted.qcow2
この例の場合、以下の出力のような応答が表示されます。
No errors were found on the image. 16343/1638400 = 1.00% allocated, 0.00% fragmented, 0.00% compressed clusters Image end offset: 1074790400
-
新しい暗号化ファイルで
info
を実行し、期待通りのサイズと暗号化レベルであることを確認します。qemu-img info my_100G_custom_image-encrypted.qcow2
この例の場合、以下の出力のような応答が表示されます。
image: my_100G_custom_image-encrypted.qcow2 file format: qcow2 virtual size: 100 GiB (107374182400 bytes) disk size: 1.27 GiB cluster_size: 65536 Format specific information: compat: 1.1 lazy refcounts: false refcount bits: 16 corrupt: false
暗号化イメージを IBM Cloud Object Storage にアップロードする
LUKS暗号化と固有のパスフレーズでイメージファイルを暗号化したら、以下の手順で IBM Cloud Object Storageにアップロードできます
- 後で簡単に見つけられるように、カスタマイズしたイメージ・ファイルに記述名を付けてください。
- IBM Cloud Object Storage バケットの**「オブジェクト」ページで、「アップロード」**をクリックします。 200 MB を超えるイメージをアップロードするときには、Aspera 高速転送プラグインを使用すると良いでしょう。
鍵管理サービスと鍵をセットアップする
暗号化されたカスタムイメージIBM Cloud VPCにインポートするには、キー管理サービスをプロビジョニングする必要があります。 カスタマー・ルート鍵 (CRK) とラップされたデータ暗号鍵 (WDEK) も必要です。 WDEK は、イメージの暗号化に使用したパスフレーズを、自分以外に知られないようにするために、CRK でラップしたものです。 暗号化イメージを使用する仮想サーバー・インスタンスを始動すると、暗号化イメージにアクセスするために WDEK が使用されます。
以下のリストは、主な管理上の前提条件の要約です
- サポートされる鍵管理サービス Key Protect または Hyper Protect Crypto Services をプロビジョンします。
- カスタマー・ルート鍵 (CRK) を鍵管理サービスにインポートするか、または鍵管理サービス内で作成します。
- イメージの暗号化に使用したパスフレーズをカスタマー・ルート鍵でラップ (保護) して、ラップされたデータ暗号鍵 (WDEK) を作成します。
以下のサンプル・ステップは Key Protect に固有のものですが、全体的なフローは Hyper Protect Crypto Services にも適用されます。 Hyper Protect Crypto Services を使用している場合は、Hyper Protect Crypto Services 情報で対応する手順を参照してください。
-
Key Protect サービスをプロビジョンします。
新しい Key Protectインスタンスをプロビジョニングすると、顧客管理暗号化に必要な最新の更新が確実に含まれます。
-
IBM Key Protect にカスタマー・ルート鍵 (CRK) を 作成または インポートします。
鍵素材の作成と暗号化のオプションの検討によって、鍵のインポートについて事前に計画を立ててください。 セキュリティーを強化するため、鍵素材をクラウドに取り込む前にインポート・トークンを使用して暗号化することによって、鍵素材のセキュアなインポートを可能にすることができます。
-
カスタマー・ルート鍵 (CRK) を使用して、イメージを LUKS 暗号化で暗号化するときに使用した独自のパスフレーズをラップ、つまり保護します。 イメージの暗号化の例では、パスフレーズ「
abc123
」を使用しました。-
WDEKを生成できるように、 Key Protect CLIプラグインがインストールされていることを確認してください。 詳しくは、 Key Protect CLI プラグインのインストール を参照してください。
-
CRK でラップするための準備として、パスフレーズを Base64 エンコード方式でエンコードします。 「
abc123
」を実際のパスフレーズに置き換えて、以下のコマンドを実行してください。 -n パラメーターは、改行文字をエンコードしないようにするために必要です。改行文字があると、ラップされたパスフレーズが機能しなくなります。echo -n "abc123"|base64
この例の場合、以下の出力のような応答が表示されます。
YWJjMTIz
-
ibmcloud kp key wrap
コマンドを実行して、エンコードしたパスフレーズを CRK でラップします。 暗号化イメージを生成するために使用されるパスフレーズは、厳密にはデータ暗号化キーではありませんが Key Protectがラップおよびアンラップされたデータに使用する用語です。 Key Protect から返されるデータは、WDEK と呼ばれます。 詳しくは、kp key wrap を参照してください。ibmcloud kp key wrap KEY_ID -i INSTANCE_ID -p PLAINTEXT
KEY_ID はラッピングに使用するルートキーの ID *、INSTANCE_ID *は Key Protectを識別するインスタンス ID、そして PLAINTEXT はお客様の暗号化されたパスフレーズです。 例えば、 YWJjMTIzです。
この例の場合、以下の出力のような応答が表示されます。
Wrapping key... SUCCESS Ciphertext eyJjaXBoZXJ0ZXh0IjoiKzhjbHVqcUNP ...<redacted>... NmY3MTJjNGViIn0=
-
WDEK の暗号文を保存 (ストレージに永続化) します。 暗号化したイメージを IBM Cloud VPC にインポートするときに、WDEK の暗号文を指定する必要があります。
-
IAM 許可の前提条件
IBM Cloud Identity and Access Managementで必要な許可を作成したことを確認します。
- IBM Cloud Identity and Access Management (IAM) で、Cloud Block Storage (ソース・サービス) と鍵管理サービス (ターゲット・サービス) の間に許可を作成します。 この許可によって、データを暗号化するために WDEK を使用することを IBM Cloud のバックプレーンのサービスに許可します。
- Image Service for VPC と IBM Cloud Object Storage の間の IAM 許可を作成したことを確認します。 ソース・サービスとして**「インフラストラクチャー・サービス」を指定します。 リソース・タイプとして「Image Service for VPC」**を指定します。 ターゲット・サービスとして IBM Cloud Object Storage を指定します。 VPC用のイメージサービスIBM Cloud Object Storage 内のイメージにアクセスできるようにするための認証です。 詳しくは、イメージをインポートするための IBM Cloud Object Storage へのアクセス権限の付与を参照してください。
次のステップ
イメージの暗号化が成功し、KMSが設定され、必要なキーが作成されたら、イメージIBM Cloud VPCに インポートできます。 IBM Cloud VPC でイメージを使用できるようになったら、そのイメージを使用してインスタンスをプロビジョンできます。 イメージをインポートするための IBM Cloud Object Storage へのアクセス権限が付与されている ことを確認します。
暗号化イメージを使用して新規仮想サーバー・インスタンスをプロビジョンするときには、暗号化についての情報は必要はありません。 ラップされたデータ暗号鍵 (WDEK) およびカスタマー・ルート鍵 (CRK) の CRN は、メタデータとしてイメージと一緒に保管されています。