×

Red Hat Advanced Cluster Security for Kubernetes 提供开箱即用的默认安全策略,您可以使用这些策略来防止在您的环境中部署高风险服务并响应运行时安全事件。您还可以为您的容器环境创建自定义多因素策略。(Red Hat Advanced Cluster Security for Kubernetes provides out-of-the-box default security policies that you can use to prevent high-risk service deployments in your environment and respond to runtime security incidents. You can also create custom multi-factor policies for your container environment.)

策略类别 (Policy categories)

RHACS 使用策略类别按类型和功能对策略进行分组。您可以使用这些类别来组织和搜索策略。(RHACS uses policy categories to group policies by type and function. You can use these categories to organize and search for policies.)

RHACS 提供以下默认策略类别 (RHACS provides the following default policy categories)

  • 异常活动 (Anomalous Activity)

  • 加密货币挖掘 (Cryptocurrency Mining)

  • DevOps 最佳实践 (DevOps Best Practices)

  • Docker 中心互联网安全 (CIS) (Docker Center for Internet Security (CIS))

  • Kubernetes

  • Kubernetes 事件

  • 网络工具

  • 包管理

  • 权限

  • 安全最佳实践

  • 供应链安全

  • 系统修改

  • 漏洞管理

  • 零信任

您可以使用策略管理窗口中的策略类别选项卡在 RHACS 门户中查看现有类别并创建您自己的策略类别。

使用策略类别选项卡创建策略类别

从 3.74 版本开始,如果您启用了 PostgreSQL 数据库,RHACS 提供了一种新的方法来在 Red Hat Advanced Cluster Security Cloud Service 或 RHACS 中创建和管理策略类别。使用此功能时,除策略创建之外的所有策略工作流程保持不变。

您也可以使用PolicyCategoryService API 对象配置策略类别。更多信息,请访问 RHACS 门户中的帮助API 参考

步骤
  1. 在 RHACS 门户中,转到平台配置策略管理

  2. 点击策略类别选项卡。此选项卡提供现有类别的列表,并允许您按类别名称过滤列表。您也可以点击显示所有类别并选中复选框以从显示列表中删除默认或自定义类别。

  3. 点击创建类别

  4. 输入类别名称并点击创建

使用策略类别选项卡修改策略类别

从 3.74 版本开始,如果您启用了 PostgreSQL 数据库,RHACS 提供了一种新的方法来在 Red Hat Advanced Cluster Security Cloud Service 或 RHACS 中创建和管理策略类别。使用此功能时,除策略创建之外的所有策略工作流程保持不变。

您也可以使用PolicyCategoryService API 对象配置策略类别。更多信息,请访问 RHACS 门户中的帮助API 参考

步骤
  1. 在 RHACS 门户中,转到平台配置策略管理

  2. 点击策略类别选项卡。此选项卡提供现有类别的列表,并允许您按类别名称过滤列表。您也可以点击显示所有类别并选中复选框以从显示列表中删除默认或自定义类别。

  3. 点击策略名称以编辑或删除它。默认策略类别无法选择、编辑或删除。

了解策略和生命周期阶段

配置策略时,您可以选择适用于策略的生命周期阶段,并且您可以为一个策略选择多个阶段。

您可以从以下生命周期阶段中选择

  • 构建阶段策略:这些策略适用于镜像字段,例如 CVE 和 Dockerfile 指令。

  • 部署阶段策略:这些策略可以包含所有构建时策略标准。它们还可以包含来自集群配置的数据,例如以特权模式运行或挂载 Docker 守护程序套接字。

  • 运行时策略:这些策略扫描可以包含所有构建时和部署时策略标准,以及运行时进程执行的数据。您可以进一步配置运行时策略,以根据以下事件触发策略违规

    • 部署:当事件源包含进程和网络活动(例如在 Pod 中执行命令和 Pod 端口转发)时,RHACS 会触发策略违规。

    • 审计日志:当事件源与 Kubernetes 审计日志记录匹配时,RHACS 会触发策略违规。

