第 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。

  1. 在 OpenShift Container Platform web 控制台中进入 Workloads Secrets
  2. Create Key/value secret
  3. 输入 Secret Name 作为 ceph-csi-kms-token
  4. 输入 Key 作为 token
  5. 输入 Value

    它是来自 Vault 的令牌。您可以单击 Browse 来选择并上传含有令牌的文件,或者直接在文本框中输入令牌。

  6. Create
注意

只有在所有使用 ceph-csi-kms-token 的加密 PVC 已被删除后,才能删除令牌。

先决条件

  1. 如果 KMIP 客户端不存在,请创建一个。在用户界面中,选择 KMIP Client Profile Add Profile

    1. 在创建配置集的过程中,将 CipherTrust 用户名添加到 Common Name 字段中。
  2. 通过进入到 KMIP Registration Token New Registration Token 来创建令牌。为下一步复制令牌。
  3. 要注册客户端,请进入到 KMIP Registered Clients Add Client。指定名称。粘贴上一步中的注册令牌,然后点保存
  4. Save Private KeySave Certificate 下载私钥和客户端证书。
  5. 要创建新的 KMIP 接口,请进入到 Admin Settings Interfaces Add Interface

    1. 选择 KMIP Key Management Interoperability Protocol 并点 Next
    2. 选择一个空闲端口
    3. Network Interface 选择 all
    4. Interface Mode 选择 TLS, verify client cert, user name taken from client cert, auth request is optional
    5. (可选)您可以在密钥被删除时启用硬删除以删除元数据和材料。它默认是禁用的。
    6. 选择要使用的 CA,然后点 Save
  6. 要获取服务器 CA 证书,请点新创建的界面右侧的 Action 菜单(⋮),然后点 Download Certificate

流程

  1. 要创建一个密钥以充当 storageclass 加密的 KEK(Key Encryption Key),请按照以下步骤执行:

    1. 进入到 Keys Add Key
    2. 输入 Key Name
    3. 分别将 AlgorithmSize 设置为 AES256
    4. 启用 Create a key in Pre-Active state,并设置激活的日期和时间。
    5. 确保在 Key Usage 下启用了 EncryptDecrypt
    6. 复制新创建的密钥的 ID,以在部署过程中用作唯一标识符。

3.1.3. 使用 vaulttenantsa 配置对 KMS 的访问

先决条件

  • OpenShift 数据基础集群处于 Ready 状态。
  • 在外部密钥管理系统 (KMS) 上,

    • 确保策略存在,并且已启用 Vault 中的键值后端路径。
    • 确保您在 Vault 服务器上使用签名的证书。
  • 在租户命名空间中创建以下 serviceaccount,如下所示:

    $ cat <<EOF | oc create -f -
    apiVersion: v1
    kind: ServiceAccount
    metadata:
        name: ceph-csi-vault-sa
    EOF
    Copy to Clipboard Toggle word wrap

流程

在 OpenShift Data Foundation 使用 Vault 进行身份验证之前,您需要配置 Kubernetes 身份验证方法。以下说明创建并配置 serviceAccountClusterRole 和 ClusterRoleBinding ,以允许 OpenShift Data Foundation 使用 Vault 进行身份验证。

  1. 将以下 YAML 应用到您的 Openshift 集群:

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: rbd-csi-vault-token-review
    ---
    kind: ClusterRole
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: rbd-csi-vault-token-review
    rules:
      - apiGroups: ["authentication.k8s.io"]
        resources: ["tokenreviews"]
        verbs: ["create", "get", "list"]
    
    ---
    kind: ClusterRoleBinding
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: rbd-csi-vault-token-review
    subjects:
      - kind: ServiceAccount
        name: rbd-csi-vault-token-review
        namespace: openshift-storage
    roleRef:
      kind: ClusterRole
      name: rbd-csi-vault-token-review
      apiGroup: rbac.authorization.k8s.io
    Copy to Clipboard Toggle word wrap
  2. 为 serviceaccount 令牌和 CA 证书创建 secret。

    $ cat <<EOF | oc create -f -
    apiVersion: v1
    kind: Secret
    metadata:
      name: rbd-csi-vault-token-review-token
      namespace: openshift-storage
      annotations:
        kubernetes.io/service-account.name: "rbd-csi-vault-token-review"
    type: kubernetes.io/service-account-token
    data: {}
    EOF
    Copy to Clipboard Toggle word wrap
  3. 从 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)
    Copy to Clipboard Toggle word wrap
  4. 检索 OpenShift 集群端点。

    $ OCP_HOST=$(oc config view --minify --flatten -o jsonpath="{.clusters[0].cluster.server}")
    Copy to Clipboard Toggle word wrap
  5. 使用前面步骤中收集的信息在 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"
    Copy to Clipboard Toggle word wrap
  6. 在 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 Toggle word wrap

    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:

    apiVersion: v1
    data:
      vault-tenant-sa: |-
        {
          "encryptionKMSType": "vaulttenantsa",
          "vaultAddress": "<https://hostname_or_ip_of_vault_server:port>",
          "vaultTLSServerName": "<vault TLS server name>",
          "vaultAuthPath": "/v1/auth/kubernetes/login",
          "vaultAuthNamespace": "<vault auth namespace name>"
          "vaultNamespace": "<vault namespace name>",
          "vaultBackendPath": "<vault backend path name>",
          "vaultCAFromSecret": "<secret containing CA cert>",
          "vaultClientCertFromSecret": "<secret containing client cert>",
          "vaultClientCertKeyFromSecret": "<secret containing client private key>",
          "tenantSAName": "<service account name in the tenant namespace>"
        }
    metadata:
      name: csi-kms-connection-details
    Copy to Clipboard Toggle word wrap

    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。如果要使用其他名称,则必须相应地设置此变量。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat