Portworx の暗号化について
暗号化の概要
次の図は、ボリューム単位の暗号化をセットアップする際の Portworx での暗号化ワークフローを示しています。
- ユーザーは、Portworx ストレージ・クラスを使用して PVC を作成して、このストレージの暗号化を要求します。
- Portworx は IBM Key Protect または Hyper Protect Crypto Services API
WrapCreateDEKを呼び出して、Portworx シークレットに保管されているカスタマー・ルート鍵 (CRK) を使用してパスフレーズを作成します。 - IBM Key Protect または Hyper Protect Crypto Services サービス・インスタンスは、256 ビットのパスフレーズを生成して、このパスフレーズを DEK 内にラップします。 この DEK は Portworx クラスターに返されます。
- Portworx クラスターはこのパスフレーズを使用してボリュームを暗号化します。
- Portworx クラスターは、この DEK をプレーン・テキストとして Portworx etcd データベースに保管して、この DEK にボリューム ID を関連付けて、パスフレーズをメモリーから削除します。
暗号化解除の概要
次の図は、ボリューム単位の暗号化をセットアップする際の Portworx での復号ワークフローを示しています。
- Kubernetes は、暗号化されたボリュームを復号するための要求を送信します。
- Portworx は、Portworx etcd データベースに対してこのボリュームの DEK を要求します。
- Portworx etcd は、この DEK を検索して Portworx クラスターに返します。
- Portworx クラスターは、この DEK および Portworx シークレットに保管されているルート鍵 (CRK) を渡すことで、IBM Key Protect または Hyper Protect Crypto Services API
UnWrapDEKを呼び出します。 - IBM Key Protect または Hyper Protect Crypto Services はこの DEK をアンラップしてパスフレーズを抽出して、パスフレーズを Portworx クラスターに返します。
- Portworx クラスターはこのパスフレーズを使用してボリュームを復号します。 ボリュームが復号された後に、パスフレーズが Portworx クラスターから削除されます。
ボリューム暗号化のセットアップ
Portworx ボリューム内のデータを保護するには、 IBM Key Protect や Hyper Protect Crypto Services のような鍵管理サービス(KMS)プロバイダーを使用することができます。
ボリュームの暗号化に IBM Key Protect または Hyper Protect Crypto Services ルート鍵を使用しない場合は、Portworx のインストール時に Portworx シークレットの保管タイプとして**「Kubernetes シークレット (Kubernetes Secret)」**を選択できます。 このオプションを使用すると、 Portworx をインストールした後、独自の暗号化キーを Kubernetes のシークレットに保存することができます。 詳細については、『 Portworx 』のドキュメントを参照してください。
KMS インスタンスと資格情報の取得
Hyper Protect Crypto Services を使用するボリューム暗号化のセットアップ
IBM Cloudは、専用鍵管理サービスをHyper Protect Crypto ServicesからKey Protect Dedicatedに変更します。
-
サービス ID を作成します。
-
プライベート・クラスター: KMS インスタンスへのアクセスを許可する 仮想プライベート・エンドポイント・ゲートウェイを作成します。 VPC 内の各サブネットから少なくとも 1 つの IP アドレスを VPE にバインドしてください。
-
キー管理のパブリックエンドポイント URL を取得します。 エンドポイントが正しい形式 (例えば、
https://api.us-south.hs-crypto.cloud.ibm.com:<port>) であることを確認します。 詳細については 、 Hyper Protect Crypto Services のAPIドキュメントをご覧ください。
IBM Key Protect を使用するボリューム暗号化のセットアップ
-
サービス ID を作成します。
-
サービス・インスタンスを作成した リージョンを取得 し、メモします。 この値は、後でシークレットを作成するときに必要になります。
-
プライベート・クラスター: KMS インスタンスへのアクセスを許可する 仮想プライベート・エンドポイント・ゲートウェイを作成します。 VPC 内の各サブネットから少なくとも 1 つの IP アドレスを VPE にバインドしてください。
クラスターでのシークレットの作成
- 前のセクションで取得した資格情報を base64 でエンコードして、すべての base64 エンコード値をメモします。 パラメーターごとにこのコマンドを繰り返して、base64 エンコード値を取得します。
echo -n "<value>" | base64 - クラスターに
portworxという名前空間を作成します。kubectl create ns portworx - IBM Key Protect 情報を保管するために、クラスターの
portworx名前空間にpx-ibmという名前の Kubernetes シークレットを作成します。- 次の内容からなる Kubernetes シークレットの構成ファイルを作成します。
apiVersion: v1 kind: Secret metadata: name: px-ibm namespace: portworx type: Opaque data: IBM_SERVICE_API_KEY: <base64_apikey> IBM_INSTANCE_ID: <base64_guid> IBM_CUSTOMER_ROOT_KEY: <base64_rootkey> IBM_BASE_URL: <base64_endpoint> ``` `metadata.name` : Kubernetes シークレットの名前として`px-ibm`を入力します。 異なる名前を使用した場合は、インストール時にこのシークレットが Portworx によって認識されません。 `data.IBM_SERVICE_API_KEY` : 既に取得した base64 エンコードされた IBM Key Protect または Hyper Protect Crypto Services API キーを入力します。 `data.IBM_INSTANCE_ID` : 既に取得した base64 エンコードされたサービス・インスタンス GUID を入力します。 `data.IBM_CUSTOMER_ROOT_KEY` : 既に取得した base64 エンコードされたルート鍵を入力します。 `data.IBM_BASE_URL` : IBM Key Protect: サービス・インスタンスの base64 エンコード API エンドポイントを入力します。 : Hyper Protect Crypto Services: base64 エンコードの鍵管理パブリック・エンドポイントを入力します。 2. クラスターの `portworx` 名前空間内にシークレットを作成します。 ```sh {: pre} kubectl apply -f secret.yaml ``` 3. このシークレットが正常に作成されたことを確認します。 ```sh {: pre} kubectl get secrets -n portworx ```