了解规则和策略标准

您可以在 RHACS 中设置规则并配置要触发策略的数据。此数据也称为策略标准策略字段

您可以根据下表中列出的属性配置策略。

在此表中

  • 正则表达式与、或列指示您是否可以将正则表达式和其他逻辑运算符与特定属性一起使用。

    • 正则表达式 (正则表达式) 的! 表示您只能对列出的字段使用正则表达式。

    • ! 表示您只能对属性使用提到的逻辑运算符。

    • 正则表达式 / / 与、或列中的✕表示属性不支持任何这些(正则表达式、否定、逻辑运算符)。

  • RHACS 版本列指示您必须拥有的 Red Hat Advanced Cluster Security for Kubernetes 版本才能使用该属性。

  • 您不能对具有以下属性的属性使用逻辑组合运算符

    • 布尔值truefalse

    • 最小值语义,例如

      • 最小 RBAC 权限

      • 镜像创建后的天数

  • 您不能对具有以下属性的属性使用逻辑运算符:

    • 布尔值truefalse

    • 已经使用比较的数值,例如<><=>=运算符。

    • 可以具有多个值的复合标准,例如

      • Dockerfile 行,包括指令和参数。

      • 环境变量,包括名称和值。

    • 其他含义,包括添加功能删除功能镜像创建后的天数镜像上次扫描后的天数

属性 描述 JSON 属性 允许的值 正则表达式与、或 阶段

部分:镜像注册表

镜像注册表

镜像注册表的名称。

镜像注册表

字符串

正则表达式,
非,
与,或

构建,
部署,
运行时(与运行时标准一起使用时)

镜像名称

注册表中镜像的全名,例如library/nginx

镜像远程地址

字符串

正则表达式,
非,
与,或

构建,
部署,
运行时(与运行时标准一起使用时)

镜像标签

镜像标识符。

镜像标签

字符串

正则表达式,
非,
与,或

构建,
部署,
运行时(与运行时标准一起使用时)

镜像签名

您可以用来验证镜像签名的签名集成列表。针对那些没有签名或其签名无法由至少一个提供的签名集成验证的镜像创建警报。

镜像签名验证者

已配置的镜像签名集成的有效 ID

!仅

构建,
部署,
运行时(与运行时标准一起使用时)

部分:镜像内容

常见漏洞和披露 (CVE) 可修复

只有当您正在评估的部署中的镜像具有可修复的 CVE 时,此标准才会导致违规。

可修复

布尔值

构建,
部署,
运行时(与运行时标准一起使用时)

自 CVE 首次在镜像中发现以来的天数

只有当自 RHACS 在特定镜像中发现 CVE 以来超过指定天数时,此标准才会导致违规。

自 CVE 首次在镜像中发现以来的天数

整数

构建,
部署,
运行时(与运行时标准一起使用时)

自 CVE 首次在系统中发现以来的天数

只有当自 RHACS 在 RHACS 监控的所有集群中的所有已部署镜像中发现 CVE 以来超过指定天数时,此标准才会导致违规。

自 CVE 首次在系统中发现以来的天数

整数

构建,
部署,
运行时(与运行时标准一起使用时)

镜像年龄

自镜像创建日期起的最小天数。

镜像年龄

整数

构建,
部署,
运行时(与运行时标准一起使用时)

镜像扫描年龄

自镜像上次扫描以来的最小天数。

镜像扫描年龄

整数

构建,
部署,
运行时(与运行时标准一起使用时)

镜像用户

与 Dockerfile 中的 USER 指令匹配。有关详细信息,请参见http://docs.docker.net.cn/engine/reference/builder/#user

镜像用户

字符串

正则表达式,
非,
与,或

构建,
部署,
运行时(与运行时标准一起使用时)

Dockerfile 行

Dockerfile 中的特定行,包括指令和参数。

Dockerfile 行

以下之一:LABEL、RUN、CMD、EXPOSE、ENV、ADD、COPY、ENTRYPOINT、VOLUME、USER、WORKDIR、ONBUILD

