2.3. 使用 Kubernetes 身份验证方法通过 KMS 启用集群范围的加密


您可以使用密钥管理系统(KMS)为集群范围的加密启用 Kubernetes 验证方法。

先决条件

  • 管理员对 Vault 的访问权限。
  • 有效的 Red Hat OpenShift Data Foundation 高级订阅。如需更多信息,请参阅 OpenShift Data Foundation 订阅中的知识库文章
  • OpenShift Data Foundation 操作器必须从 Operator Hub 安装。
  • 仔细选择唯一路径名称作为后端 路径,请仔细选择命名规则。您不能在以后更改此路径名称。

流程

  1. 创建服务帐户:

    $ oc -n openshift-storage create serviceaccount <serviceaccount_name>
    Copy to Clipboard Toggle word wrap

    其中, <serviceaccount_name> 指定服务帐户的名称。

    例如:

    $ oc -n openshift-storage create serviceaccount odf-vault-auth
    Copy to Clipboard Toggle word wrap
  2. 创建 clusterrolebindingsclusterroles:

    $ oc -n openshift-storage create clusterrolebinding vault-tokenreview-binding --clusterrole=system:auth-delegator --serviceaccount=openshift-storage:_<serviceaccount_name>_
    Copy to Clipboard Toggle word wrap

    例如:

    $ oc -n openshift-storage create clusterrolebinding vault-tokenreview-binding --clusterrole=system:auth-delegator --serviceaccount=openshift-storage:odf-vault-auth
    Copy to Clipboard Toggle word wrap
  3. serviceaccount 令牌和 CA 证书创建 secret。

    $ cat <<EOF | oc create -f -
    apiVersion: v1
    kind: Secret
    metadata:
      name: odf-vault-auth-token
      namespace: openshift-storage
      annotations:
        kubernetes.io/service-account.name: <serviceaccount_name>
    type: kubernetes.io/service-account-token
    data: {}
    EOF
    Copy to Clipboard Toggle word wrap

    其中,<serviceaccount_name> 是上一步中创建的服务帐户。

  4. 从 secret 获取令牌和 CA 证书。

    $ SA_JWT_TOKEN=$(oc -n openshift-storage get secret odf-vault-auth-token -o jsonpath="{.data['token']}" | base64 --decode; echo)
    $ SA_CA_CRT=$(oc -n openshift-storage get secret odf-vault-auth-token -o jsonpath="{.data['ca\.crt']}" | base64 --decode; echo)
    Copy to Clipboard Toggle word wrap
  5. 检索 OCP 集群端点。

    $ OCP_HOST=$(oc config view --minify --flatten -o jsonpath="{.clusters[0].cluster.server}")
    Copy to Clipboard Toggle word wrap
  6. 获取服务帐户签发者:

    $ oc proxy &
    $ proxy_pid=$!
    $ issuer="$( curl --silent http://127.0.0.1:8001/.well-known/openid-configuration | jq -r .issuer)"
    $ kill $proxy_pid
    Copy to Clipboard Toggle word wrap
  7. 使用上一步中收集的信息在 Vault 中设置 Kubernetes 身份验证方法:

    $ vault auth enable kubernetes
    Copy to Clipboard Toggle word wrap
    $ vault write auth/kubernetes/config \
              token_reviewer_jwt="$SA_JWT_TOKEN" \
              kubernetes_host="$OCP_HOST" \
              kubernetes_ca_cert="$SA_CA_CRT" \
              issuer="$issuer"
    Copy to Clipboard Toggle word wrap
    重要

    当签发者为空时,在 Vault 中配置 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
  8. 在 Vault 中启用 Key/Value(KV)后端路径。

    对于 Vault KV secret 引擎 API,版本 1:

    $ vault secrets enable -path=odf kv
    Copy to Clipboard Toggle word wrap

    对于 Vault KV secret 引擎 API,版本 2:

    $ vault secrets enable -path=odf kv-v2
    Copy to Clipboard Toggle word wrap
  9. 创建策略来限制用户在 secret 上执行写入删除操作:

    echo '
    path "odf/*" {
      capabilities = ["create", "read", "update", "delete", "list"]
    }
    path "sys/mounts" {
    capabilities = ["read"]
    }'| vault policy write odf -
    Copy to Clipboard Toggle word wrap
  10. 生成角色:

    $ vault write auth/kubernetes/role/odf-rook-ceph-op \
            bound_service_account_names=rook-ceph-system,rook-ceph-osd,noobaa \
            bound_service_account_namespaces=openshift-storage \
            policies=odf \
            ttl=1440h
    Copy to Clipboard Toggle word wrap

    在创建存储系统期间配置 KMS 连接详情时,会稍后使用角色 odf-rook-ceph-op

    $ vault write auth/kubernetes/role/odf-rook-ceph-osd \
            bound_service_account_names=rook-ceph-osd \
            bound_service_account_namespaces=openshift-storage \
            policies=odf \
            ttl=1440h
    Copy to Clipboard Toggle word wrap

