PodSecurityPolicy(简称PSP)是Kubernetes中Pod部署时重要的安全校验手段,能够有效地约束应用运行时行为安全。本文主要介绍如何创建、管理和绑定PSP策略。
前提条件
- 创建一个Kubernetes托管版或专有版集群,且集群版本至少为1.14.8-aliyun.1,请参见创建Kubernetes托管版集群。
- 以主账号登录控制台,或赋予子账号管理员权限,请参见配置子账号RBAC权限,然后以子账号登录控制台。
背景信息
在Kubernetes Pod定义中,可以通过设定安全参数来约束应用容器运行时的行为。作为集群的管理员,则会希望在集群的安全纵深防护中具有像AppArmor,SELinux这样的策略引擎,能够在应用部署时对应用Pod进行强制的安全校验,而PSP正是这样的解决方案。
- 强制校验:PSP是Kubernetes原生的集群维度资源模型,通过API server的admission准入机制,在应用部署时刻对Pod的安全参数进行强制校验。如果参数配置不满足指定PSP策略的定义,API server会禁止该Pod的部署请求。
- PSP策略的RBAC绑定:创建PSP策略,需要开启PSP对应的admission plugin,同时建立指定Pod部署凭证对PSP策略的使用权限的RBAC绑定。
- 开启PSP特性:当前ACK新创建的托管和专有集群默认开启PSP特性,减少开启PSP带来的运维工作。
- 权限最小化原则:为了保证集群使用上的兼容性,默认给所有合法认证用户绑定了一个ack.privileged的特权策略,而在PSP的实际应用场景中,我们希望策略遵循权限最小化的安全原则,比如禁止部分用户部署特权容器,只能使用只读的根文件系统,或者只能挂载指定范围的host目录。
创建PSP策略
绑定PSP策略
您需要给应用部署者赋予相应的PSP策略使用权限,否则如果开启了PSP特性且应用部署者没有绑定任何的PSP策略(已经删除了默认特权绑定),部署的Pod会遇到以下错误。
Error from server (Forbidden): error when creating xxx: pods "xxx" is forbidden: unable to validate against any pod security policy: []
您可以对指定用户的服务账号或某个命名空间下的服务账号绑定PSP策略。- 登录容器服务管理控制台。
- 在控制台左侧导航栏中,单击集群。
- 在集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情。
- 在集群详情页面选择 。
- 选择策略绑定页签,单击新增绑定规则。
- 在新增绑定规则编辑框中设置命名空间、服务账号、绑定策略。
- 单击确定。
解除默认绑定
为了使用已经创建的PSP策略和绑定的约束能力,您需要删除默认的特权绑定。
- 为了确保系统组件和已部署应用的正常运行,在解除默认特权绑定的同时,后台会自动给kube-system命名空间下的所有serviceaccount对象和系统默认的system:nodes用户组绑定特权策略的使用权限,以确保系统组件的正常工作。
- 对于已经存在的命名空间,如果在命名空间下您没有通过策略管理控制台创建任何的PSP策略绑定,后台会给该命名空间下的所有serviceaccount对象绑定特权策略的使用权限,以确保该命名空间中已有应用的正常启动。
注意
- 对于已经在控制台创建了策略绑定的命名空间。
为了使策略绑定的约束能力生效,在解除绑定时后台不会自动创建该命名空间下的特权策略绑定,因此在解除绑定前请您务必确认PSP策略和绑定的正确性。
- 对于新创建的命名空间。
容器服务Kubernetes版后台不会自动为新命名空间下的serviceaccount对象创建对应的特权策略绑定,请您在新命名空间创建后及时创建对应的PSP策略和绑定对象。
- 登录容器服务管理控制台。
- 在控制台左侧导航栏中,单击集群。
- 在集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情。
- 在集群详情页面选择 。
- 在策略管理使用引导区域中单击解除默认绑定。
- 在解绑对话框中单击确定。
确保PSP的admission controller为开启状态
当前ACK新建的集群默认开启了PSP的admission controller。然而对于运行中的已有集群,为了使上述PSP操作生效,我们需要确保集群API server的PSP admission controller为开启状态。
执行结果
下面将通过示例展示PSP策略管理的应用以及具体的安全校验应用效果。
在文档使用中是否遇到以下问题
更多建议
匿名提交