!仅对值使用正则表达式,
与,或

构建,
部署,
运行时(与运行时标准一起使用时)

镜像扫描状态

检查是否扫描了镜像。

未扫描的镜像

布尔值

构建,
部署,
运行时(与运行时标准一起使用时)

通用漏洞评分系统 (CVSS)

CVSS:使用它来匹配漏洞分数大于>、小于<或等于=指定 CVSS 的镜像。

CVSS

<、>、<=、>= 或无(这意味着等于)
——和——
十进制数(一个带有可选小数部分的数字)。

示例
≥5,或
9.5

与,或

构建,
部署,
运行时(与运行时标准一起使用时)

严重性

基于 CVSS 或供应商的漏洞严重性。可以是低、中、重要或严重之一。

严重性

<,>,⇐,>= 或无(表示等于)
——和——
其中之一
未知


重要
严重

示例
≥重要,或
严重

与,或

构建,
部署,
运行时(与运行时标准一起使用时)

已修复版本

修复镜像中标记漏洞的软件包的版本字符串。此标准可与其他识别漏洞的标准一起使用,例如使用 CVE 标准。

已修复版本

字符串

正则表达式,
非,
与,或

构建,
部署,
运行时(与运行时标准一起使用时)

CVE

常见漏洞和披露,与具体的 CVE 编号一起使用。

CVE

字符串

正则表达式,
非,
与,或

构建,
部署,
运行时(与运行时标准一起使用时)

镜像组件

镜像中特定软件组件的名称和版本号。

镜像组件

键=值

值是可选的。

如果值缺失,则格式必须为“键=”。

正则表达式,
与,或

构建,
部署,
运行时(与运行时标准一起使用时)

镜像操作系统

镜像的基础操作系统的名称和版本号。例如,alpine:3.17.3

镜像操作系统

字符串

正则表达式,
非,
与,或

构建,
部署,
运行时(与运行时标准一起使用时)

需要镜像标签

确保 Docker 镜像标签存在。如果部署中的任何镜像都不具有指定的标签,则策略将触发。您可以对键和值字段都使用正则表达式来匹配标签。“需要镜像标签”策略标准只有在与 Docker 注册表集成时才有效。有关 Docker 标签的详细信息,请参阅 Docker 文档,http://docs.docker.net.cn/config/labels-custom-metadata/

必需的镜像标签

键=值

值是可选的。

如果值缺失,则格式必须为“键=”。

正则表达式,
与,或

构建,
部署,
运行时(与运行时标准一起使用时)

禁止镜像标签

确保不使用特定的 Docker 镜像标签。如果部署中的任何镜像都具有指定的标签,则策略将触发。您可以对键和值字段都使用正则表达式来匹配标签。“禁止镜像标签”策略标准只有在与 Docker 注册表集成时才有效。有关 Docker 标签的详细信息,请参阅 Docker 文档,http://docs.docker.net.cn/config/labels-custom-metadata/

禁止的镜像标签

键=值

值是可选的。

如果值缺失,则格式必须为“键=”。

正则表达式,
与,或

构建,
部署,
运行时(与运行时标准一起使用时)

部分:容器配置

环境变量

按名称或值检查环境变量。创建包含环境变量属性的策略时,可以选择策略应匹配哪些类型的环境变量。例如,您可以指定原始值(直接在部署 YAML 中提供),也可以指定对来自配置映射、密钥、字段或资源请求或限制的值的引用。对于直接在部署 YAML 中指定的原始值以外的任何类型,策略规则的相应value属性将被忽略。在这种情况下,策略匹配将根据指定环境变量类型的存在情况进行评估。此外,此标准禁止为原始值以外的类型创建具有非空value属性的策略。

环境变量

RAW=key=value 用于匹配直接在部署 YAML 中使用特定键和值指定的环境变量。您可以省略value属性以仅匹配键。

