Portworx の暗号化について

暗号化の概要

次の図は、ボリューム単位の暗号化をセットアップする際の Portworx での暗号化ワークフローを示しています。

暗号化Portworx
化Portworx
*暗号化

  1. ユーザーは、Portworx ストレージ・クラスを使用して PVC を作成して、このストレージの暗号化を要求します。
  2. Portworx は IBM Key Protect または Hyper Protect Crypto Services API WrapCreateDEK を呼び出して、Portworx シークレットに保管されているカスタマー・ルート鍵 (CRK) を使用してパスフレーズを作成します。
  3. IBM Key Protect または Hyper Protect Crypto Services サービス・インスタンスは、256 ビットのパスフレーズを生成して、このパスフレーズを DEK 内にラップします。 この DEK は Portworx クラスターに返されます。
  4. Portworx クラスターはこのパスフレーズを使用してボリュームを暗号化します。
  5. Portworx クラスターは、この DEK をプレーン・テキストとして Portworx etcd データベースに保管して、この DEK にボリューム ID を関連付けて、パスフレーズをメモリーから削除します。

暗号化解除の概要

次の図は、ボリューム単位の暗号化をセットアップする際の Portworx での復号ワークフローを示しています。

化* *
の復号化

  1. Kubernetes は、暗号化されたボリュームを復号するための要求を送信します。
  2. Portworx は、Portworx etcd データベースに対してこのボリュームの DEK を要求します。
  3. Portworx etcd は、この DEK を検索して Portworx クラスターに返します。
  4. Portworx クラスターは、この DEK および Portworx シークレットに保管されているルート鍵 (CRK) を渡すことで、IBM Key Protect または Hyper Protect Crypto Services API UnWrapDEK を呼び出します。
  5. IBM Key Protect または Hyper Protect Crypto Services はこの DEK をアンラップしてパスフレーズを抽出して、パスフレーズを Portworx クラスターに返します。
  6. 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に変更します。

  1. サービス・インスタンスを作成します

  2. ルート鍵を作成します

  3. サービス ID を作成します。

  4. プライベート・クラスター: KMS インスタンスへのアクセスを許可する 仮想プライベート・エンドポイント・ゲートウェイを作成します。 VPC 内の各サブネットから少なくとも 1 つの IP アドレスを VPE にバインドしてください。

  5. キー管理のパブリックエンドポイント URL を取得します。 エンドポイントが正しい形式 (例えば、 https://api.us-south.hs-crypto.cloud.ibm.com:<port>) であることを確認します。 詳細については 、 Hyper Protect Crypto Services のAPIドキュメントをご覧ください。

IBM Key Protect を使用するボリューム暗号化のセットアップ

  1. サービス・インスタンスを作成します

  2. ルート鍵を作成します

  3. サービス ID を作成します。

  4. サービス・インスタンスを作成した リージョンを取得 し、メモします。 この値は、後でシークレットを作成するときに必要になります。

  5. プライベート・クラスター: KMS インスタンスへのアクセスを許可する 仮想プライベート・エンドポイント・ゲートウェイを作成します。 VPC 内の各サブネットから少なくとも 1 つの IP アドレスを VPE にバインドしてください。

クラスターでのシークレットの作成

  1. 前のセクションで取得した資格情報を base64 でエンコードして、すべての base64 エンコード値をメモします。 パラメーターごとにこのコマンドを繰り返して、base64 エンコード値を取得します。
    echo -n "<value>" | base64
    
  2. クラスターに portworx という名前空間を作成します。
    kubectl create ns portworx
    
  3. IBM Key Protect 情報を保管するために、クラスターの portworx 名前空間に px-ibm という名前の Kubernetes シークレットを作成します。
    1. 次の内容からなる 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
        ```