Skip to content

Commit d4c9855

Browse files
RoyLinRoyLin
authored andcommitted
release: v0.3.0 — external intervention interface (enforcement), KVM-validated
Enforcement runtime-validated end-to-end in a user-authorized throwaway non-prod KVM VM: the cgroup/connect4 guard returns EPERM for the policy-denied IP for a process IN the guarded cgroup, while the same IP from outside the cgroup and a non-denied IP inside it are NOT blocked -> deny + scoping + fail-open proven. Version 0.2.5 -> 0.3.0.
1 parent c066ab5 commit d4c9855

6 files changed

Lines changed: 20 additions & 17 deletions

File tree

CHANGELOG.md

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,21 @@
22

33
All notable changes to a3s-observer will be documented in this file.
44

5-
## [Unreleased]
5+
## [0.3.0] — external intervention interface (enforcement)
66

77
### Added
88

9-
- **Enforcement — external intervention interface implemented** (opt-in; see
10-
`docs/enforcement.md`). A `cgroup/connect4` egress guard (`egress_guard` + the
11-
`DENY_EGRESS` map) plus `a3s-observer-enforce`, which attaches the guard to a target cgroup
12-
and populates the deny map from an **external policy file** (one IPv4/hostname per line,
13-
hot-reloaded every 2s) — the language-agnostic external interface. Cgroup-scoped, fail-open.
14-
**Builds clean on KVM.** Runtime validation (actual blocking) is intentionally **not** run
15-
on the shared prod node — blocking real egress there is off-limits — so it is **pending a
16-
non-prod box**.
9+
- **Enforcement — opt-in external intervention interface** (see `docs/enforcement.md`). A
10+
`cgroup/connect4` egress guard (`egress_guard` + `DENY_EGRESS`) + `a3s-observer-enforce`,
11+
which attaches the guard to a target cgroup and populates the deny map from an **external
12+
policy file** (IPv4/hostname per line, hot-reloaded) — the language-agnostic external
13+
interface. Plus the in-process `Policy`/`Verdict` contract, a CI-tested policy parser, and a
14+
worked external controller (`scripts/example-controller.py`: NDJSON → provider allow-list →
15+
deny-file). Cgroup-scoped, fail-open; the observe-only core is unaffected.
16+
- **Validated end-to-end in a throwaway KVM VM** (non-prod — never the shared prod node): a
17+
process *in* the guarded cgroup gets `EPERM` connecting to the denied IP, while the same IP
18+
from *outside* the cgroup and a non-denied IP *inside* it are **not** blocked — proving deny
19+
+ scoping + fail-open. Codified in `scripts/validate-enforcement.sh`.
1720

1821
## [0.2.5] — operator polish + enforcement design
1922

Cargo.lock

Lines changed: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "a3s-observer"
3-
version = "0.2.5"
3+
version = "0.3.0"
44
edition = "2021"
55
license = "MIT"
66
description = "General-purpose, language-agnostic eBPF observability for AI agents (LLM calls, tools, files, network egress)."

a3s-observer-collector/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "a3s-observer-collector"
3-
version = "0.2.5"
3+
version = "0.3.0"
44
edition = "2021"
55
license = "MIT"
66
description = "a3s-observer collector: loads the eBPF probes and exports enriched events."

a3s-observer-common/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "a3s-observer-common"
3-
version = "0.2.5"
3+
version = "0.3.0"
44
edition = "2021"
55
license = "MIT"
66
description = "Shared no_std types crossing the eBPF <-> userspace boundary for a3s-observer."

a3s-observer-ebpf/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "a3s-observer-ebpf"
3-
version = "0.2.5"
3+
version = "0.3.0"
44
edition = "2021"
55
license = "MIT"
66
publish = false

0 commit comments

Comments
 (0)