如何管理K8中的服务帐户令牌使用情况?

问题描述

在Kubernetes中创建ServiceAccount时,也会创建一个秘密。此机密包含ServiceAccountToken。此令牌可以在CI管道中使用,甚至可以在kubectl和其他访问群集的地方使用。 假设公司中的开发人员为自己复制了此令牌(没人知道),并且在他离开公司后,他仍然可以访问我们的Kubernetes集群。我想限制他的访问权限。我该怎么办?

解决方法

从安全的角度来看,使用服务帐户从群集外部使用kubectl或CI / CD系统与kubernetes群集进行交互并不是最佳方法。您应该使用authenticating proxy,其中将短暂​​JWT令牌的生成和轮换委托给外部OpenId / oAuth投诉授权系统。

服务帐户只能在群集中运行的Pod中使用,并且可以通过RBAC角色和角色绑定来限制服务帐户的授权。请记住,当前服务帐户令牌不会被kubernetes轮换。

,

假设公司中的开发人员为自己复制此令牌(没有人知道),并且在他离开公司后,他仍然可以访问我们的Kubernetes集群。我想限制他的访问权限。我该怎么办?

是的,这是您必须减轻的风险。

在Kubernetes中,您现在可以使用仅在短时间内有效的令牌,例如一小时。如果可以,请使用Service Account from a projected volume。另请参见No more forever tokens。实际上,从安全的角度来看,我认为这是大多数服务帐户使用的更好方法。

如果您使用Kubernetes原生CI / CD管道,例如通过使用Tekton,您可以使用定期更新的这些较新的令牌进行部署。

如果您是从群集外部部署的,则@Arghya Sadhu通过使用身份验证代理提供了一个不错的选择。

在云提供商处使用Kubernetes吗?

如果您在云提供商处使用Kubernetes并从集群外部的CI / CD进行部署,它们通常具有联合身份解决方案,例如AWS IAM roles for EKS service accountsGoogle Workload Identity for GKE