如果环境变量未在配置 YAML 中定义,则可以使用格式SOURCE=KEY,其中SOURCE是以下对象之一

  • SECRET_KEY (SecretKeyRef)

  • CONFIG_MAP_KEY (ConfigMapRef)

  • FIELD (FieldRef)

  • RESOURCE_FIELD (ResourceFieldRef)

以上列表首先提供 API 对象标签,然后提供括号中的用户界面标签。

!仅对键和值使用正则表达式(如果使用 RAW)
与,或

部署,
运行时(与运行时标准一起使用时)

容器 CPU 请求

检查为给定资源保留的核心数。

容器 CPU 请求

<,>,⇐,>= 或无(表示等于)
——和——
十进制数(带可选小数部分的数字)

示例
≥5,或
9.5

与,或

部署,
运行时(与运行时标准一起使用时)

容器 CPU 限制

检查资源允许使用的最大核心数。

容器 CPU 限制

(与容器 CPU 请求相同)

与,或

部署,
运行时(与运行时标准一起使用时)

容器内存请求

请求的 MB 数,包括小数部分。

容器内存请求

(与容器 CPU 请求相同)

与,或

部署,
运行时(与运行时标准一起使用时)

容器内存限制

检查资源允许使用的最大内存量。

容器内存限制

(与容器 CPU 请求相同)

与,或

部署,
运行时(与运行时标准一起使用时)

特权容器

检查部署是否以特权模式配置。此标准仅检查相应Pod 安全上下文privileged字段的值。

特权容器

布尔值:当相应PodSecurityContextprivileged字段的值设置为true时为true

部署,
运行时(与运行时标准一起使用时)

根文件系统可写性

检查部署是否以readOnlyFilesystem模式配置。

只读根文件系统

布尔值:当相应PodSecurityContextreadOnlyRootFilesystem字段的值设置为true时为true

部署,
运行时(与运行时标准一起使用时)

Seccomp 配置文件类型

为部署定义的seccomp配置文件类型。如果在 Pod 和容器级别都提供了seccomp选项,则容器选项将覆盖 Pod 选项。参见安全上下文

Seccomp 配置文件类型

其中之一

不受限制
运行时默认
本地主机

部署,
运行时(与运行时标准一起使用时)

权限提升

当部署允许容器进程获得比其父进程更多权限时提供警报。

允许权限提升

布尔值

部署,
运行时(与运行时标准一起使用时)

删除功能

必须从容器中删除的 Linux 功能。当未删除指定的权限时提供警报。例如,如果配置了SYS_ADMINSYS_BOOT,并且部署仅删除了这两个功能中的一个都不删除,则会发生警报。

删除功能

其中之一

全部
审核控制
审核读取
审核写入
阻止挂起
CHOWN
DAC 覆盖
DAC 读取搜索
FOWNER
FSETID
IPC 锁
IPC 所有者
KILL
租赁
LINUX 不可变
MAC 管理
MAC 覆盖
MKNOD
网络管理
网络绑定服务
网络广播
网络原始
SETGID
SETFCAP
SETPCAP
SETUID
系统管理员
系统启动
系统CHROOT
系统模块
系统优先级
系统PACCT
系统PTRACE
系统原始IO
系统资源
系统时间
系统TTY配置
系统日志
唤醒警报

部署,
运行时(与运行时标准一起使用时)

添加功能

不能添加到容器的 Linux 功能,例如发送原始数据包或覆盖文件权限的功能。当添加指定的权限时提供警报。例如,如果配置了NET_ADMINNET_RAW,并且部署清单 YAML 文件包含这两个功能中的至少一个,则会发生警报。

添加功能

审核控制
审核读取
审核写入
阻止挂起
CHOWN
DAC 覆盖
DAC 读取搜索
FOWNER
FSETID
IPC 锁
IPC 所有者
KILL
租赁
LINUX 不可变
MAC 管理
MAC 覆盖
MKNOD
网络管理
网络绑定服务
网络广播
网络原始
SETGID
SETFCAP
SETPCAP
SETUID
系统管理员
系统启动
系统CHROOT
系统模块
系统PACCT
系统PTRACE
系统原始IO
系统资源
系统时间
系统TTY配置
系统日志
唤醒警报

