2.4. 使用 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>
其中,
<serviceaccount_name>
指定服务帐户的名称。例如:
$ oc -n openshift-storage create serviceaccount odf-vault-auth
创建
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:odf-vault-auth
为
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
其中,
<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)
检索 OCP 集群端点。
$ OCP_HOST=$(oc config view --minify --flatten -o jsonpath="{.clusters[0].cluster.server}")
获取服务帐户签发者:
$ oc proxy & $ proxy_pid=$! $ issuer="$( curl --silent http://127.0.0.1:8001/.well-known/openid-configuration | jq -r .issuer)" $ kill $proxy_pid
使用上一步中收集的信息在 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" \ issuer="$issuer"
重要当签发者为空时,在 Vault 中配置 Kubernetes 验证方法:
$ vault write auth/kubernetes/config \ token_reviewer_jwt="$SA_JWT_TOKEN" \ kubernetes_host="$OCP_HOST" \ kubernetes_ca_cert="$SA_CA_CRT"
在 Vault 中启用 Key/Value(KV)后端路径。
对于 Vault KV secret 引擎 API,版本 1:
$ vault secrets enable -path=odf kv
对于 Vault KV secret 引擎 API,版本 2:
$ vault secrets enable -path=odf kv-v2
创建策略来限制用户在 secret 上执行
写入
或删除
操作:echo ' path "odf/*" { capabilities = ["create", "read", "update", "delete", "list"] } path "sys/mounts" { capabilities = ["read"] }'| vault policy write odf -
生成角色:
$ 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
在创建存储系统期间配置 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