2.3. 使用 Kubernetes 身份验证方法通过 KMS 启用集群范围的加密
您可以使用密钥管理系统(KMS)为集群范围的加密启用 Kubernetes 验证方法。
先决条件
- 管理员对 Vault 的访问权限。
- 有效的 Red Hat OpenShift Data Foundation 高级订阅。如需更多信息,请参阅 OpenShift Data Foundation 订阅中的知识库文章。
- OpenShift Data Foundation 操作器必须从 Operator Hub 安装。
-
仔细选择唯一路径名称作为后端
路径
,请仔细选择命名规则。您不能在以后更改此路径名称。
流程
创建服务帐户:
oc -n openshift-storage create serviceaccount <serviceaccount_name>
$ oc -n openshift-storage create serviceaccount <serviceaccount_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中,
<serviceaccount_name>
指定服务帐户的名称。例如:
oc -n openshift-storage create serviceaccount odf-vault-auth
$ oc -n openshift-storage create serviceaccount odf-vault-auth
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建
clusterrolebindings
和clusterroles
:oc -n openshift-storage create clusterrolebinding vault-tokenreview-binding --clusterrole=system:auth-delegator --serviceaccount=openshift-storage:_<serviceaccount_name>_
$ oc -n openshift-storage create clusterrolebinding vault-tokenreview-binding --clusterrole=system:auth-delegator --serviceaccount=openshift-storage:_<serviceaccount_name>_
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例如:
oc -n openshift-storage create clusterrolebinding vault-tokenreview-binding --clusterrole=system:auth-delegator --serviceaccount=openshift-storage:odf-vault-auth
$ oc -n openshift-storage create clusterrolebinding vault-tokenreview-binding --clusterrole=system:auth-delegator --serviceaccount=openshift-storage:odf-vault-auth
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为
serviceaccount
令牌和 CA 证书创建 secret。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中,
<serviceaccount_name>
是上一步中创建的服务帐户。从 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)
$ 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 Copied! Toggle word wrap Toggle overflow 检索 OCP 集群端点。
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 获取服务帐户签发者:
oc proxy & proxy_pid=$! issuer="$( curl --silent http://127.0.0.1:8001/.well-known/openid-configuration | jq -r .issuer)" kill $proxy_pid
$ 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 Copied! Toggle word wrap Toggle overflow 使用上一步中收集的信息在 Vault 中设置 Kubernetes 身份验证方法:
vault auth enable kubernetes
$ vault auth enable kubernetes
Copy to Clipboard Copied! Toggle word wrap Toggle overflow vault write auth/kubernetes/config \ token_reviewer_jwt="$SA_JWT_TOKEN" \ kubernetes_host="$OCP_HOST" \ kubernetes_ca_cert="$SA_CA_CRT" \ issuer="$issuer"
$ 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 Copied! Toggle word wrap Toggle overflow 重要当签发者为空时,在 Vault 中配置 Kubernetes 验证方法:
vault write auth/kubernetes/config \ token_reviewer_jwt="$SA_JWT_TOKEN" \ kubernetes_host="$OCP_HOST" \ kubernetes_ca_cert="$SA_CA_CRT"
$ 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 中启用 Key/Value(KV)后端路径。
对于 Vault KV secret 引擎 API,版本 1:
vault secrets enable -path=odf kv
$ vault secrets enable -path=odf kv
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 对于 Vault KV secret 引擎 API,版本 2:
vault secrets enable -path=odf kv-v2
$ vault secrets enable -path=odf kv-v2
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建策略来限制用户在 secret 上执行
写入
或删除
操作:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 生成角色:
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
$ 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 Copied! Toggle word wrap Toggle overflow 在创建存储系统期间配置 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
$ 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 Copied! Toggle word wrap Toggle overflow
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
$ oc get namespace default
NAME STATUS AGE
default Active 5d2h
oc annotate namespace default "keyrotation.csiaddons.openshift.io/schedule=@weekly"
$ oc annotate namespace default "keyrotation.csiaddons.openshift.io/schedule=@weekly"
namespace/default annotated
注解 StorageClass
oc get storageclass rbd-sc
$ oc get storageclass rbd-sc
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
rbd-sc rbd.csi.ceph.com Delete Immediate true 5d2h
oc annotate storageclass rbd-sc "keyrotation.csiaddons.openshift.io/schedule=@weekly"
$ oc annotate storageclass rbd-sc "keyrotation.csiaddons.openshift.io/schedule=@weekly"
storageclass.storage.k8s.io/rbd-sc annotated
注解 PersistentVolumeClaim
oc get pvc data-pvc
$ 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
oc annotate pvc data-pvc "keyrotation.csiaddons.openshift.io/schedule=@weekly"
$ oc annotate pvc data-pvc "keyrotation.csiaddons.openshift.io/schedule=@weekly"
persistentvolumeclaim/data-pvc annotated
oc get encryptionkeyrotationcronjobs.csiaddons.openshift.io
$ oc get encryptionkeyrotationcronjobs.csiaddons.openshift.io
NAME SCHEDULE SUSPEND ACTIVE LASTSCHEDULE AGE
data-pvc-1642663516 @weekly 3s
oc annotate pvc data-pvc "keyrotation.csiaddons.openshift.io/schedule=*/1 * * * *" --overwrite=true
$ oc annotate pvc data-pvc "keyrotation.csiaddons.openshift.io/schedule=*/1 * * * *" --overwrite=true
persistentvolumeclaim/data-pvc annotated
oc get encryptionkeyrotationcronjobs.csiaddons.openshift.io
$ oc get encryptionkeyrotationcronjobs.csiaddons.openshift.io
NAME SCHEDULE SUSPEND ACTIVE LASTSCHEDULE AGE
data-pvc-1642664617 */1 * * * * 3s
2.3.1.2. 禁用密钥轮转 复制链接链接已复制到粘贴板!
您可以为以下内容禁用密钥轮转:
- 所有存储类的持久性卷声明(PVC)
- 特定的 PVC
为存储类的所有 PVC 禁用密钥轮转
要禁用所有 PVC 的密钥轮转,请更新存储类的注解:
oc get storageclass rbd-sc
$ oc get storageclass rbd-sc
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
rbd-sc rbd.csi.ceph.com Delete Immediate true 5d2h
oc annotate storageclass rbd-sc "keyrotation.csiaddons.openshift.io/enable: false"
$ oc annotate storageclass rbd-sc "keyrotation.csiaddons.openshift.io/enable: false"
storageclass.storage.k8s.io/rbd-sc annotated
为特定持久性卷声明禁用密钥轮转
为您要禁用密钥轮转的 PVC 识别
EncryptionKeyRotationCronJob
CR:oc get encryptionkeyrotationcronjob -o jsonpath='{range .items[?(@.spec.jobTemplate.spec.target.persistentVolumeClaim=="<PVC_NAME>")]}{.metadata.name}{"\n"}{end}'
$ oc get encryptionkeyrotationcronjob -o jsonpath='{range .items[?(@.spec.jobTemplate.spec.target.persistentVolumeClaim=="<PVC_NAME>")]}{.metadata.name}{"\n"}{end}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中
<PVC_NAME
> 是您要禁用的 PVC 名称。将以下内容应用到上一步中的
EncryptionKeyRotationCronJob
CR,以禁用密钥轮转:将
csiaddons.openshift.io/state
注解从managed
更新到unmanaged
:oc annotate encryptionkeyrotationcronjob <encryptionkeyrotationcronjob_name> "csiaddons.openshift.io/state=unmanaged" --overwrite=true
$ oc annotate encryptionkeyrotationcronjob <encryptionkeyrotationcronjob_name> "csiaddons.openshift.io/state=unmanaged" --overwrite=true
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中 <encryptionkeyrotationcronjob_name> 是
EncryptionKeyRotationCronJob
CR 的名称。在
spec
字段中添加suspend: true
:oc patch encryptionkeyrotationcronjob <encryptionkeyrotationcronjob_name> -p '{"spec": {"suspend": true}}' --type=merge.
$ oc patch encryptionkeyrotationcronjob <encryptionkeyrotationcronjob_name> -p '{"spec": {"suspend": true}}' --type=merge.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
- 保存并退出。PVC 将禁用密钥轮转。