OpenShift Container Storage is now OpenShift Data Foundation starting with version 4.9.
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 <SA_NAME>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例如:
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:<SA_NAME>
$ oc -n openshift-storage create clusterrolebinding vault-tokenreview-binding --clusterrole=system:auth-delegator --serviceaccount=openshift-storage:<SA_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(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 从用于访问 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_JWT_TOKEN=$(oc -n openshift-storage get secret "$VAULT_SA_SECRET_NAME" -o jsonpath="{.data.token}" | base64 --decode; echo)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow SA_CA_CRT=$(oc -n openshift-storage get secret "$VAULT_SA_SECRET_NAME" -o jsonpath="{.data['ca\.crt']}" | 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 重要在第 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 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 使用以下命令,创建一个策略来限制用户对机密执行写入或删除操作。
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