Chapter 3 — Original contribution proposal
Lesson map
Lesson 03 published. Map, example, EX015.
flowchart TD
N0["Learning outcomes"]
N1["3.1 The contribution"]
N2["3.2 Defining risky"]
N3["3.3 Labelling and agreement"]
N4["Lab — labelling agreement"]
N5["3.4 Lab result"]
N6["3.5 Decision rules"]
N7["Sampling hard cases"]
N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> N6 --> N7
N7 --> EX["Worked example"]
EX --> Q["Exercise EX015"]
Logical drawing
flowchart LR
N0["Learning outcomes"]
N1["3.1 The contribution"]
N2["3.2 Defining risky"]
N3["3.3 Labelling and agreement"]
N4["Lab — labelling agreement"]
N5["3.4 Lab result"]
N6["3.5 Decision rules"]
N7["Sampling hard cases"]
N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> N6 --> N7 --> Q["EX015"]
[Learning outcomes]
|
v
[3.1 The contribution]
|
v
[3.2 Defining risky]
|
v
[3.3 Labelling and agreement]
|
v
[Lab — labelling agreement]
|
v
[3.4 Lab result]
|
v
[3.5 Decision rules]
|
v
[Sampling hard cases]
|
v
[Worked example] --> [Exercise EX015]
Learning outcomes
You will (1) state a testable contribution; (2) define measures and labels; (3) establish reliable labelling of risky configurations; (4) set decision rules before data collection.
3.1 The contribution
Amara proposes two contributions: a measured comparison of exposure windows under scanning and admission enforcement in one organisation, and an open, reusable method for measuring exposure from audit records and configuration history.
The second contribution may outlast the first. A measured result from one organisation will be debated; a method that reconstructs exposure from audit logs and configuration history can be reused by other organisations to test the same question, which is why the archive and the synthetic data generator are part of the contribution, not supplements.
3.2 Defining risky
A configuration is "risky" if it violates selected Baseline or Restricted checks of the Kubernetes Pod Security Standards: privileged containers, host path volumes, running without runAsNonRoot, or allowing privilege escalation. Using a public standard makes the definition checkable by others.
The four checks were chosen because each maps to a concrete harm in SP 800-190's terms: a privileged container or host path volume can reach the node; running as root and allowing privilege escalation widen what a compromised process can do. Limiting the definition to these keeps labels reliable, and the panel can see exactly what "risky" excludes, such as resource limits or image provenance.
3.3 Labelling and agreement
Automated checks can misfire, so two reviewers independently label a sample of findings as real (R) or not real (N). Agreement is measured with Cohen's kappa, interpreted with the bands of Landis and Koch (1977), where values above 0.80 are "almost perfect".
For Amara, labelling matters because the main outcome counts only real risky configurations. If the automated check flagged a workload that genuinely needed host access for a documented reason, and that finding were counted as exposure, the scanning arm would look worse than it is. The label guide therefore states when a documented exception counts as not real.
Lab — labelling agreement
"""Cohen's kappa for two raters labelling synthetic misconfiguration findings (stdlib only)."""
a = "RRRRRRRRRRRRNNNNNNNNRRRNNNRRRRNNNNRRRRRRNNNNNNRRRR"
b = "RRRRRRRRRRRNNNNNNNNNRRRNNRRRRRNNNNRRRRRNNNNNNNRRRR"
n = len(a)
po = sum(x == y for x, y in zip(a, b)) / n
pe = sum((a.count(c) / n) * (b.count(c) / n) for c in "RN")
k = (po - pe) / (1 - pe)
print(f"items {n}, observed agreement {po:.2f}, chance {pe:.2f}, kappa {k:.2f}")
Run with python3 lab_kappa.py. Verified output:
items 50, observed agreement 0.94, chance 0.51, kappa 0.88
3.4 Lab result
Across 50 synthetic findings the reviewers agree on 94%, against 51% expected by chance, giving kappa 0.88, almost perfect agreement. The three disagreements are discussed and the label guide is clarified for workloads that need host access for a documented reason.
Kappa matters here because most findings are real: with such an uneven mix, two reviewers labelling almost everything R would agree often by chance alone. The proposal panel asked exactly this question, and Amara answered with the 51% chance agreement, which raw agreement hides and kappa removes.
3.5 Decision rules
Written before collection: primary outcome median exposure hours; comparison by bootstrap interval; no-effect rule from chapter 1; cost measured as rejection rate with a ceiling of 5% of deployments after the first fortnight.
Writing them first stops the analysis from choosing its own success. If the main result had been a median difference of an hour and a half, the no-effect rule would require Amara to report no effect, however tempting it would be to call it a modest improvement. The cost ceiling works the same way for the rejection rate, and the panel's condition adds one more rule: exception workloads are reported separately.
Sampling hard cases
Half the labelled sample is drawn from workloads with documented host-access needs, the hardest cases.
Worked example
The proposal panel asks why kappa rather than raw agreement. Amara shows that with an uneven mix of labels, chance agreement is high, so raw agreement flatters the labels; kappa corrects for that. The panel then approves the proposal with the condition recorded in 3.5.
Synthetic case. Labels and panel are synthetic.
Errors and limits
High agreement on an easy sample can hide disagreement on hard cases; sample deliberately.
Exercises
- EX015 — Contributions. State the two contributions. Rubric: 3 = measured comparison; reusable method; 2 = partial; 1 = vague; 0 = none.
- EX016 — Risky definition. What makes a configuration risky? Rubric: 3 = selected Pod Security Standards violations; 2 = partial; 1 = vague; 0 = none.
- EX017 — Lab kappa. What did the lab report? Rubric: 3 = 0.94 agreement, 0.51 chance, kappa 0.88; 2 = one; 1 = vague; 0 = none.
- EX018 — Why kappa. Why use kappa over raw agreement? Rubric: 3 = corrects for chance; 2 = partial; 1 = vague; 0 = none.
- EX019 — Cost ceiling. What cost ceiling was set? Rubric: 3 = 5% rejections after fortnight; 2 = partial; 1 = vague; 0 = none.
- EX020 — Panel condition. What condition did the panel set? Rubric: 3 = report exceptions separately; 2 = partial; 1 = vague; 0 = none.
Synthesis
Testable claims need public definitions, reliable labels and rules set in advance.
Continue studying — chapter 03 of 08
← Chapter 02 (draft) · Course chapter index · Chapter 04 (draft) →