如何防止使用具有升级权限的 ServiceAccount 启动 Kubernetes pod?

如何防止使用具有升级权限的 ServiceAccount 启动 Kubernetes pod?

这不可能做到吗?根据文档:

系统管理员在授予 Pod 创建权限时要小心谨慎。被授予在命名空间中创建 Pod(或创建 Pod 的控制器)权限的用户可以:读取命名空间中的所有机密;读取命名空间中的所有配置映射;以及模拟命名空间中的任何服务帐户并执行该帐户可以执行的任何操作。无论授权模式如何,这都适用。

https://kubernetes.io/docs/reference/access-authn-authz/authorization/#privilege-escalation-via-pod-creation

我希望用户能够创建 Pod,但如果他们在 Pod 规范中指定的 ServiceAccount 拥有比他们更多的权限,则禁止该操作。更好的是,即使他们拥有 Pod 创建权限,也不应该允许他们在没有额外特殊权限的情况下指定 ServiceAccount。

有什么方法可以实现我的目标吗?

答案1

您需要使用准入插件来控制 pod 规格、卷以及允许的图像。

Pod 安全策略准入插件可以让你控制 Pod 规范可以包含哪些卷和权限,以及ImagePolicyWebhook准入插件可以让你控制你的 pod 可以运行哪些镜像:

Pod 安全策略是一种集群级资源,用于控制 Pod 规范的安全敏感方面。这些 PodSecurityPolicy对象定义了 Pod 必须满足的一组条件,才能被系统接受,以及相关字段的默认值。

准入ImagePolicyWebhook控制器允许后端 webhook 做出准入决定。

通过上述方法,您可以通过控制 pod 规范的安全敏感属性来阻止特权 pod 启动并控制权限提升。

编辑:

如果无法避免在 Pod 上安装特权服务帐户,强烈建议为其授予尽可能最小的权限。还建议检查整个环境中的权限并删除不必要的权限。

为了找到环境中任何有风险的权限,你可以使用KubiScan

用于扫描 Kubernetes 集群以查找 Kubernetes 基于角色的访问控制 (RBAC) 授权模型中的危险权限的工具。

相关内容