部署,
运行时(与运行时标准一起使用时)

容器名称

容器的名称。

容器名称

字符串

正则表达式,
非,
与,或

部署,
运行时(与运行时标准一起使用时)

AppArmor 配置文件

容器中使用的 Application Armor (“AppArmor”) 配置文件。

AppArmor 配置文件

字符串

正则表达式,
非,
与,或

部署,
运行时(与运行时标准一起使用时)

存活性探针

容器是否定义了存活性探针。

存活性探针

布尔值

部署,
运行时(与运行时标准一起使用时)

就绪性探针

容器是否定义了就绪性探针。

就绪性探针

布尔值

部署,
运行时(与运行时标准一起使用时)

部分:部署元数据

禁止的注释

不允许在指定环境中的 Kubernetes 资源上存在的注释。

禁止的注释

键=值

值是可选的。

如果值缺失,则格式必须为“键=”。

正则表达式,
与,或

部署,
运行时(与运行时标准一起使用时)

必需的标签

检查 Kubernetes 中所需标签的存在。

必需的标签

键=值

值是可选的。

如果值缺失,则格式必须为“键=”。

正则表达式,
与,或

部署,
运行时(与运行时标准一起使用时)

必需的注释

检查 Kubernetes 中所需注释的存在。

必需的注释

键=值

值是可选的。

如果值缺失,则格式必须为“键=”。

正则表达式,
与,或

部署,
运行时(与运行时标准一起使用时)

运行时类

部署的RuntimeClass

运行时类

字符串

正则表达式,
非,
与,或

部署,
运行时(与运行时标准一起使用时)

主机网络

检查是否启用了HostNetwork,这意味着容器未放置在单独的网络堆栈中(例如,容器的网络未容器化)。这意味着容器可以完全访问主机的网络接口。

主机网络

布尔值

部署,
运行时(与运行时标准一起使用时)

主机PID

检查容器和主机之间是否隔离了进程 ID (PID) 命名空间。这允许不同 PID 命名空间中的进程具有相同的 PID。

主机PID

布尔值

部署,
运行时(与运行时标准一起使用时)

主机IPC

检查主机上的 IPC(POSIX/SysV IPC)命名空间(提供命名共享内存段、信号量和消息队列的分离)是否与容器共享。

主机IPC

布尔值

部署,
运行时(与运行时标准一起使用时)

命名空间

部署所属的命名空间名称。

命名空间

字符串

正则表达式,
非,
与,或

部署,
运行时(与运行时标准一起使用时)

副本

部署副本的数量。如果您使用oc scale将部署副本从 0 扩展到某个数字,则如果部署违反策略,则准入控制器会阻止此操作。

副本

<,>,⇐,>= 或无(表示等于)
——和——
十进制数(一个带有可选小数部分的数字)。

示例
≥5,或
9.5

非,
与,或

部署,
运行时(与运行时标准一起使用时)

章节:存储

卷名称

存储的名称。

卷名称

字符串

正则表达式,
非,
与,或

部署,
运行时(与运行时标准一起使用时)

卷源

指示卷的配置方式。例如,persistentVolumeClaimhostPath

卷源

字符串

正则表达式,
非,
与,或

部署,
运行时(与运行时标准一起使用时)

卷目标

挂载卷的路径。

卷目标

字符串

正则表达式,
非,
与,或

部署,
运行时(与运行时标准一起使用时)

卷类型

卷的类型。

卷类型

字符串

正则表达式,
非,
与,或

部署,
运行时(与运行时标准一起使用时)

已挂载卷的可写性

以可写方式挂载的卷。

可写挂载卷

布尔值

部署,
运行时(与运行时标准一起使用时)

挂载传播

检查容器是否以BidirectionalHost to ContainerNone模式挂载卷。

挂载传播

其中之一

NONE
HOSTTOCONTAINER
BIDIRECTIONAL

非,
与,或

部署,
运行时(与运行时标准一起使用时)

主机挂载的可写性

资源已挂载具有写权限的主机路径。

可写主机挂载

布尔值

部署,
运行时(与运行时标准一起使用时)

章节:网络

协议

公开端口使用的协议,例如 TCP 或 UDP。

公开端口协议

字符串

正则表达式,
非,
与,或

部署,
运行时(与运行时标准一起使用时)

端口

部署公开的端口号。

公开端口

<,>,⇐,>= 或无(表示等于)
——和——
一个整数。

示例
>=1024,或
22

非,
与,或

部署,
运行时(与运行时标准一起使用时)

公开节点端口

部署在外部公开的端口号。

公开节点端口

(与公开端口相同)

非,
与,或

部署,
运行时(与运行时标准一起使用时)

端口暴露

服务的暴露方式,例如负载均衡器或节点端口。

端口暴露方法

其中之一

未设置
外部
节点
主机
内部
路由

非,
与,或

部署,
运行时(与运行时标准一起使用时)

检测到意外网络流量

检查检测到的网络流量是否是部署的网络基线的组成部分。

检测到意外网络流量

布尔值

**运行时**仅限 - 网络

入站网络策略

检查是否存在入站 Kubernetes 网络策略。

具有入站网络策略

布尔值

正则表达式,
与,或

部署,
运行时(与运行时标准一起使用时)

出站网络策略

检查是否存在出站 Kubernetes 网络策略。

具有出站网络策略

布尔值

正则表达式,
与,或

部署,
运行时(与运行时标准一起使用时)

章节:进程活动

进程名称

在部署中执行的进程的名称。

进程名称

字符串

正则表达式,
非,
与,或

**运行时**仅限 - 进程

进程祖先

在部署中执行的进程的任何父进程的名称。

进程祖先

字符串

正则表达式,
非,
与,或

**运行时**仅限 - 进程

进程参数

在部署中执行的进程的命令参数。

进程参数

字符串

正则表达式,
非,
与,或

**运行时**仅限 - 进程

进程 UID

在部署中执行的进程的 Unix 用户 ID。

进程 UID

整数

非,
与,或

**运行时**仅限 - 进程

执行了意外进程

检查其进程执行未列在部署的锁定进程基线中的部署。

执行了意外进程

布尔值

**运行时**仅限 - 进程

章节:Kubernetes 访问

服务账户

服务账户的名称。

服务账户

字符串

正则表达式,
非,
与,或

部署,
运行时(与运行时标准一起使用时)

自动挂载服务账户令牌

检查部署配置是否自动挂载服务账户令牌。

自动挂载服务账户令牌

布尔值

部署,
运行时(与运行时标准一起使用时)

最小 RBAC 权限

匹配部署的 Kubernetes 服务账户的 Kubernetes RBAC 权限级别是否等于=或大于>指定的级别。

最小 RBAC 权限

其中之一

默认
命名空间内提升
集群范围提升
集群管理员

部署,
运行时(与运行时标准一起使用时)

章节:Kubernetes 事件

Kubernetes 操作

Kubernetes 操作的名称,例如Pod Exec

Kubernetes 资源

其中之一

PODS_EXEC
PODS_PORTFORWARD

!仅

**运行时**仅限 - Kubernetes 事件

Kubernetes 用户名

访问资源的用户的名称。

Kubernetes 用户名

仅包含字母数字、连字符 (-) 和冒号 (:)

正则表达式,
非,
!仅

**运行时**仅限 - Kubernetes 事件

Kubernetes 用户组

访问资源的用户所属的组的名称。

Kubernetes 用户组

仅包含字母数字、连字符 (-) 和冒号 (:)

正则表达式,
非,
!仅

**运行时**仅限 - Kubernetes 事件

Kubernetes 资源类型

已访问的 Kubernetes 资源的类型。

Kubernetes 资源

其中之一

