相较于原PSP(PodSecurityPolicy)策略,容器服务ACK能够提供更多符合K8s应用场景的策略规则,在规则配置上也更加灵活简单,帮助企业安全运维管理人员更好的使用策略治理相关能力。本文介绍如何安装策略治理组件及如何管理策略实例。
背景信息
PodSecurityPolicy(简称PSP)从Kubenetes 1.21版本开始被标记为弃用(deprecated)状态,为此ACK容器服务改版了原先基于PSP的策略管理功能,基于OPA策略和gatekeeper准入控制器,扩展了相应的策略治理状态统计和日志上报检索等能力,同时内置了种类丰富的策略治理规则库,相较于原PSP策略能够提供符合更多K8s应用场景的策略规则,在规则配置上也更加灵活简单,帮助企业安全运维管理人员更好的使用策略治理相关能力。
前提条件
- 已创建ACK标准版或专有版集群,且集群版本至少为1.16.9-aliyun.1。具体操作, 请参见创建Kubernetes托管版集群或创建Kubernetes专有版集群。
- 如果您使用RAM账号进行策略管理,RAM账号需要拥有以下RAM授权条件:
cs:DescribePolicies
:列举策略治理规则库列表cs:DescribePoliceDetails
:获取策略规则模板详情cs:DescribePolicyGovernanceInCluster
:获取集群策略治理详情cs:DescribePolicyInstances
:获取集群中当前部署的策略实例列表cs:DescribePolicyInstancesStatus
:获取集群当前不同策略类型对应的实例部署状态cs:DeployPolicyInstance
:在指定集群中部署策略规则实例cs:DeletePolicyInstance
:在指定集群中删除策略规则实例cs:ModifyPolicyInstance
:在指定集群中修改策略规则实例
关于如何自定义RAM授权策略,请参见自定义RAM授权策略。
注意事项
- 只支持1.16.9-aliyun.1版本以上的ACK集群。
- 当前只适用于Linux节点。
- 当前不支持自定义策略规则,所有规则均来自于阿里云容器服务内置的规则库。
- 仅支持通过阿里云容器服务ACK组件管理安装gatekeeper组件。
如果集群中已通过其他途径安装gatekeeper组件,请您卸载后再通过阿里云容器服务ACK组件管理安装gatekeeper组件。关于gatekeeper组件的版本发布信息,请参见gatekeeper。
安装策略治理组件
policy-template-controller组件为基于阿里云策略模板开发的K8s控制器,帮助您更好的管理基于不同策略模板部署的策略实例和集群整体的治理状态。
- gatekeeper组件:基于OPA策略引擎的K8s策略准入控制器,帮助您方便地管理和应用集群内的OPA策略,实现命名空间标签管理等功能。
- logtail-ds日志组件:用于对不符合策略约束的拦截或告警事件的收集和检索。
策略规则库说明
当前阿里云容器服务ACK内置如下类型的策略规则库,策略分类和简要说明如下。关于策略规则库具体的参数配置和模板使用说明,请参见容器安全策略规则库说明。
Category | Policy | Description | Severity |
---|---|---|---|
CIS-K8s | ACKNoEnvVarSecrets |
限制Secret以secretKeyRef的形式挂载到应用Pod环境变量中。 | medium |
ACKPodsRequireSecurityContext |
限制Pod中所有容器必须配置securitycontext 字段。
|
low | |
ACKRestrictNamespaces |
限制资源部署在集群指定的命名空间中。 | low | |
ACKRestrictRoleBindings |
限制指定命名空间下的rolebinding使用指定范围内的Role或Clusterrole。 | high | |
Infra | ACKBlockProcessNamespaceSharing |
限制在集群指定范围部署的应用中使用shareProcessNamespace。 | high |
ACKEmptyDirHasSizeLimit |
要求emptyDir类型的Volume必须指定sizelimit 。
|
low | |
ACKLocalStorageRequireSafeToEvict |
限制部署在集群指定范围内的Pod必须具有 "cluster-autoscaler.kubernetes.io/safe-to-evict": "true" 注释标签。默认情况下autoscaler 在集群自动伸缩时不会驱逐使用HostPath或EmptyDir卷的Pod。为了允许驱逐这些Pod,必须在Pod上添加该注释标签。
|
low | |
ACKOSSStorageLocationConstraint |
限制指定Namespaces下的部署只能使用指定Region中的阿里云OSS存储卷 | low | |
K8s-general | ACKAllowedRepos |
限制在集群指定范围部署的应用Pod中拉取白名单列表外的镜像。 | high |
ACKBlockAutoinjectServiceEnv |
要求在应用中配置enableServiceLinks: false 防止在Pod环境变量中透出服务IP。
|
low | |
ACKBlockAutomountToken |
要求在应用中设置automountServiceAccountToken: false 字段防止自动挂载serviceaccount 。
|
high | |
ACKBlockEphemeralContainer |
限制在集群指定范围的应用Pod中启动临时容器。 | medium | |
ACKBlockLoadBalancer |
限制在集群指定范围内部署LoadBalancer类型的Service。 | high | |
ACKBlockNodePort |
限制在集群指定范围内使用NodePort类型的Service。 | high | |
ACKContainerLimits |
要求集群指定范围的应用Pod配置资源limits 。
|
low | |
ACKExternalIPs |
限制在集群指定范围内的Services实例使用白名单范围之外的externalIPs。 | high | |
ACKImageDigests |
限制在集群指定范围内部署不符合digest格式的镜像。 | low | |
ACKRequiredLabels |
限制在集群指定范围内部署没有指定范式label标签的应用。 | low | |
ACKRequiredProbes |
限制在集群指定范围内部署的Pod配置指定类型的readinessProbe和livenessProbe。 | medium | |
ACKCheckNginxPath |
限制在Ingress实例的spec.rules[].http.paths[].path 字段中使用危险配置。Ingress-nginx 1.2.1以下版本建议开启该策略。
|
high | |
ACKCheckNginxAnnotation |
限制在Ingress实例的metadata.annotations 字段中使用危险配置。Ingress-nginx 1.2.1以下版本建议开启该策略。
|
high | |
PSP | ACKPSPAllowPrivilegeEscalationContainer |
限制在集群指定范围内部署的Pod配置allowPrivilegeEscalation 参数。
|
medium |
ACKPSPAllowedUsers |
限制在集群指定范围内部署的Pod中的启动user 、group 、supplementalGroups 以及fsGroup 。
|
medium | |
ACKPSPAppArmor |
限制在集群指定范围内部署的Pod配置AppArmor。 | low | |
ACKPSPCapabilities |
限制在集群指定范围内部署的Pod配置Linux Capabilities能力。 | high | |
ACKPSPFSGroup |
限制在集群指定范围内部署的Pod配置 fsGroup。 | medium | |
ACKPSPFlexVolumes |
限制在集群指定范围内部署Pod的FlexVolume驱动配置。 | medium | |
ACKPSPForbiddenSysctls |
限制在集群指定范围内部署Pod的禁止的Sysctl范围。 | high | |
ACKPSPHostFilesystem |
限制在集群指定范围内部署的Pod允许挂载的主机host目录范围。 | high | |
ACKPSPHostNamespace |
限制在集群指定范围内部署的Pod是否允许共享主机host命名空间。 | high | |
ACKPSPHostNetworkingPorts |
限制在集群指定范围内部署的Pod使用主机网络和指定端口。 | high | |
ACKPSPPrivilegedContainer |
限制在集群指定范围内部署的Pod中启动特权容器。 | high | |
ACKPSPProcMount |
限制在集群指定范围内部署的Pod允许挂载的Proc类型。 | low | |
ACKPSPReadOnlyRootFilesystem |
限制在集群指定范围内部署的Pod使用只读的根文件系统。 | medium | |
ACKPSPSELinuxV2 |
制在集群指定范围内部署的Pod必须使用AllowedSELinuxOptions参数中规定的Selinux配置 | low | |
ACKPSPSeccomp |
限制在集群指定范围内部署的Pod使用指定的Seccomp配置文件。 | low | |
ACKPSPVolumeTypes |
限制在集群指定范围内部署的Pod使用指定的Volume挂载类型。 | medium |
查看集群当前策略治理状态
对于安装了策略治理相关组件的集群,可以通过以下操作查看集群当前策略治理状态。
查看策略列表和集群中已部署的策略实例
您可以通过以下操作查看策略列表和在集群中当前已部署的策略实例总数。
创建策略实例
您可以根据以下操作在指定集群中创建策略实例。
修改策略实例
您可以根据以下操作在指定集群中修改已经部署的策略实例。
删除策略实例
您可以根据以下操作在指定集群中删除策略实例。