接口说明
VarmorPolicy / VarmorClusterPolicy
字段 | 描述 |
---|---|
apiVersion string | APIVersion 定义了对象这种表示形式的带版本的模式。服务器应将识别出的模式转换为最新的内部值,并可拒绝识别不出的值。更多信息:https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources |
kind string | Kind 是一个字符串值,代表此对象所表示的 REST 资源。服务器可以从客户端提交请求的端点推断出该值。不可更新。采用驼峰命名法。更多信息:https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds |
metadata ObjectMeta | 标准对象的元数据。更多信息:https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata |
spec VarmorPolicySpec | Spec 描述了用于加固目标工作负载的所需策略。 |
status VarmorPolicyStatus | Status 描述了所观察到的策略状态。 |
VarmorPolicySpec
字段 | 描述 |
---|---|
target Target | Target 指定了你想要加固的工作负载及其容器。 |
policy Policy | Policy 指定了你想要使用哪些强制访问控制器、模式,以及规则来加固目标。 |
updateExistingWorkloads bool | 可选字段。UpdateExistingWorkloads 用于指定是否对符合条件的工作负载进行滚动更新,从而在 Policy 创建或删除时,对目标工作负载开启或关闭防护。(默认值:false) 注意:vArmor 只会对 Deployment、StatefulSet、DaemonSet 类型的工作负载进行滚动更新,如果 .spec.target.kind 为 Pod,需要您自行重建 Pod 来开启或关闭防护。 |
Target
字段 | 描述 |
---|---|
kind string | Kind 用于指定防护目标的类型。 可用值: Deployment, StatefulSet, DaemonSet, Pod。 |
name string | 可选字段。Name 用于在策略的命名空间或所有命名空间中指定特定的工作负载。 |
containers string array | 可选字段。Containers 用于指定容器的名称。如果为空,将对工作负载内的所有容器(不包括 initContainers 和 ephemeralContainers)启用沙箱保护。 |
selector LabelSelector | 可选字段。Selector 是一个标签选择器,用于选择策略命名空间或所有命名空间中的工作负载。此字段遵循标准的标签选择器语义。 请注意,selector 字段与 name 字段互斥。 |
Policy
字段 | 描述 |
---|---|
enforcer string | Enforcer 指定使用哪种安全机制进行强制访问控制。 可用值:AppArmor, BPF, Seccomp, AppArmorBPF, AppArmorSeccomp, BPFSeccomp, AppArmorBPFSeccomp |
mode string | Mode 用于指定防护模式。 可用值:AlwaysAllow, RuntimeDefault, EnhanceProtect, BehaviorModeling, DefenseInDepth |
enhanceProtect EnhanceProtect | EnhanceProtect 用于配置 EnhanceProtect 模式。它允许您设置内置规则和自定义规则,以生成保护工作负载的配置文件(即 Profile),并控制配置文件的行为(例如,审计、允许违规行为)。 |
modelingOptions ModelingOptions | ModelingOptions 用于配置 BehaviorModeling 模式。 |
defenseInDepth DefenseInDepth | DefenseInDepth 用于配置 DefenseInDepth 模式。 |
EnhanceProtect
字段 | 描述 |
---|---|
hardeningRules string array | 可选字段。HardeningRules 用于指定要使用的加固类内置规则。 |
attackProtectionRules AttackProtectionRules array | 可选字段。AttackProtectionRules 用于指定要使用的攻击防护类内置规则。 |
vulMitigationRules string array | 可选字段。VulMitigationRules 用于指定要使用的漏洞缓解类内置规则。 |
appArmorRawRules AppArmorRawRules array | 可选字段。AppArmorRawRules 用于设置自定义的 AppArmor 规则。 |
bpfRawRules BpfRawRules array | 可选字段。BpfRawRules 用于设置自定义的 BPF 规则。 |
syscallRawRules LinuxSyscall array | 可选字段。SyscallRawRules 用于设置自定义的 Seccomp 规则。请参考 https://github.com/opencontainers/runtime-spec/blob/main/config-linux.md#seccomp。 |
privileged bool | 可选字段。Privileged 用于确定该策略是否适用于特权容器。如果设置为 false,EnhanceProtect 模式将在 RuntimeDefault 模式之上构建 AppArmor 或 BPF 配置文件。否则,它将在 AlwaysAllow 模式之上构建 AppArmor 或 BPF 配置文件。(默认值:false) 请注意,如果设置为 true,vArmor 将不会为目标工作负载构建 Seccomp 配置文件。 |
auditViolations bool | 可选字段。AuditViolations 用于决定是否对违反强制访问控制规则的操作进行审计。如果设置了此字段,任何检测到的违规行为都将记录到主机中的 /var/log/varmor/violations.log 文件中。请注意,当 allowViolations 字段设置为 false 时,Seccomp 强制访问控制器不支持对违规行为进行审计。(默认值:false) |
allowViolations bool | 可选字段。AllowViolations 用于决定是否允许违反 强制访问控制规则的操作。如果设置了此字段,任何检测到的违规行为都将被允许而不是被阻止,与此同时将生成并记录一个 “ALLOWED” 类型的审计事件。(默认值:false) |
AttackProtectionRules
字段 | 描述 |
---|---|
rules string array | Rules 是要使用的攻击防护类内置规则列表。 |
targets string array | 可选字段。Targets 指定规则所适用的可执行文件。可执行文件必须使用全路径。此功能仅在使用 AppArmor enforcer 时有效。 |
AppArmorRawRules
字段 | 描述 |
---|---|
rules string | Rules 设置自定义的 AppArmor 规则. 您应当自行确保自定义规则符合 AppArmor 语法 。 |
targets string | 可选字段。Targets 指定规则所适用的可执行文件。可执行文件必须使用全路径。 |
BpfRawRules
字段 | 描述 |
---|---|
files FileRule array | 可选字段。Files 指定 了文件访问控制规则。 |
processes FileRule array | 可选字段。Processes 指定了可执行文件访问控制规则。 |
network NetworkRule | 可选字段。Network 指定了网络访问控制规则。 |
ptrace PtraceRule | 可选字段。Ptrace 指定了 ptrace 相关访问控制规则。 |
mounts MountRule array | 可选字段。Mounts 指定了文件挂载访问控制规则。 |
FileRule
字段 | 描述 |
---|---|
pattern string | Pattern 可以是符合策略语法的任意字符串(最大长度为 128 字节),用于匹配文件路径和文件名。 |
permissions string array | Permissions 用于指定文件权限。 可用值: all(*), read(r), write(w), append(a), exec(e) |
NetworkRule
字段 | 描述 |
---|---|
sockets NetworkSocketRule array | 可选字段。Sockets 定义了网络套接字规则列表,用于匹配 socket (2) 操作。 |
egress NetworkEgressRule | 可选字段。Egress 定义了网络出口规则,用于匹配 connect (2) 的流量。 |
PtraceRule
字段 | 描述 |
---|---|
strictMode bool | 可选字段。StrictMode 用于指示是否对所有源进程和目标进程限制 ptrace 操作。如果设置为 false,将允许进程对同一容器内其他进程执行 trace、read 操作,以及允许进程被同一容器内其他进程执行 traceby、readby 操作。如果设置为 true,则将禁止容器内所有进程的 trace、read、traceby、readby 操作。(默认值:false) |
permissions string array | Permissions 用于指明目标容器的哪些与 ptrace 相关的权限应受到限制。 可用值: all(*), trace, traceby, read, readby - trace: 禁止跟踪其他进程 - read: 禁止读取其他进程 - traceby: 禁止被其他进程跟踪(宿主机进程除外) - readby: 禁止被其他进程读取(宿主机进程除外) trace 和 traceby 权限用于写操作,或其他更危险的操作。例如使用 ptrace 附加到另一个进程,或调用 process_vm_writev(2)。 read, readby 权限用于读操作,或其他危险程度较低的操作。例如 get_robust_list(2); kcmp(2); 读取 /proc/pid/auxv; 读取 /proc/pid/environ; 读取 /proc/pid/stat; 读取 /proc/pid/ns/* 等。 |
MountRule
字段 | 描述 |
---|---|
sourcePattern string | SourcePattern 可以是符合策略语法的任意字符串(最大长度为 128 字节),用于匹配 mount (2) 的源参数、umount (2) 的目标参数以及 move_mount (2) 的 from_pathname 参数。 |
fstype string | Fstype 用于指定要进行访问控制的文件系统类型(最大长度为 16 字节)。它可以是 * ,以匹配任何类型。 |
flags string array | Flags 用于指定要进行访问控制的挂载标志. 它们与 AppArmor 的 MOUNT FLAGS LIST 类似. 可用值: all(*), ro(r, read-only), rw(w), suid, nosuid, dev, nodev, exec, noexec, sync, async, mand, nomand, dirsync, atime, noatime, diratime, nodiratime, silent, loud, relatime, norelatime, iversion, noiversion, strictatime, nostrictatime, remount, bind(B), move(M), rbind(R), make-unbindable, make-private(private), make-slave(slave), make-shared(shared), make-runbindable, make-rprivate, make-rslave, make-rshared, umount |
NetworkSocketRule
字段 | 描述 |
---|---|
domains string array | 可选字段。Domains 指定了套接字的通信域。 可用值: all(*), unix, inet, ax25, ipx, appletalk, netrom, bridge, atmpvc, x25, inet6, rose, netbeui, security, key, netlink, packet, ash, econet, atmsvc, rds, sna, irda, pppox, wanpipe, llc, ib, mpls, can, tipc, bluetooth, iucv, rxrpc, isdn, phonet, ieee802154, caif, alg, nfc, vsock, kcm, qipcrtr, smc, xdp, mctp |
types string array | 可选字段。Types 指定了套接字的通信语义。 可用值: all(*), stream, dgram, raw, rdm, seqpacket, dccp, packet |
protocols string array | 可选字段。Protocols 指定了要与套接字一起使用的特定协议。 可用值: all(*), icmp, tcp, udp 请注意,protocols 和 types 字段互斥。 |
NetworkEgressRule
字段 | 描述 |
---|---|
toDestinations Destination Array | 可选字段。ToDestinations 描述了特定端口的 IP 地址或 IP 地址段,用于匹配其流量。请确保每个 IP/CIDR 目标是唯一的,以避免配置模糊。 |
toServices Service Array | 可选字段。ToServices 描述了 Kubernetes Service 及其 Endpoint,用于匹配其流量。请确保 Service 规则间的选择器不重叠。重叠的规则可能会导致未定义行为。 |
toPods Pod Array | 可选字段。ToPods 用于描述特定端口的 Pod,以匹配其流量。请确保 Pod 规则间的选择器不重叠。重叠的规则可能会导致未定义行为。 |
请注意:
- toDestinations、toEntities、toServices 和 toPods 字段是逻辑“或”关系。
- 在同一字段内,多个规则间也处于逻辑“或”关系。
- 针对同一 Pod、Service、IP 的重叠规则可能会导致意外的端口组合或冲突。
- 系统不保证对重叠目标进行重复数据删除或冲突解决。用户必须确保这些字段中的规则不会重复定义相同的 Pod、Service、IP,以避免出现不可预测的流量控制行为。
- toServices 和 toPods 规则仅在 Kubernetes 版本为 1.21 或更高版本时生效。
Destination
字段 | 描述 |
---|---|
ip string | 可选字段。IP 在特定 IP 上定义此规则。请使用有效的 IP 文本表示形式,或诸如 pod-self 、unspecified 或 localhost 特殊实体。请注意,ip 字段和 cidr 字段是互斥的。- pod-self: 表示 Pod 自身 IP 地址的实体。对于 IPv4 和 IPv6,每个 Pod 最多可分配 1 个地址。 - unspecified: 表示全零地址的实体,具体来说,就是 0.0.0.0 和 ::。 它的全称是未指定地址(Unspecified Address),指的是绑定到所有接口。 - localhost: 代表环回地址的实体,具体来说,就是 127.0.0.1 和 ::1。 |
cidr string | 可选字段。CIDR 在特定的无类别域间路由上定义了此规则。请注意,IP 字段和无类别域间路由字段是互斥的。 |
ports Port array | 可选字段。Ports 在特定端口上定义此规则。此列表中的每个条目使用逻辑 “或” 进行组合。如果此字段为空或不存在,则此规则匹配所有端口。如果此字段存在且至少包含一个条目,则此规则匹配列表中的所有端口。 |
Service
字段 | 描述 |
---|---|
namespace string | 可选字段。Namespace 用于指定 Service 所在的命名空间。 |
name string | 可选字段。Name 通过名称和命名空间对来选择 Service。 |
serviceSelector LabelSelector | 可选字段。ServiceSelector 是一个标签选择器,用于选择 Service。该字段遵循标准的标签选择器语义。它会选择 namespace 中与 serviceSelector 匹配的 Service。如果 namespace 为空或未指定,它会选择所有命名空间中与 serviceSelector 匹配的 Service。请注意,serviceSelector 字段与 name 字段是互斥的。 |
Pod
字段 | 描述 |
---|---|
namespace string | 可选字段。Namespace 用于指定 Pod 所在的命名空间。 |
podSelector LabelSelector | PodSelector 是一个标签选择器,用于选择 Pod。该字段遵循标准的标签选择器语义。它会选择 namespace 中与 podSelector 匹配的 Pod。如果 namespace 为空或未指定,它会选择所有命名空间中与 podSelector 匹配的 Pod。 |
ports Port array | 可选字段。Ports 在特定端口上定义此规则。此列表中的每个条目使用逻辑 “或” 进行组合。如果此字段为空或不存在,则此规则匹配所有端口。如果此字段存在且至少包含一个条目,则此规则匹配列表中的所有端口。 |
Port
字段 | 描述 |
---|---|
port uint16 | Port 是用于匹配流量的端口号。端口号必须在 [1, 65535] 范围内。 |
endPort uint16 | 可选字段。如果设置了结束端口(endPort),则表示端口范围从起始端口 (port)到结束端口(endPort)。结束端口必须大于或等于起始端口,且必须在 [1, 65535] 范围内。 |
ModelingOptions
字段 | 描述 |
---|---|
duration int | Duration 是行为建模所需的分钟数。 |
DefenseInDepth
字段 | 描述 |
---|---|
appArmor AppArmorProfile | 可选字段。AppArmor 为默认拒绝访问控制指定 AppArmor 配置文件和其他自定义规则。 |
seccomp SeccompProfile | 可选字段。Seccomp 为默认拒绝访问控制指定 Seccomp 配置文件和其他自定义规则。 |
allowViolations bool | 可选字段。AllowViolations 用于确定是否允许违反强制访问控制规则的操作。如果设置了此字段,任何检测到的违规行为将被允许而非阻止,与此同时会生成并记录一个 “ALLOWED” 审计事件。这可用于收集违规情况,以改进默认拒绝访问控制的配置文件。如果未设置此字段,任何检测到的违规行为将被阻止,并生成和记录一个 “DENIED” 审计事件。(默认值:false) |
AppArmorProfile
字段 | 描述 |
---|---|
profileType string | ProfileType 指明将应用哪种 AppArmor 配置文件。有效选项包括:BehaviorModel - 将使用通过行为建模模式生成的配置文件。Custom - 将使用在customProfile 字段中定义的自定义配置文件。 |
customProfile string | 可选字段。CustomProfile 保存用户定义的 AppArmor 配置文件内容。它必须是符合 AppArmor 语法的有效配置文件。如果你希望 vArmor 自动将该配置文件应用于目标工作负载,配置文件的名称必须与 ArmorProfile 对象名称匹配。例如: abi <abi/3.0>, #include <tunables/global> profile varmor-demo-demo-4 flags=(attach_disconnected,mediate_deleted) { } 配置文件名称 “varmor-demo-demo-4” 与 ArmorProfile 对象名称相同。 |
appArmorRawRules AppArmorRawRules array | 可选字段。appArmorRawRules 指定自定义的 AppArmor 规则。这些规则将被添加到你指定的 AppArmor 配置文件末尾。 |
SeccompProfile
字段 | 描述 |
---|---|
profileType string | ProfileType 指明将应用哪种 Seccomp 配置文件。有效选项包括:BehaviorModel - 将使用通过行为建模模式生成的配置文件。Custom - 将使用在 customProfile 字段中定义的自定义配置文件。 |
customProfile string | 可选字段。CustomProfile 保存用户定义的 Seccomp 配置文件内容。它必须是符合 Seccomp 语法的有效配置文件。请参考此文档创建自定义配置文件。 |
syscallRawRules LinuxSyscall array | 可选字段。SyscallRawRules 指定自定义 Seccomp 规则。这些规则将添加到您指定的 Seccomp 配置文件末尾。 |
VarmorPolicyStatus
字段 | 描述 |
---|---|
profileName string | ProfileName 是由策略生成的 AppArmor、BPF 和 Seccomp 配置文件的名称。对于命名空间策略,其格式为 varmor-{命名空间}-{名称} ;对于集群范围的策略,其格式为 varmor-cluster-{命名空间}-{名称} 。它等同于由策略创建的 ArmorProfile 对象的名称。 |
conditions VarmorPolicyCondition array | Conditions 是一个条件列表,用于指示策略的状态。它可以包含诸如 Created, Updated, Ready 等条件。 |
ready bool | Ready 用于指示策略配置文件是否已加载。 |
phase string | Phase 用于指示策略的处理阶段。可能的值:Pending, Modeling, Completed, Protecting, Error。 注意:您还可以通过获取与当前 VarmorPolicy、VarmorClusterPolicy 对象相对应的ArmorProfile/status 资源,来查明哪个 varmor-agent 出现错误。 |
VarmorPolicyCondition
字段 | 描述 |
---|---|
type string | 策略的条件类型。 可能的值: Created, Updated, Ready |
status ConditionStatus | 条件的状态。 可能的值:True, False, Unknown。 |
lastTransitionTime Time | 该条件上次从一个状态转换为另一个状态的时间。 |
reason string | 该条件上次发生转换的原因。 |
message string | 便于人类阅读的消息,用于说明转换的详细信息。 |