IBM Cloud Docs
了解 Portworx 的加密

了解 Portworx 的加密

加密概述

下图说明了在 Portworx 中设置按卷加密时的加密工作流程。

加密Portworx{: caption="加密Portworx " caption-side="bottom"}

  1. 用户使用 Portworx 存储类创建 PVC,并请求对存储器进行加密。
  2. Portworx 调用 或 API,使用存储在 secret 中的客户根密钥 (CRK) 创建口令。IBM Key Protect Hyper Protect Crypto Services WrapCreateDEK Portworx
  3. IBM Key Protect 或 Hyper Protect Crypto Services 服务实例会生成一个 256 位口令,并将口令封装在 DEK 中。 该 DEK 会返回到 Portworx 集群。
  4. Portworx 集群使用该口令来加密卷。
  5. Portworx 集群将该 DEK 以明文形式存储在 Portworx etcd 数据库中,将卷标识与该 DEK 相关联,然后从其内存中除去该口令。

解密概述

下图说明了在 Portworx 中设置按卷加密时的解密工作流程。

解密Portworx{: caption="解密Portworx " caption-side="bottom"}

  1. Kubernetes 发送用于对加密卷进行解密的请求。
  2. Portworx 向 Portworx etcd 数据库请求卷的 DEK。
  3. Portworx etcd 查找 DEK,并将该 DEK 返回给 Portworx 集群。
  4. Portworx 集群通过提供 DEK 和存储在 Portworx secret 中的根密钥 (CRK),调用 IBM Key Protect 或 Hyper Protect Crypto Services API UnWrapDEK
  5. IBM Key Protect 或 解压缩 DEK 以提取口令,并将口令返回 集群。Hyper Protect Crypto Services Portworx
  6. Portworx 集群使用该口令来解密卷。 解密卷后,将从 Portworx 集群中除去该口令。

设置卷加密

要保护 Portworx 卷中的数据,可以创建 KMS 提供程序的实例,例如 IBM Key Protect 或 Hyper Protect Crypto Services。

如果不想使用 IBM Key Protect 或 Hyper Protect Crypto Services 根密钥来加密卷,可以在 Portworx 安装过程中选择 Kubernetes Secret 作为 Portworx 秘密存储类型。 通过此设置,您可选择在安装 Portworx 后,在 Kubernetes 私钥中存储您自己的定制加密密钥。 更多信息,请参阅 Portworx 文档

获取 KMS 实例和凭证

使用 Hyper Protect Crypto Services 设置卷加密

  1. 创建服务实例

  2. 创建根密钥

  3. 创建服务标识

  4. 专用集群: 创建允许访问 KMS 实例的虚拟专用端点网关。 确保至少将 1 IP 地址从 VPC 中的每个子网绑定到 VPE。

  5. 请访问密钥管理公共终端 URL。 确保以正确的格式记录端点; 例如,https://api.us-south.hs-crypto.cloud.ibm.com:<port>。 更多信息,请参阅 Hyper Protect Crypto Services API文档

使用 IBM Key Protect 设置卷加密

  1. 创建服务实例

  2. 创建根密钥

  3. 创建服务标识

  4. 检索您在其中创建服务实例的区域 并进行记录。 稍后在创建私钥时需要此值。

  5. 专用集群: 创建允许访问 KMS 实例的虚拟专用端点网关。 确保至少将 1 IP 地址从 VPC 中的每个子网绑定到 VPE。

在集群中创建私钥

  1. 将先前部分中检索到的凭证编码为 base64,并记下所有 base64 编码的值。 对每个参数重复此命令,以检索 Base64 编码值。
    echo -n "<value>" | base64
    
  2. 在群集中创建名为 portworx 的命名空间。
    kubectl create ns portworx
    
  3. 在群集的 portworx 命名空间中创建名为 px-ibm 的 Kubernetes 秘密,用于存储 IBM Key Protect 信息。
    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
      输入 px-ibm 作为 Kubernetes 秘密的名称。 如果使用其他名称,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 名称空间中创建私钥。

      kubectl apply -f secret.yaml
      
    3. 验证私钥是否已成功创建。

      kubectl get secrets -n portworx