在注册集群中配置容器安全策略(新版)

注册集群能够提供更多符合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安装

  1. 在本地安装配置onectl。具体操作,请参见通过onectl管理注册集群

  2. 执行以下命令,安装所需组件。

    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组件。具体操作,请参见管理组件

  1. 登录容器服务管理控制台,在左侧导航栏选择集群

  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择安全管理 > 策略管理

  3. 策略管理页面,单击开始安装,根据页面提示,依次完成策略治理组件的安装。

策略规则库说明

当前阿里云容器服务ACK内置如下类型的策略规则库,策略分类和简要说明如下。关于策略规则库具体的参数配置和模板使用说明,请参见容器安全策略规则库说明

Category

Policy

Description

Severity

Compliance

ACKNoEnvVarSecrets

限制Secret以secretKeyRef的形式挂载到应用Pod环境变量中。

medium

ACKPodsRequireSecurityContext

限制Pod中所有容器必须配置securitycontext字段。

low

ACKRestrictNamespaces

限制资源部署在集群指定的命名空间中。

low

ACKRestrictRoleBindings

限制指定命名空间下的rolebinding使用指定范围内的Role或Clusterrole。

high

ACKNamespacesDeleteProtection

限制指定的Namespace被误删除。

medium

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

ACKBlockInternetLoadBalancer

限制创建公网类型的LoadBalancer Service。

high

PSP

ACKPSPAllowPrivilegeEscalationContainer

限制在集群指定范围内部署的Pod配置allowPrivilegeEscalation参数。

medium

ACKPSPAllowedUsers

限制在集群指定范围内部署的Pod中的启动usergroupsupplementalGroups以及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

查看集群当前策略治理状态

对于安装了策略治理相关组件的集群,可以通过以下操作查看集群当前策略治理状态。

  1. 登录容器服务管理控制台,在左侧导航栏选择集群

  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择安全管理 > 策略管理

  3. 策略实施总览页签中查看集群当前策略治理状态。

    包含以下信息:

    • 策略开启总览,包括高危和中危防护策略的总数和已开启数展示,建议开启的策略列表等。

    • 近7天拦截和告警结果统计。

    • 近7天策略实施记录,当前页面表格中会默认展示7天内最近100条的拦截或告警日志,如果您想查看更多审计日志,可以单击近7天策略实施记录后的未知图标,并单击悬浮窗口中的日志服务链接在SLS日志服务控制台指定的Logstore中查看全部日志。策略实施总览

查看策略列表和集群中已部署的策略实例

您可以通过以下操作查看策略列表和在集群中当前已部署的策略实例总数。

  1. 登录容器服务管理控制台,在左侧导航栏选择集群

  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择安全管理 > 策略管理

  3. 我的策略页签中查看集群所有可部署的策略名称。

    在列表中显示所有可部署的策略名称,在表格右上角会显示全部策略已开启未开启的策略计数。其中已开启的策略名称会优先显示在表格上部,在策略实例数中会显示对应策略在集群中已部署的实例个数。

    • 单击操作列下的编辑或单击策略名称中的链接可以修改策略实例的配置。

    • 单击操作列下的删除可以删除该策略在集群中部署的所有实例。

    • 如果策略实例数为空说明该策略还未在集群中部署创建,可以通过单击操作列下的开启进行参数配置后部署对应的策略实例。

    关于策略说明和模板示例的更多信息,请参见容器安全策略规则库说明

创建策略实例

您可以根据以下操作在指定集群中创建策略实例。

  1. 登录容器服务管理控制台,在左侧导航栏选择集群

  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择安全管理 > 策略管理

  3. 单击我的策略页签,然后单击创建策略实例。在创建策略实例对话框配置相关参数。

    参数

    说明

    策略类型

    首先选择策略类型,包括如下大类:

    • Infra:基础设施层资源相关的策略类型。

    • Compliance:基于K8s合规规范定制的策略类型。

    • PSP:替代Pod Security Policy(PSP)的策略类型。

    • K8s-general:基于最佳安全实践对K8s资源配置进行安全加固约束的通用策略类型。

    策略名称

    根据选择的策略类型,在策略名称下拉列表中选择需要部署的策略模板名称。更多信息,请参见策略规则库说明

    实施动作

    • 拦截:违反策略规则约束的指定资源部署会被拦截。

    • 告警:违反策略规则约束的指定资源仍旧可以部署,只会产生对应违规审计的告警日志。

    作用范围

    选择策略实例实施在集群中哪些指定的命名空间。

    参数配置

    • 如果参数配置输入框中默认为空,说明规则不需要进行参数配置。

    • 如果输入框中包含需要配置的参数模板,则请参考策略参数说明按照指定格式配置参数。更多信息,请参见策略规则库说明

修改策略实例

您可以根据以下操作在指定集群中修改已经部署的策略实例。

  1. 登录容器服务管理控制台,在左侧导航栏选择集群

  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择安全管理 > 策略管理

  3. 我的策略页签右侧的操作列,单击目标策略对应的编辑

    当策略在集群中已部署超过1个实例时,您可以单击操作列的查看策略实例,选择需要修改配置的指定实例,单击对应策略的编辑,在编辑策略对话框修改相关配置。关于相关配置说明,请参见策略的相关参数配置说明

删除策略实例

您可以根据以下操作在指定集群中删除策略实例。

  1. 登录容器服务管理控制台,在左侧导航栏选择集群

  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择安全管理 > 策略管理

  3. 我的策略页签右侧的操作列,单击目标策略对应的删除

    • 单击删除,可以删除对应策略在集群中已经部署的所有实例。

    • 当对应策略在集群中已部署超过1个实例时,您可以单击操作列中的查看策略实例,选择目标实例,然后单击对应策略的删除