OpenShift Container Storage is now OpenShift Data Foundation starting with version 4.9.
2.3. 使用 Kubernetes 身份验证方法通过 KMS 启用集群范围的加密
您可以使用密钥管理系统(KMS)为集群范围的加密启用 Kubernetes 验证方法。
先决条件
- 管理员对 Vault 的访问权限。
- 有效的 Red Hat OpenShift Data Foundation 高级订阅。如需更多信息,请参阅 OpenShift Data Foundation 订阅中的知识库文章。
- OpenShift Data Foundation 操作器必须从 Operator Hub 安装。
选择唯一路径名称作为后端
路径,该路径
遵循命名约定,因为以后无法更改它。注意OpenShift Data Foundation 4.10 中的 Kubernetes 验证方法不支持 Vault 命名空间
流程
创建服务帐户:
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 根据 OpenShift Container Platform 版本,执行以下任一操作:
对于 OpenShift Container Platform 4.10:
识别与上面创建的 serviceaccount(SA)关联的 secret 名称。
VAULT_SA_SECRET_NAME=$(oc -n openshift-storage get sa <SA_NAME> -o jsonpath="{.secrets[*]['name']}") | grep -o "[^[:space:]]*-token-[^[:space:]]*"
$ VAULT_SA_SECRET_NAME=$(oc -n openshift-storage get sa <SA_NAME> -o jsonpath="{.secrets[*]['name']}") | grep -o "[^[:space:]]*-token-[^[:space:]]*"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例如:
VAULT_SA_SECRET_NAME=$(oc -n openshift-storage get sa odf-vault-auth -o jsonpath="{.secrets[*]['name']}" | grep -o "[^[:space:]]*-token-[^[:space:]]*")
$ VAULT_SA_SECRET_NAME=$(oc -n openshift-storage get sa odf-vault-auth -o jsonpath="{.secrets[*]['name']}" | grep -o "[^[:space:]]*-token-[^[:space:]]*")
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
对于 OpenShift Container Platform 4.11:
为
serviceaccount
令牌和 CA 证书创建 secret。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中,
<serviceaccount_name>
是上一步中创建的服务帐户。VAULT_SA_SECRET_NAME=odf-vault-auth-token
$ VAULT_SA_SECRET_NAME=odf-vault-auth-token
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
从 secret 获取令牌和 CA 证书。
SA_JWT_TOKEN=$(oc -n openshift-storage get secret "$VAULT_SA_SECRET_NAME" -o jsonpath="{.data.token}" | base64 --decode; echo) SA_CA_CRT=$(oc -n openshift-storage get secret "$VAULT_SA_SECRET_NAME" -o jsonpath="{.data['ca\.crt']}" | base64 --decode; echo)
$ SA_JWT_TOKEN=$(oc -n openshift-storage get secret "$VAULT_SA_SECRET_NAME" -o jsonpath="{.data.token}" | base64 --decode; echo) $ SA_CA_CRT=$(oc -n openshift-storage get secret "$VAULT_SA_SECRET_NAME" -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 验证方法,如下所示。
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 engine 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 engine 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