2.3.1. 在使用 KMS 时启用和禁用密钥轮转

安全常见实践需要定期加密密钥轮转。在使用 KMS 时,您可以启用或禁用密钥轮转。

2.3.1.1. 启用密钥轮转

要启用密钥轮转,请将注解 keyrotation.csiaddons.openshift.io/schedule: <value> 添加到 PersistentVolumeClaims ,Namespace, 或 StorageClass (以优先级顺序减少)。

<value > 可以是 @hourly@daily@weekly@monthly@yearly。如果 <value > 为空,则默认为 @weekly。以下示例使用 @weekly

重要

只支持 RBD 支持的卷的密钥轮转。

注解命名空间

$ oc get namespace default
NAME      STATUS   AGE
default   Active   5d2h
Copy to Clipboard Toggle word wrap
$ oc annotate namespace default "keyrotation.csiaddons.openshift.io/schedule=@weekly"
namespace/default annotated
Copy to Clipboard Toggle word wrap

注解 StorageClass

$ oc get storageclass rbd-sc
NAME       PROVISIONER        RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
rbd-sc     rbd.csi.ceph.com   Delete          Immediate           true                   5d2h
Copy to Clipboard Toggle word wrap
$ oc annotate storageclass rbd-sc "keyrotation.csiaddons.openshift.io/schedule=@weekly"
storageclass.storage.k8s.io/rbd-sc annotated
Copy to Clipboard Toggle word wrap

注解 PersistentVolumeClaim

$ oc get pvc data-pvc
NAME      STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS      AGE
data-pvc  Bound    pvc-f37b8582-4b04-4676-88dd-e1b95c6abf74   1Gi        RWO            default           20h
Copy to Clipboard Toggle word wrap
$ oc annotate pvc data-pvc "keyrotation.csiaddons.openshift.io/schedule=@weekly"
persistentvolumeclaim/data-pvc annotated
Copy to Clipboard Toggle word wrap
$ oc get encryptionkeyrotationcronjobs.csiaddons.openshift.io
NAME                    SCHEDULE    SUSPEND   ACTIVE   LASTSCHEDULE   AGE
data-pvc-1642663516   @weekly                                     3s
Copy to Clipboard Toggle word wrap
$ oc annotate pvc data-pvc "keyrotation.csiaddons.openshift.io/schedule=*/1 * * * *" --overwrite=true
persistentvolumeclaim/data-pvc annotated
Copy to Clipboard Toggle word wrap
$ oc get encryptionkeyrotationcronjobs.csiaddons.openshift.io
NAME                  SCHEDULE    SUSPEND   ACTIVE   LASTSCHEDULE   AGE
data-pvc-1642664617   */1 * * * *                                   3s
Copy to Clipboard Toggle word wrap

2.3.1.2. 禁用密钥轮转

您可以为以下内容禁用密钥轮转:

  • 所有存储类的持久性卷声明(PVC)
  • 特定的 PVC

为存储类的所有 PVC 禁用密钥轮转

要禁用所有 PVC 的密钥轮转,请更新存储类的注解:

$ oc get storageclass rbd-sc
NAME       PROVISIONER        RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
rbd-sc     rbd.csi.ceph.com   Delete          Immediate           true                   5d2h
Copy to Clipboard Toggle word wrap
$ oc annotate storageclass rbd-sc "keyrotation.csiaddons.openshift.io/enable: false"
storageclass.storage.k8s.io/rbd-sc annotated
Copy to Clipboard Toggle word wrap

为特定持久性卷声明禁用密钥轮转

  1. 为您要禁用密钥轮转的 PVC 识别 EncryptionKeyRotationCronJob CR:

    $ oc get encryptionkeyrotationcronjob -o jsonpath='{range .items[?(@.spec.jobTemplate.spec.target.persistentVolumeClaim=="<PVC_NAME>")]}{.metadata.name}{"\n"}{end}'
    Copy to Clipboard Toggle word wrap

    其中 <PVC_NAME > 是您要禁用的 PVC 名称。

  2. 将以下内容应用到上一步中的 EncryptionKeyRotationCronJob CR,以禁用密钥轮转:

    1. csiaddons.openshift.io/state 注解从 managed 更新到 unmanaged

      $ oc annotate encryptionkeyrotationcronjob <encryptionkeyrotationcronjob_name> "csiaddons.openshift.io/state=unmanaged" --overwrite=true
      Copy to Clipboard Toggle word wrap

      其中 <encryptionkeyrotationcronjob_name> 是 EncryptionKeyRotationCronJob CR 的名称。

    2. spec 字段中添加 suspend: true

      $ oc patch encryptionkeyrotationcronjob <encryptionkeyrotationcronjob_name> -p '{"spec": {"suspend": true}}' --type=merge.
      Copy to Clipboard Toggle word wrap
  3. 保存并退出。PVC 将禁用密钥轮转。
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat