<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Overview on Scrutineer</title>
    <link>http://scrutineer.sh/docs/</link>
    <description>Recent content in Overview on Scrutineer</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Sun, 12 Jul 2026 00:00:00 -0700</lastBuildDate>
    <atom:link href="http://scrutineer.sh/docs/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>FAQ</title>
      <link>http://scrutineer.sh/docs/faq/</link>
      <pubDate>Sun, 12 Jul 2026 00:00:00 -0700</pubDate>
      <guid>http://scrutineer.sh/docs/faq/</guid>
      <description>Why not just a firewall, a service mesh, or a CNI? Honest comparisons and the reasoning behind the enforcement model.</description>
      <content:encoded><![CDATA[<p>The questions a technical evaluator asks first — answered with the boundaries stated,
not hidden.</p>
<details class="docs-details" id="diy">
  <summary>Couldn&#39;t I build this myself with an egress proxy and a NetworkPolicy?</summary>
  <div class="docs-details-body">
    <p>The <em>mechanism</em> — yes, deliberately so. Scrutineer&rsquo;s data plane is commodity on
purpose: a per-session Envoy and a default-deny NetworkPolicy, portable to any
conformant cluster. A competent team can stand that up in an afternoon.</p>
<p>The product is what makes the mechanism a <em>guarantee</em>:</p>
<table>
	<thead>
			<tr>
					<th>A proxy pod + NetworkPolicy gives you</th>
					<th>What the DIY version is missing</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td>A policy object that <em>should</em> deny traffic</td>
					<td>Proof that it does. On a CNI that ignores NetworkPolicy the lock is a <strong>silent no-op</strong>. Scrutineer probes the CNI and <strong>refuses</strong> enforced sessions rather than degrade.</td>
			</tr>
			<tr>
					<td>One shared, long-lived proxy</td>
					<td>Per-session isolation: a dedicated proxy per session, own identity, torn down with it. Attribution is structural; blast radius is one session.</td>
			</tr>
			<tr>
					<td>Firewall <em>logs</em></td>
					<td><em>Evidence</em>: records authenticated as the proxy pod&rsquo;s own identity, stamped <code>observed</code> server-side, landing in the session&rsquo;s <code>status</code> as an API object.</td>
			</tr>
			<tr>
					<td>DNS egress you probably left open</td>
					<td>No direct DNS at all — the proxy resolves. An open DNS allowance is a ready-made exfil tunnel.</td>
			</tr>
			<tr>
					<td>An allow-list you edit by hand</td>
					<td>Policy as an API: <code>enforced</code> vs <code>audit-only</code> dry-runs, fail-closed live updates, injection-safe validation.</td>
			</tr>
			<tr>
					<td>Blocking</td>
					<td>A session lifecycle: verified-or-refused admission, mid-run approvals, cancellation, credential-empty agent pods.</td>
			</tr>
	</tbody>
</table>
<p>Build all of that and you haven&rsquo;t disproven the product — you&rsquo;ve rebuilt it.</p>

  </div>
</details>

<details class="docs-details" id="cilium">
  <summary>Why not Cilium with toFQDN policies and Hubble?</summary>
  <div class="docs-details-body">
    <p>The strongest existing alternative — and a fine CNI <em>under</em> Scrutineer; the probe will
happily verify it. The differences are the layer above:</p>
<ul>
<li><strong>Portability</strong> — Scrutineer&rsquo;s guarantee is CNI-agnostic; toFQDN ties policy to one CNI.</li>
<li><strong>Name semantics</strong> — toFQDN maps DNS answers to IPs, with the races that implies.
Scrutineer&rsquo;s proxy is handed the <em>name</em> and resolves it itself.</li>
<li><strong>Flows vs. evidence</strong> — Hubble exports flows. Scrutineer records
identity-authenticated decisions bound to a session object, with assurance labels.</li>
<li><strong>No session model</strong> — admission gating, approvals, audit-vs-enforce, one API object
per run.</li>
</ul>

  </div>
</details>

<details class="docs-details" id="cooperation">
  <summary>Does the agent have to cooperate with the proxy?</summary>
  <div class="docs-details-body">
    <p>No — the design assumes it won&rsquo;t. Proxy env is injected so well-behaved HTTP stacks
route automatically; everything else gets nothing. Direct connections die at the CNI,
DNS doesn&rsquo;t resolve. <strong>Through the proxy, or nowhere</strong> — security holds at zero
cooperation; cooperation only buys the agent functionality.</p>
<p>One pain deliberately avoided: Envoy tunnels TLS rather than intercepting it — no MITM
CA to distribute, certificate pinning keeps working.</p>

  </div>
</details>

<details class="docs-details" id="non-http">
  <summary>What about non-HTTP protocols — databases, SSH, raw TCP?</summary>
  <div class="docs-details-body">
    <p>Covered when the client can speak an HTTP <code>CONNECT</code> tunnel (most can, or can be
wrapped): same proxy, same policy, same lock, same <code>observed</code> evidence. Recipes:
<a href="https://github.com/grantbarry29/scrutineer/blob/main/docs/egress-non-http.md">non-HTTP egress guide</a>.</p>
<p>Tools that honor no proxy config at all <strong>fail closed</strong> — no egress rather than
ungoverned egress. Transparent interception for those is
<a href="https://github.com/grantbarry29/scrutineer/issues/64">future work</a>.</p>

  </div>
</details>

<details class="docs-details" id="transparent">
  <summary>Why an explicit proxy instead of transparent interception?</summary>
  <div class="docs-details-body">
    <p>Every transparent option costs privilege somewhere sensitive: iptables in the agent
pod needs <code>NET_ADMIN</code> in the workload being governed; node-level interception needs a
privileged data plane on every node; CNI-native redirect couples the product to one
CNI. The explicit proxy adds <strong>nothing privileged anywhere</strong>.</p>
<p>It also sees destinations as clean <em>names</em> — the policy vocabulary — where transparent
interception sees addresses and reconstructs names from SNI or DNS correlation. The
trade: proxy-oblivious tools fail closed until the
<a href="https://github.com/grantbarry29/scrutineer/issues/64">transparent backend</a> exists.
But the steering mechanism was never the security boundary — the lock is.</p>

  </div>
</details>

]]></content:encoded>
    </item>
  </channel>
</rss>
