第 3 章 持久性卷加密
持久性卷(PV)加密可确保租户(应用程序)之间的隔离和保密性。在使用 PV 加密前,您必须为 PV 加密创建一个存储类。持久卷加密仅可用于 RBD PV。
OpenShift Data Foundation 支持在 HashiCorp Vault 和 Thales CipherTrust Manager 中存储加密密码短语。您可以创建加密的存储类,使用外部密钥管理系统(KMS)进行持久性卷加密。在创建存储类前,您需要配置对 KMS 的访问。
对于 PV 加密,您必须具有有效的 Red Hat OpenShift Data Foundation 高级订阅。如需更多信息,请参阅 OpenShift Data Foundation 订阅中的知识库文章。
3.1. 访问密钥管理系统 (KMS) 的配置 复制链接链接已复制到粘贴板!
取决于您的具体用例,需要使用以下方法之一配置对 KMS 的访问:
-
使用
vaulttoken允许用户使用令牌进行身份验证 -
使用
Thales CipherTrust Manager:使用密钥管理互操作性协议 (KMIP) -
使用
vaulttenantsa(技术预览):允许用户使用serviceaccounts通过Vault进行身份验证
使用 vaulttenantsa 访问 KMS 是一项技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
如需更多信息,请参阅技术预览功能支持范围。
3.1.1. 使用 vaulttoken 配置对 KMS 的访问 复制链接链接已复制到粘贴板!
先决条件
-
OpenShift 数据基础集群处于
Ready状态。 在外部密钥管理系统 (KMS) 上,
-
确保存在具有令牌的策略,并且启用了
Vault中的键值后端路径。 -
确保您在
Vault服务器上使用签名证书。
-
确保存在具有令牌的策略,并且启用了
流程
在租户的命名空间中创建一个 secret。
-
在 OpenShift Container Platform web 控制台中进入 Workloads
Secrets。 -
点 Create
Key/value secret。 -
输入 Secret Name 作为
ceph-csi-kms-token。 -
输入 Key 作为
token。 输入 Value。
它是来自 Vault 的令牌。您可以单击 Browse 来选择并上传含有令牌的文件,或者直接在文本框中输入令牌。
- 点 Create。
只有在所有使用 ceph-csi-kms-token 的加密 PVC 已被删除后,才能删除令牌。
3.1.2. 使用 Thales CipherTrust Manager配置对 KMS 的访问 复制链接链接已复制到粘贴板!
先决条件
如果 KMIP 客户端不存在,请创建一个。在用户界面中,选择 KMIP
Client Profile Add Profile。 -
在创建配置集的过程中,将
CipherTrust用户名添加到 Common Name 字段中。
-
在创建配置集的过程中,将
-
通过进入到 KMIP
Registration Token New Registration Token 来创建令牌。为下一步复制令牌。 -
要注册客户端,请进入到 KMIP
Registered Clients Add Client。指定名称。粘贴上一步中的注册令牌,然后点保存。 - 点 Save Private Key 和 Save Certificate 下载私钥和客户端证书。
要创建新的 KMIP 接口,请进入到 Admin Settings
Interfaces Add Interface。 - 选择 KMIP Key Management Interoperability Protocol 并点 Next。
- 选择一个空闲端口。
- 为 Network Interface 选择 all。
- 为 Interface Mode 选择 TLS, verify client cert, user name taken from client cert, auth request is optional。
- (可选)您可以在密钥被删除时启用硬删除以删除元数据和材料。它默认是禁用的。
- 选择要使用的 CA,然后点 Save。
- 要获取服务器 CA 证书,请点新创建的界面右侧的 Action 菜单(⋮),然后点 Download Certificate。
流程
要创建一个密钥以充当 storageclass 加密的 KEK(Key Encryption Key),请按照以下步骤执行:
-
进入到 Keys
Add Key。 - 输入 Key Name。
- 分别将 Algorithm 和 Size 设置为 AES 和 256。
- 启用 Create a key in Pre-Active state,并设置激活的日期和时间。
- 确保在 Key Usage 下启用了 Encrypt 和 Decrypt。
- 复制新创建的密钥的 ID,以在部署过程中用作唯一标识符。
-
进入到 Keys
3.1.3. 使用 vaulttenantsa 配置对 KMS 的访问 复制链接链接已复制到粘贴板!
先决条件
-
OpenShift 数据基础集群处于
Ready状态。 在外部密钥管理系统 (KMS) 上,
- 确保策略存在,并且已启用 Vault 中的键值后端路径。
- 确保您在 Vault 服务器上使用签名的证书。
在租户命名空间中创建以下 serviceaccount,如下所示:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
流程
在 OpenShift Data Foundation 使用 Vault 进行身份验证之前,您需要配置 Kubernetes 身份验证方法。以下说明创建并配置 serviceAccount、ClusterRole 和 ClusterRoleBinding ,以允许 OpenShift Data Foundation 使用 Vault 进行身份验证。
将以下 YAML 应用到您的 Openshift 集群:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为 serviceaccount 令牌和 CA 证书创建 secret。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 从 secret 获取令牌和 CA 证书。
SA_JWT_TOKEN=$(oc -n openshift-storage get secret rbd-csi-vault-token-review-token -o jsonpath="{.data['token']}" | base64 --decode; echo) SA_CA_CRT=$(oc -n openshift-storage get secret rbd-csi-vault-token-review-token -o jsonpath="{.data['ca\.crt']}" | base64 --decode; echo)$ SA_JWT_TOKEN=$(oc -n openshift-storage get secret rbd-csi-vault-token-review-token -o jsonpath="{.data['token']}" | base64 --decode; echo) $ SA_CA_CRT=$(oc -n openshift-storage get secret rbd-csi-vault-token-review-token -o jsonpath="{.data['ca\.crt']}" | base64 --decode; echo)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 检索 OpenShift 集群端点。
OCP_HOST=$(oc config view --minify --flatten -o jsonpath="{.clusters[0].cluster.server}")$ OCP_HOST=$(oc config view --minify --flatten -o jsonpath="{.clusters[0].cluster.server}")Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用前面步骤中收集的信息在 Vault 中设置 kubernetes 身份验证方法,如下所示:
vault auth enable kubernetes vault write auth/kubernetes/config \ token_reviewer_jwt="$SA_JWT_TOKEN" \ kubernetes_host="$OCP_HOST" \ kubernetes_ca_cert="$SA_CA_CRT"$ vault auth enable kubernetes $ vault write auth/kubernetes/config \ token_reviewer_jwt="$SA_JWT_TOKEN" \ kubernetes_host="$OCP_HOST" \ kubernetes_ca_cert="$SA_CA_CRT"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 Vault 中为租户命名空间创建一个角色:
vault write "auth/kubernetes/role/csi-kubernetes" bound_service_account_names="ceph-csi-vault-sa" bound_service_account_namespaces=<tenant_namespace> policies=<policy_name_in_vault>
$ vault write "auth/kubernetes/role/csi-kubernetes" bound_service_account_names="ceph-csi-vault-sa" bound_service_account_namespaces=<tenant_namespace> policies=<policy_name_in_vault>Copy to Clipboard Copied! Toggle word wrap Toggle overflow csi-kubernetes是 OpenShift Data Foundation 在 Vault 中寻找的默认角色名称。OpenShift Data Foundation 集群中租户命名空间中的默认服务帐户名称为ceph-csi-vault-sa。这些默认值可以通过在租户命名空间中创建 ConfigMap 来覆盖。有关覆盖默认名称的更多信息,请参阅使用租户 ConfigMap 覆盖 Vault 连接详情。
YAML 示例
要创建使用
vaulttenantsa方法进行 PV 加密的存储类,您必须编辑现有的 ConfigMap 或创建名为csi-kms-connection-details的 ConfigMap,它将保存建立与 Vault 连接所需的所有信息。以下提供的 yaml 示例可用于更新或创建
csi-kms-connection-detailConfigMap:Copy to Clipboard Copied! Toggle word wrap Toggle overflow encryptionKMSType设置为
vaulttenantsa,以使用服务帐户与 vault 进行身份验证。vaultAddress使用端口号的 vault 服务器的主机名或 IP 地址。
vaultTLSServerName(可选) vault TLS 服务器名称
vaultAuthPath(可选)在 Vault 中启用 kubernetes auth 方法的路径。默认路径为
kubernetes。如果在kubernetes之外的其他路径中启用了 auth 方法,则需要将此变量设置为"/v1/auth/<path>/login"。vaultAuthNamespace(可选)启用 kubernetes auth 方法的 Vault 命名空间。
vaultNamespace(可选)用于存储密钥的后端路径存在的 Vault 命名空间
vaultBackendPath保存加密密钥的 Vault 中的后端路径
vaultCAFromSecret包含来自 Vault 的 CA 证书的 OpenShift Data Foundation 集群中的 secret
vaultClientCertFromSecret包含来自 Vault 的客户端证书的 OpenShift Data Foundation 集群中的 secret
vaultClientCertKeyFromSecret包含来自 Vault 的客户端私钥的 OpenShift Data Foundation 集群中的 secret
tenantSAName(可选)租户命名空间中的服务帐户名称。默认值为
ceph-csi-vault-sa。如果要使用其他名称,则必须相应地设置此变量。