了解 Portworx 的加密
加密概述
下图说明了在 Portworx 中设置按卷加密时的加密工作流程。
{: caption="加密Portworx " caption-side="bottom"}
- 用户使用 Portworx 存储类创建 PVC,并请求对存储器进行加密。
- Portworx 调用 或 API,使用存储在 secret 中的客户根密钥 (CRK) 创建口令。IBM Key Protect Hyper Protect Crypto Services
WrapCreateDEK
Portworx - IBM Key Protect 或 Hyper Protect Crypto Services 服务实例会生成一个 256 位口令,并将口令封装在 DEK 中。 该 DEK 会返回到 Portworx 集群。
- Portworx 集群使用该口令来加密卷。
- Portworx 集群将该 DEK 以明文形式存储在 Portworx etcd 数据库中,将卷标识与该 DEK 相关联,然后从其内存中除去该口令。
解密概述
下图说明了在 Portworx 中设置按卷加密时的解密工作流程。
{: caption="解密Portworx " caption-side="bottom"}
- Kubernetes 发送用于对加密卷进行解密的请求。
- Portworx 向 Portworx etcd 数据库请求卷的 DEK。
- Portworx etcd 查找 DEK,并将该 DEK 返回给 Portworx 集群。
- Portworx 集群通过提供 DEK 和存储在 Portworx secret 中的根密钥 (CRK),调用 IBM Key Protect 或 Hyper Protect Crypto Services API
UnWrapDEK
。 - IBM Key Protect 或 解压缩 DEK 以提取口令,并将口令返回 集群。Hyper Protect Crypto Services Portworx
- 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 设置卷加密
-
创建服务标识。
-
专用集群: 创建允许访问 KMS 实例的虚拟专用端点网关。 确保至少将 1 IP 地址从 VPC 中的每个子网绑定到 VPE。
-
请访问密钥管理公共终端 URL。 确保以正确的格式记录端点; 例如,
https://api.us-south.hs-crypto.cloud.ibm.com:<port>
。 更多信息,请参阅 Hyper Protect Crypto Services API文档。
使用 IBM Key Protect 设置卷加密
-
创建服务标识。
-
检索您在其中创建服务实例的区域 并进行记录。 稍后在创建私钥时需要此值。
-
专用集群: 创建允许访问 KMS 实例的虚拟专用端点网关。 确保至少将 1 IP 地址从 VPC 中的每个子网绑定到 VPE。
在集群中创建私钥
- 将先前部分中检索到的凭证编码为 base64,并记下所有 base64 编码的值。 对每个参数重复此命令,以检索 Base64 编码值。
echo -n "<value>" | base64
- 在群集中创建名为
portworx
的命名空间。kubectl create ns portworx
- 在群集的
portworx
命名空间中创建名为px-ibm
的 Kubernetes 秘密,用于存储 IBM Key Protect 信息。-
使用以下内容为 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 编码的密钥管理公共端点。
-
在集群的
portworx
名称空间中创建私钥。kubectl apply -f secret.yaml
-
验证私钥是否已成功创建。
kubectl get secrets -n portworx
-