配置映射
密钥
集群角色
集群角色绑定
网络策略
安全上下文约束
出站防火墙

!仅

**运行时**仅限 - 审计日志

Kubernetes API 动词

用于访问资源的 Kubernetes API 动词,例如GETPOST

Kubernetes API 动词

其中之一

创建
删除
获取
修补
更新

!仅

**运行时**仅限 - 审计日志

Kubernetes 资源名称

已访问的 Kubernetes 资源的名称。

Kubernetes 资源名称

仅包含字母数字、连字符 (-) 和冒号 (:)

正则表达式,
非,
!仅

**运行时**仅限 - 审计日志

用户代理

用户用来访问资源的用户代理。例如ockubectl

用户代理

字符串

正则表达式,
非,
!仅

**运行时**仅限 - 审计日志

源 IP 地址

用户从中访问资源的 IP 地址。

源 IP 地址

IPV4 或 IPV6 地址

正则表达式,
非,
!仅

**运行时**仅限 - 审计日志

是否为模拟用户

检查请求是否由服务账户或其他账户模拟的用户发出的。

是否为模拟用户

布尔值

**运行时**仅限 - 审计日志

关于策略执行

在 RHACS 中配置策略时,您可以选择 RHACS 在检测到违反安全策略的条件时如何响应。

RHACS 可以执行不同类型的策略执行,或解决违规行为的操作,具体取决于发现违规行为的阶段。配置策略执行时,您可以在策略中配置执行时选择多个阶段。例如,您可以选择**构建**和**部署**,以便 RHACS 将问题告知构建管道,但如果开发人员允许构建成功,则会阻止部署。

构建时执行中,您可以将 RHACS 配置为在映像与策略的条件匹配时使持续集成 (CI) 构建失败。这意味着当构建中存在违反策略的条件时,例如,如果存在特定严重级别的可修复 CVE 并且您已为此条件配置了策略,则构建应该失败。例如,如果您已将 RHACS 配置为检查映像或部署,并且您已将该检查集成到 CI/CD 管道中,如果 RHACS 检测到表示策略应失败的条件,则 RHACS API 将返回非零退出代码。然后,管道使用该代码使构建失败。

部署时执行中,RHACS 与 Kubernetes 准入控制器和 OpenShift Container Platform 准入插件协同工作,允许您执行安全策略。RHACS 阻止 Kubernetes 或 OpenShift Container Platform 创建或更新与策略条件匹配的工作负载,例如部署、守护程序集或作业。即使构建成功,这对于关闭存在严重问题的部署也很有用。

部署阶段的安全策略执行

Red Hat Advanced Cluster Security for Kubernetes 支持两种用于部署时策略的安全策略执行形式:通过准入控制器进行硬执行,以及由 RHACS Sensor 进行软执行。准入控制器阻止创建或更新违反策略的部署。如果准入控制器被禁用或不可用,Sensor 可以通过将违反策略的部署的副本数量缩减到0来执行强制执行。

策略执行可能会影响正在运行的应用程序或开发流程。在启用执行选项之前,请通知所有利益相关者并规划如何响应自动化执行操作。

硬执行

硬执行由 RHACS 准入控制器执行。在具有准入控制器执行的集群中,Kubernetes 或 OpenShift Container Platform API 服务器会阻止所有不符合规范的部署。准入控制器阻止CREATEUPDATE操作。任何满足配置了启用部署时执行的策略的 pod 创建或更新请求都将失败。

Kubernetes 准入 Webhook 仅支持CREATEUPDATEDELETECONNECT操作。RHACS 准入控制器仅支持CREATEUPDATE操作。诸如kubectl patchkubectl setkubectl scale之类的操作是 PATCH 操作,而不是 UPDATE 操作。由于 Kubernetes 不支持 PATCH 操作,因此 RHACS 无法对 PATCH 操作执行强制执行。

