2.3. 使用 Kubernetes 身份验证方法通过 KMS 启用集群范围的加密
要使用 KMS 为集群范围加密启用 Kubernetes 验证方法,请按照以下步骤执行:
先决条件
- 管理员对 Vault 的访问权限。
- OpenShift Data Foundation 操作器必须从 Operator Hub 安装。
仔细选择唯一路径名称作为遵循命名惯例的后端
路径,因为它无法在以后更改。注意OpenShift Data Foundation 4.10 中的 Kubernetes 验证方法不支持 Vault 命名空间
流程
创建一个服务帐户。
$ oc -n openshift-storage create serviceaccount <SA_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:<SA_NAME>例如:
$ oc -n openshift-storage create clusterrolebinding vault-tokenreview-binding --clusterrole=system:auth-delegator --serviceaccount=openshift-storage:odf-vault-auth识别与上面创建的 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 odf-vault-auth -o jsonpath="{.secrets[*]['name']}" | grep -o "[^[:space:]]*-token-[^[:space:]]*")从用于访问 TokenReview API 的 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)检索 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"重要在第 6 步中的签发者为空时在 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 engine API,版本 1。
$ vault secrets enable -path=odf kv对于 Vault KV secret engine API,版本 2。
$ vault secrets enable -path=odf kv-v2使用以下命令,创建一个策略来限制用户对机密执行写入或删除操作。
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