回答

回答

在用户的证书签名请求 API 对象中,您必须指定一个组。

apiVersion: certificates.k8s.io/v1

kind: CertificateSigningRequest

metadata:

  name: myname

spec:

  groups:

  - system:authenticated

  request: someCertFile

  usages:

  - digital signature

  - key encipherment

  - server auth

我知道集群中的某些证书​​(例如 kubelet)必须使用此组来区分它们在集群中的角色。我相信 kubelet 的证书组是 nodes:nodename 或类似的名称。

但从用户的角度来看,这实际上意味着什么?我在这个问题上找到的唯一内容是 k8s 文档中的简短提及:https://kubernetes.io/docs/reference/access-authn-authz/certificate-signing-requests/#kubernetes-signers

答案1

回答

在了解到它与 RBAC 的相关性后,我发现组也可以在角色绑定中引用,并用于对主题组进行身份验证。 https://kubernetes.io/docs/reference/access-authn-authz/rbac/#referring-to-subjects

我还在这里发现了一些默认组:https://kubernetes.io/docs/reference/access-authn-authz/rbac/#discovery-roles

新问题,也得到了(某种程度上)的回答

证书中的组可以代替角色和角色绑定来访问集群中的某些项目吗?

是的,Kubernetes 使用用于访问集群的主题 TLS 证书来确定用户名,并通过 RBAC 或其他身份验证机制确定对帐户的访问级别。请参阅此链接: https://kubernetes.io/docs/reference/access-authn-authz/authentication/#users-in-kubernetes

据我所知https://kubernetes.io/docs/reference/access-authn-authz/rbac/#referring-to-subjects 群组基本上就是一组主题。如果我错了,请随时纠正我,但我认为这意味着如果您在 CSR 中指定群组,您可以通过 TLS 身份验证访问该群组有权访问的任何内容。

答案2

查看文档

groups 包含创建了 CertificationSigningRequest 的用户的组成员身份。由 API 服务器在创建时填充,且不可改变。

因此,这与证书中用户的组成员身份无关。要创建包含组的用户证书,请将组名称作为组织名称添加到证书请求中,关联

openssl req -new -key jbeda.pem -out jbeda-csr.pem -subj "/CN=jbeda/O=app1/O=app2"

结果:jbeda用户拥有app1app2会员资格

相关内容