8.4 KiB
8.4 KiB
03 — 主机安全
GB/T 22239-2019 第三级「设备和计算安全」控制点映射。 本维度以容器与 Pod为「主机」单元(AgentKit 不直接运维 K8s node)。
1. 维度说明
AgentKit 以容器形态运行在客户 K8s 集群。「主机安全」分为两层:
- 容器/Pod 层(AgentKit 责任):镜像安全、运行时安全上下文、 ServiceAccount、Pod 级 RBAC。
- K8s node 层(客户责任):宿主机操作系统内核加固、node 基线、 主机入侵检测(HIDS)。
AgentKit 自身实现:
- 已实现:非 root 容器、最小权限安全上下文(capabilities drop ALL)、 ServiceAccount 隔离、容器级资源限制。
- P0 补齐项:容器镜像漏洞扫描(CI 集成 Trivy/Grype)、 Pod 安全审计日志采集标准化。
- P1 参考:distroless 基础镜像。
2. GB/T 22239-2019 三级要求(简要)
| 控制点 ID | 要求摘要 |
|---|---|
| HST-01 | 身份鉴别:设备/系统身份标识与鉴别 |
| HST-02 | 访问控制:操作系统/账户权限最小化,远程管理受控 |
| HST-03 | 安全审计:设备审计日志,覆盖系统管理活动 |
| HST-04 | 入侵防范:主机入侵检测,系统加固 |
| HST-05 | 恶意代码防范:主机防病毒,恶意代码检测 |
| HST-06 | 资源控制:CPU/内存/磁盘限制,会话超时 |
| HST-07 | 镜像与补丁管理:系统补丁及时更新,镜像来源可信 |
3. AgentKit 实现映射
3.1 容器镜像安全(HST-07)— 部分已实现 / P0 补齐
已实现
- 多阶段构建:builder + runner 两阶段,最终镜像不含构建工具链。 Dockerfile
- 非 root 用户:runner 阶段创建
appuser(UID 1001 / GID 1001),USER appuser强制非 root 运行。 - 基础镜像:
python:3.11-slim(精简版,比 full 镜像减少攻击面)。 - HEALTHCHECK:内置健康检查
(
/api/v1/health,30s 间隔)。 - 不写字节码:
PYTHONDONTWRITEBYTECODE=1,减少磁盘 .pyc 残留。
P0 补齐项:镜像漏洞扫描
当前状态:P0。CI 流水线未集成容器镜像漏洞扫描。
P0 补齐计划:
- CI 流水线增加 Trivy 扫描步骤:
- name: Trivy scan run: trivy image --severity HIGH,CRITICAL --exit-code 1 fischer-agentkit:${{ github.sha }} - Helm Chart 增加
image.digest字段,部署时使用不可变 digest 而非 tag。 - 镜像签名(cosign)— P1,可选。
3.2 K8s node 安全基线(HST-04 / HST-05)— 待评估
当前状态:待评估。K8s 宿主机由客户运维,AgentKit 不控制 node 操作系统。
客户侧需提供:
- node 操作系统加固基线(CIS Benchmark for Kubernetes / 操作系统)。
- 主机入侵检测(HIDS,如 Falco / OSSEC)。
- 主机防病毒(如客户机房要求)。
AgentKit 侧的缓解:
- Pod
securityContext强制非 root + drop ALL capabilities (values.yamlpodSecurityContext/securityContext段),即使 node 被攻破, 容器逃逸到 root 的难度提升。
3.3 身份鉴别 / ServiceAccount(HST-01)— 已实现
AgentKit Pod 使用专用 ServiceAccount,不共享 default SA:
- ServiceAccount 创建: deploy/helm/agentkit/templates/serviceaccount.yaml
- values 配置:
serviceAccount: create: true name: "" # 留空则用 fullname(专用 SA) annotations: {} # 云厂商 workload identity 注解 - Workload Identity(可选):
workloadIdentity.enabled: true时 注入 projected SA token,用于访问云 KMS / STS (values.yamlworkloadIdentity段)。
Pod 内应用层身份鉴别见 04-application.md §1(SSO + JWT)。
3.4 访问控制 / Pod 级 RBAC(HST-02)— 已实现
- capabilities drop ALL:
(values.yamlsecurityContext: allowPrivilegeEscalation: false capabilities: drop: [ALL]securityContext段) - runAsNonRoot 强制:
podSecurityContext.runAsNonRoot: true, K8s admission 拒绝非 root Pod。 - readOnlyRootFilesystem:当前为
false(agentkit 需写临时文件用于缓存/日志), 通过emptyDir挂载/tmp实现写入隔离 (deployment.yamlvolumes.tmp)。 - privileged: false(默认,未启用特权模式)。
应用层 RBAC(member/operator/admin + 9 权限位)见
04-application.md §2。
3.5 安全审计 / 容器日志(HST-03)— 已实现 + P0 补齐
已实现
- stdout/stderr 标准输出:AgentKit 日志全部输出到 stdout, 由 K8s 日志采集(如 Loki / Fluent Bit)收集。
- OTel trace:每个 Pod 的请求 trace 通过 OTLP 导出到 collector (U1,强制依赖)。
- 审计事件:RBAC 变更、deprovisioning、SCIM 操作写入
auth_audit_log表- OTel span event(audit.py)。
- 终端命令审计:每条终端命令 + 决策(executed/confirmed/blocked/denied)
写入
terminal_audit_logs表 (terminal_security.py)。
P0 补齐项:审计日志标准化采集
当前状态:P0。容器日志采集到客户日志平台的链路未标准化。
P0 补齐计划:
- Helm Chart 增加
logging.fluentBitSidecar选项(可选 sidecar 采集)。 - 审计日志 JSON 化(structured logging),便于 SIEM 解析。
- 与
02-network.md§3.7 的 180 天保留策略协同落地。
3.6 入侵防范(HST-04)— 已实现(容器层)
容器层入侵防范已实现:
- 非 root + drop ALL capabilities:限制容器内可执行的系统调用。
- allowPrivilegeEscalation: false:阻止子进程提权。
- 资源 limits:CPU 1000m / Memory 2Gi 上限,防止容器失控耗尽 node 资源
(values.yaml
resources.limits)。 - Liveness/Readiness 探针:故障 Pod 自动重启
(deployment.yaml
livenessProbe/readinessProbe)。
node 层入侵检测(HIDS)见 §3.2,依赖客户侧。
3.7 资源控制(HST-06)— 已实现
- Pod resources:
resources: requests: { cpu: 250m, memory: 512Mi } limits: { cpu: 1000m, memory: 2Gi } - 应用层限流:RateLimiter IP 维度滑动窗口。
- 会话超时:终端 session 1800s 闲置断开 (terminal_server.py)。
- JWT 短时效:access 15min / refresh 7d (jwt_utils.py)。
4. distroless 基础镜像(P1 参考)
当前状态:P1。当前基础镜像为 python:3.11-slim,含 shell + 包管理器,
攻击面大于 distroless。
P1 升级路径:
- 切换到
gcr.io/distroless/python3-debian12作为 runner 基础镜像。 - 需调整:distroless 无 shell,HEALTHCHECK 的
python -c命令需改为 HTTP 探针(K8s livenessProbe httpGet,已支持)。 - 多阶段构建的 builder 阶段保持
python:3.11-slim(构建工具链需要)。
distroless 不阻碍等保三级认证,但作为安全增强项写入整改计划。
5. 测评建议
- HST-01 / HST-02 / HST-06:直接展示 ServiceAccount + securityContext
- resources 配置即可。
- HST-03:已实现部分展示 audit.py + terminal_security.py, P0 补齐日志标准化采集。
- HST-07:P0 补齐镜像漏洞扫描后展示 Trivy 扫描报告。
- HST-04 / HST-05:容器层已实现,node 层由客户提供 HIDS 证据。