注册集群能够提供更多符合K8s应用场景的策略规则,在规则配置上也更加灵活简单,帮助企业安全运维管理人员更好地使用策略治理相关能力。本文介绍如何在注册集群中安装策略治理组件及如何管理策略实例。
索引
背景信息
注册集群的容器安全策略相较于原PSP(PodSecurityPolicy)策略能够提供符合更多K8s应用场景的策略规则,在规则配置上也更加灵活简单,帮助企业安全运维管理人员更好地使用策略治理相关能力。
前提条件
已创建注册集群,且集群版本至少为1.16.9-aliyun.1,并将自建Kubernetes集群接入注册集群。具体操作,请参见创建注册集群并接入本地数据中心集群。
已在本地安装配置onectl。具体操作,请参见通过onectl管理注册集群。
如果您使用RAM账号进行策略管理,RAM账号需要拥有以下RAM授权条件。关于如何自定义RAM授权策略,请参见自定义RAM授权策略。
参数
说明
cs:DescribePolicies
列举策略治理规则库列表。
cs:DescribePoliceDetails
获取策略规则模板详情。
cs:DescribePolicyGovernanceInCluster
获取集群策略治理详情。
cs:DescribePolicyInstances
获取集群中当前部署的策略实例列表。
cs:DescribePolicyInstancesStatus
获取集群当前不同策略类型对应的实例部署状态。
cs:DeployPolicyInstance
在指定集群中部署策略规则实例。
cs:DeletePolicyInstance
在指定集群中删除策略规则实例。
cs:ModifyPolicyInstance
在指定集群中修改策略规则实例。
注意事项
仅支持1.16.9-aliyun.1及以上版本的注册集群。
当前仅适用于Linux节点。
当前不支持自定义策略规则,所有规则均来自于阿里云容器服务内置的规则库。
仅支持通过容器服务管理控制台的组件管理页面以及onectl方式安装gatekeeper组件。
如果集群中已通过其他途径安装gatekeeper组件,请您卸载后再通过组件管理安装gatekeeper组件。关于gatekeeper组件的版本发布信息,请参见gatekeeper。
安装策略治理组件
policy-template-controller组件为基于阿里云策略模板开发的K8s控制器,帮助您更好地管理基于不同策略模板部署的策略实例和集群整体的治理状态。
在安装策略治理组件policy-template-controller前,您需要安装以下组件。
gatekeeper组件:基于OPA策略引擎的K8s策略准入控制器,帮助您方便地管理和应用集群内的OPA策略,实现命名空间标签管理等功能。
logtail-ds日志组件:用于对不符合策略约束的拦截或告警事件进行收集和检索。
您可以使用以下两种方式安装gatekeeper、logtail-ds和策略治理组件。
通过onectl安装
在本地安装配置onectl。具体操作,请参见通过onectl管理注册集群。
执行以下命令,安装所需组件。
onectl ram-user grant --addon logtail-ds onectl addon install gatekeeper onectl addon install logtail-ds onectl addon install policy-template-controller
预期输出:
Ram policy ack-one-registered-cluster-policy-logtail-ds granted to ram user ack-one-user-ce313528c3 successfully. Addon gatekeeper, version **** installed. Addon logtail-ds, version **** installed. Addon policy-template-controller, version **** installed.
通过控制台安装
您可以通过组件管理页面安装gatekeeper、logtail-ds组件。具体操作,请参见管理组件。
登录容器服务管理控制台,在左侧导航栏选择集群。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
在策略管理页面,单击开始安装,根据页面提示,依次完成策略治理组件的安装。
策略规则库说明
当前阿里云容器服务ACK内置如下类型的策略规则库,策略分类和简要说明如下。关于策略规则库具体的参数配置和模板使用说明,请参见容器安全策略规则库说明。
Category | Policy | Description | Severity |
Compliance |
| 限制Secret以secretKeyRef的形式挂载到应用Pod环境变量中。 | medium |
| 限制Pod中所有容器必须配置 | low | |
| 限制资源部署在集群指定的命名空间中。 | low | |
| 限制指定命名空间下的rolebinding使用指定范围内的Role或Clusterrole。 | high | |
| 限制指定的Namespace被误删除。 | medium | |
Infra |
| 限制在集群指定范围部署的应用中使用shareProcessNamespace。 | high |
| 要求emptyDir类型的Volume必须指定 | low | |
| 限制部署在集群指定范围内的Pod必须具有 | low | |
| 限制指定Namespaces下的部署只能使用指定Region中的阿里云OSS存储卷。 | low | |
K8s-general |
| 限制在集群指定范围部署的应用Pod中拉取白名单列表外的镜像。 | high |
| 要求在应用中配置 | low | |
| 要求在应用中设置 | high | |
| 限制在集群指定范围的应用Pod中启动临时容器。 | medium | |
| 限制在集群指定范围内部署LoadBalancer类型的Service。 | high | |
| 限制在集群指定范围内使用NodePort类型的Service。 | high | |
| 要求集群指定范围的应用Pod配置资源 | low | |
| 限制在集群指定范围内的Services实例使用白名单范围之外的externalIPs。 | high | |
| 限制在集群指定范围内部署不符合digest格式的镜像。 | low | |
| 限制在集群指定范围内部署没有指定范式label标签的应用。 | low | |
| 限制在集群指定范围内部署的Pod配置指定类型的readinessProbe和livenessProbe。 | medium | |
| 限制在Ingress实例的 | high | |
| 限制在Ingress实例的 | high | |
| 限制创建公网类型的LoadBalancer Service。 | high | |
PSP |
| 限制在集群指定范围内部署的Pod配置 | medium |
| 限制在集群指定范围内部署的Pod中的启动 | medium | |
| 限制在集群指定范围内部署的Pod配置AppArmor。 | low | |
| 限制在集群指定范围内部署的Pod配置Linux Capabilities能力。 | high | |
| 限制在集群指定范围内部署的Pod配置fsGroup。 | medium | |
| 限制在集群指定范围内部署Pod的FlexVolume驱动配置。 | medium | |
| 限制在集群指定范围内部署Pod的禁止的Sysctl范围。 | high | |
| 限制在集群指定范围内部署的Pod允许挂载的主机Host目录范围。 | high | |
| 限制在集群指定范围内部署的Pod是否允许共享主机Host命名空间。 | high | |
| 限制在集群指定范围内部署的Pod使用主机网络和指定端口。 | high | |
| 限制在集群指定范围内部署的Pod中启动特权容器。 | high | |
| 限制在集群指定范围内部署的Pod允许挂载的Proc类型。 | low | |
| 限制在集群指定范围内部署的Pod使用只读的根文件系统。 | medium | |
| 限制在集群指定范围内部署的Pod必须使用AllowedSELinuxOptions参数中规定的Selinux配置。 | low | |
| 限制在集群指定范围内部署的Pod使用指定的Seccomp配置文件。 | low | |
| 限制在集群指定范围内部署的Pod使用指定的Volume挂载类型。 | medium |
查看集群当前策略治理状态
对于安装了策略治理相关组件的集群,可以通过以下操作查看集群当前策略治理状态。
登录容器服务管理控制台,在左侧导航栏选择集群。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
在策略实施总览页签中查看集群当前策略治理状态。
包含以下信息:
策略开启总览,包括高危和中危防护策略的总数和已开启数展示,建议开启的策略列表等。
近7天拦截和告警结果统计。
近7天策略实施记录,当前页面表格中会默认展示7天内最近100条的拦截或告警日志,如果您想查看更多审计日志,可以单击近7天策略实施记录后的图标,并单击悬浮窗口中的日志服务链接在SLS日志服务控制台指定的Logstore中查看全部日志。
查看策略列表和集群中已部署的策略实例
您可以通过以下操作查看策略列表和在集群中当前已部署的策略实例总数。
登录容器服务管理控制台,在左侧导航栏选择集群。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
在我的策略页签中查看集群所有可部署的策略名称。
在列表中显示所有可部署的策略名称,在表格右上角会显示全部策略、已开启和未开启的策略计数。其中已开启的策略名称会优先显示在表格上部,在策略实例数中会显示对应策略在集群中已部署的实例个数。
单击操作列下的编辑或单击策略名称中的链接可以修改策略实例的配置。
单击操作列下的删除可以删除该策略在集群中部署的所有实例。
如果策略实例数为空说明该策略还未在集群中部署创建,可以通过单击操作列下的开启进行参数配置后部署对应的策略实例。
关于策略说明和模板示例的更多信息,请参见容器安全策略规则库说明。
创建策略实例
您可以根据以下操作在指定集群中创建策略实例。
登录容器服务管理控制台,在左侧导航栏选择集群。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
单击我的策略页签,然后单击创建策略实例。在创建策略实例对话框配置相关参数。
参数
说明
策略类型
首先选择策略类型,包括如下大类:
Infra:基础设施层资源相关的策略类型。
Compliance:基于K8s合规规范定制的策略类型。
PSP:替代Pod Security Policy(PSP)的策略类型。
K8s-general:基于最佳安全实践对K8s资源配置进行安全加固约束的通用策略类型。
策略名称
根据选择的策略类型,在策略名称下拉列表中选择需要部署的策略模板名称。更多信息,请参见策略规则库说明。
实施动作
拦截:违反策略规则约束的指定资源部署会被拦截。
告警:违反策略规则约束的指定资源仍旧可以部署,只会产生对应违规审计的告警日志。
作用范围
选择策略实例实施在集群中哪些指定的命名空间。
参数配置
如果参数配置输入框中默认为空,说明规则不需要进行参数配置。
如果输入框中包含需要配置的参数模板,则请参考策略参数说明按照指定格式配置参数。更多信息,请参见策略规则库说明。
修改策略实例
您可以根据以下操作在指定集群中修改已经部署的策略实例。
登录容器服务管理控制台,在左侧导航栏选择集群。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
在我的策略页签右侧的操作列,单击目标策略对应的编辑。
当策略在集群中已部署超过1个实例时,您可以单击操作列的查看策略实例,选择需要修改配置的指定实例,单击对应策略的编辑,在编辑策略对话框修改相关配置。关于相关配置说明,请参见策略的相关参数配置说明。
删除策略实例
您可以根据以下操作在指定集群中删除策略实例。
登录容器服务管理控制台,在左侧导航栏选择集群。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
在我的策略页签右侧的操作列,单击目标策略对应的删除。
单击删除,可以删除对应策略在集群中已经部署的所有实例。
当对应策略在集群中已部署超过1个实例时,您可以单击操作列中的查看策略实例,选择目标实例,然后单击对应策略的删除。