要启用阻止执行,必须在 RHACS 中为集群启用以下设置

  • 启用对象创建时的强制执行:此切换开关位于动态配置部分,用于控制准入控制服务的行为。要使其正常工作,必须启用静态配置部分中的配置准入控制器 Webhook 以侦听对象创建切换开关。

  • 启用对象更新时的强制执行:此切换开关位于动态配置部分,用于控制准入控制服务的行为。要使其正常工作,必须启用静态配置部分中的配置准入控制器 Webhook 以侦听对象更新切换开关。

如果更改了静态配置设置中的设置,则必须重新部署安全集群才能使这些更改生效。

软性强制执行

软性强制执行由 RHACS 传感器执行。此强制执行阻止操作启动。使用软性强制执行时,传感器会将副本扩展到 0,并阻止调度 Pod。在此强制执行中,集群中存在非就绪部署。

如果配置了软性强制执行,并且传感器关闭,则 RHACS 无法执行强制执行。

命名空间排除

默认情况下,RHACS 会从阻止执行中排除某些管理命名空间,例如stackroxkube-systemistio-system命名空间。原因是必须部署这些命名空间中的某些项目才能使 RHACS 正确工作。

对现有部署的强制执行

对于现有部署,策略更改只会导致在下次检测到标准时(发生 Kubernetes 事件时)执行强制执行。如果更改了策略,则必须通过选择策略管理并单击重新评估所有来重新评估策略。此操作会将部署策略应用于所有现有部署,而不管是否有任何新的传入 Kubernetes 事件。如果违反了策略,则 RHACS 会执行强制执行。

共享安全策略

从 Red Hat Advanced Cluster Security for Kubernetes 3.0.44 版开始,您可以通过导出和导入策略在不同的 Central 实例之间共享安全策略。共享策略有助于您对所有集群强制执行相同的标准。要共享策略,您可以将其导出为 JSON 文件,然后将其导入回另一个 Central 实例。

目前,无法使用 RHACS 门户一次导出多个安全策略。但是,您可以使用 API 导出多个安全策略。在 RHACS 门户中,转到帮助API 参考以查看 API 参考。

导出安全策略

导出策略时,它包含所有策略内容,还包括集群范围、集群排除和所有已配置的通知。

步骤
  1. 在 RHACS 门户中,转到平台配置策略管理

  2. 策略页面上,选择要编辑的策略。

  3. 选择操作将策略导出到 JSON

导入安全策略

您可以从 RHACS 门户上的系统策略视图导入安全策略。

步骤
  1. 在 RHACS 门户中,转到平台配置策略管理

  2. 单击导入策略

  3. 导入策略 JSON对话框中,单击上传并选择要上传的 JSON 文件。

  4. 单击开始导入

RHACS 中的每个安全策略都有一个唯一的 ID (UID) 和一个唯一的名称。导入策略时,RHACS 会如下处理上传的策略

  • 如果导入的策略 UID 和名称与任何现有策略都不匹配,则 RHACS 会创建一个新策略。

  • 如果导入的策略与现有策略具有相同的 UID,但名称不同,则您可以:

    • 保留两个策略。RHACS 会使用新的 UID 保存导入的策略。

    • 用导入的策略替换现有策略。

  • 如果导入的策略与现有策略具有相同的名称,但 UID 不同,则您可以:

    • 为导入的策略提供新名称以保留两个策略。

    • 用导入的策略替换现有策略。

  • 如果导入的策略与现有策略具有相同的名称和 UID,则 Red Hat Advanced Cluster Security for Kubernetes 会检查策略标准是否与现有策略匹配。如果策略标准匹配,RHACS 将保留现有策略并显示成功消息。如果策略标准不匹配,则您可以:

    • 为导入的策略提供新名称以保留两个策略。

    • 用导入的策略替换现有策略。

  • 如果导入到同一 Central 实例,RHACS 将使用所有导出的字段。

  • 如果导入到不同的 Central 实例,RHACS 将省略某些字段,例如集群范围、集群排除和通知。RHACS 会在消息中显示这些省略的字段。这些字段因安装而异,您无法将它们从一个 Central 实例迁移到另一个 Central 实例。