2.2. 用于持久性卷加密的存储类
持久性卷(PV)加密可确保租户(应用程序)之间的隔离和保密性。在使用 PV 加密前,您必须为 PV 加密创建一个存储类。持久卷加密仅可用于 RBD PV。
OpenShift Data Foundation 支持在 HashiCorp Vault 和 Thales CipherTrust Manager 中存储加密密码短语。您可以创建加密的存储类,使用外部密钥管理系统(KMS)进行持久性卷加密。在创建存储类前,您需要配置对 KMS 的访问。
对于 PV 加密,您必须具有有效的 Red Hat OpenShift Data Foundation 高级订阅。如需更多信息,请参阅 OpenShift Data Foundation 订阅中的知识库文章。
2.2.1. 访问密钥管理系统 (KMS) 的配置 复制链接链接已复制到粘贴板!
取决于您的具体用例,需要使用以下方法之一配置对 KMS 的访问:
-
使用
vaulttoken
允许用户使用令牌进行身份验证 -
使用
Thales CipherTrust Manager
:使用密钥管理互操作性协议 (KMIP) -
使用
vaulttenantsa
(技术预览):允许用户使用serviceaccounts
通过Vault
进行身份验证
使用 vaulttenantsa
访问 KMS 是一项技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
如需更多信息,请参阅技术预览功能支持范围。
2.2.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 已被删除后,才能删除令牌。
2.2.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
2.2.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-detail
ConfigMap: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
。如果要使用其他名称,则必须相应地设置此变量。
2.2.2. 为持久性卷加密创建存储类 复制链接链接已复制到粘贴板!
先决条件
根据您的用例,您必须确保为以下之一配置对 KMS 的访问:
-
使用
vaulttokens
:确保配置访问权限,如使用vaulttoken
配置对 KMS 的访问所述 -
使用
vaulttenantsa
(技术预览):确保配置访问权限,如 使用vaulttenantsa
配置对 KMS 的访问所述 - 使用 Thales CipherTrust Manager (使用 KMIP):确保配置访问权限,如 使用 Thales CipherTrust Manager 配置对 KMS 的访问所述
(对于仅限 Azure 平台上的用户)使用 Azure Vault:确保设置客户端身份验证,并使用以下步骤从 Azure 获取客户端凭证:
- 创建 Azure Vault。如需更多信息,请参阅 Microsoft 产品文档中的 快速入门:使用 Azure 门户创建密钥 库。
- 使用基于证书的身份验证创建 Service Principal。如需更多信息,请参阅 Microsoft 产品文档中的 使用 Azure CLI 创建 Azure 服务主体。
- 设置 Azure Key Vault 基于角色的访问控制(RBAC)。如需更多信息,请参阅在 Key Vault 上启用 Azure RBAC 权限。
流程
-
在 OpenShift Web 控制台中,进入 Storage
StorageClasses。 - 点 Create Storage Class。
- 输入存储类 Name 和 Description。
- 为 Reclaim Policy 选择 Delete 或 Retain。默认情况下,选择 Delete。
- 选择 Immediate 或 WaitForFirstConsumer 作为卷绑定模式。WaitForConsumer 设置为默认选项。
-
选择 RBD Provisioner
openshift-storage.rbd.csi.ceph.com
,这是用于调配持久卷的插件。 - 选择 存储池,其中卷数据将存储到列表中或创建新池。
选中 Enable encryption 复选框。
选择以下选项之一来设置 KMS 连接详情:
选择现有 KMS 连接 :从下拉列表中选择现有 KMS 连接。该列表填充自
csi-kms-connection-details
ConfigMap 中的连接详情。- 从下拉菜单中选择 Provider。
- 从列表中选择给定供应商的 Key service。
创建新的 KMS 连接 :这仅适用于
vaulttoken
和Thales CipherTrust Manager (using KMIP)
。选择以下 Key Management Service Provider 之一并提供所需详情。
Vault
- 输入唯一的连接名称 , Vault 服务器的主机地址('https://<hostname 或 ip>'),端口号和令牌。
展开 Advanced Settings,以根据您的
Vault
配置输入其他设置和证书详情:- 在 后端路径中输入为 OpenShift Data Foundation 专用且唯一的 Key Value secret 路径。
- (可选)输入 TLS 服务器名称和 Vault Enterprise 命名空间。
- 上传对应的 PEM 编码证书文件,以提供 CA 证书、客户端证书和客户端私钥。
- 点击 Save。
Thales CipherTrust Manager (using KMIP)
- 输入一个唯一的连接名称。
- 在 Address 和 Port 部分中,输入 Thales CipherTrust Manager 的 IP 以及在其中启用了 KMIP 接口的端口。例如,Address: 123.34.3.2, Port: 5696。
- 上传 客户端证书、CA 证书和 客户端私钥。
- 输入在上面生成的用于加密和解密的密钥的唯一标识符。
-
TLS Server 字段是可选的,并在没有 KMIP 端点的 DNS 条目时使用。例如,
kmip_all_<port>.ciphertrustmanager.local
。
Azure Key Vault (仅适用于 Azure 平台上的 Azure 用户)
有关设置客户端身份验证和获取客户端凭证的详情,请参考 使用 Microsoft Azure 部署 OpenShift Data Foundation 指南中的创建 OpenShift Data Foundation 集群 的先决条件部分。
- 在项目中输入密钥管理服务的唯一 连接名称。
- 输入 Azure Vault URL。
- 输入 客户端 ID。
- 输入 租户 ID。
-
以
.PEM
格式上传证书文件,并且证书文件必须包含客户端证书和私钥。
- 点击 Save。
- 点 Create。
如果 HashiCorp Vault 设置不允许自动检测后端路径使用的 Key/Value(KV)secret 引擎 API 版本,编辑 ConfigMap 以添加
vaultBackend
参数。注意vaultBackend
是一个可选参数,添加到configmap
中,以指定与后端路径关联的 KV secret 引擎 API 版本。确保值与为后端路径设置的 KV secret 引擎 API 版本匹配,否则可能会导致持久性卷声明(PVC)创建过程中失败。识别新创建的存储类使用的 encryptionKMSID。
-
在 OpenShift Web 控制台中,导航到 Storage
Storage Classes。 -
点 Storage class name
YAML 标签页。 捕获存储类使用的 encryptionKMSID。
Example:
encryptionKMSID: 1-vault
encryptionKMSID: 1-vault
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
在 OpenShift Web 控制台中,导航到 Storage
-
在 OpenShift Web 控制台中,导航到 Workloads
ConfigMaps。 - 要查看 KMS 连接详情,请单击点击 csi-kms-connection-details。
编辑 ConfigMap。
-
点击 Action 菜单 (⋮)
Edit ConfigMap。 根据之前标识的
encryptionKMSID
配置的后端,添加vaultBackend
参数。您可以为 KV secret engine API 版本 1 分配
kv
,为 KV secret engine API 版本 2 分配kv-v2
。Example:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 点 Save
-
点击 Action 菜单 (⋮)
后续步骤
存储类可用于创建加密的持久性卷。如需更多信息,请参阅管理持久性卷声明。
重要红帽与技术合作伙伴合作,将本文档作为为客户提供服务。但是,红帽不为 HashiCorp 产品提供支持。有关此产品的技术协助,请联系 HashiCorp。
2.2.2.1. 使用租户 ConfigMap 覆盖 Vault 连接详情 复制链接链接已复制到粘贴板!
可以通过在 Openshift 命名空间中创建 ConfigMap 来为每个租户重新配置 Vault 连接详情,其配置选项与 openshift-storage
命名空间中的 csi-kms-connection-details
ConfigMap 中设置的值不同。ConfigMap 需要位于租户命名空间中。租户命名空间中的 ConfigMap 中的值将覆盖在该命名空间中创建的加密持久性卷的 csi-kms-connection-details
ConfigMap 中设置的值。
流程
- 确保您位于租户命名空间中。
-
点 Workloads
ConfigMaps。 - 点 Create ConfigMap。
以下是 yaml 示例。给定租户命名空间要覆盖的值可以在
data
部分下指定,如下所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 编辑 yaml 后,点 Create。