Populated example · illustrative figures (target-state format)
Keystone · Executive View · Q_ FY__

Identity coverage & cost — what we govern, what's in transition, and what it costs per unit.

Total run rises as we pull ungoverned identity risk into managed control. What must fall is cost per identity and cost per app. Every Invest dollar funds a move from unknown → transition → governed.

Program health · governed of universe
63%
±6% band · all identities, human + NHI
63% governed
Stage 01 — Bring into control
Govern
Pull unknown accounts into view, then into managed control — the coverage the whole program is measured against.
63%
of universe governed · ±6% band
Blended maturityAll identities
Governed63%
Transition24%
Unknown13%
$5.2M one-time
Stage 02 — Fund the move
Invest
One-time capital that funds the shift from unknown to governed — where this cycle's dollars go.
$5.2M
invest ask · this cycle
Where it goes100%
Software & platform$2.1M40%
Professional services$1.6M31%
Internal build labor$1.1M21%
Contingency$0.4M8%
Run $2.4M / yr▼ $1.1M by steady
Stage 03 — Operate & bend the cost
Run
Operate what we govern — while unit cost per identity and per app bends down as coverage scales.
$2.4M→ ~$1.1M steady · −54%
run / yr · peaks, then bends down as automation compounds
Run $/yr Governed apps
$2.4M CROSSOVER $1.1M 300 apps RAMP · PEAK BEND DOWN FLAT
Yr 1Yr 3Yr 5Steady
01

The first step to governance is getting the app in view

Before an identity can be governed, its application has to be onboarded — that's what turns unknown accounts into visible orphans we can act on. This tracks that first move at the application level.

58% onboarded & governed
27% in progress
15% not yet in view
58% onboarded & governed 27% in progress 15% not yet in view
312 applications in scope▲ 9 onboarded this quarter
02

Coverage & cost by capability

maturity · 6Q trend · cost — click a row for the full trajectory
Governed — lifecycle, owner, certification
Transition — onboarded, orphans in view, being managed
Unknown — black box · inferred estimate, ungoverned
Capability
Maturity / Coverage
Governed trend · 6Q
Run/unitInvestFuture
Core access & governance
IGA — lifecycle & cert
SailPoint ISC · identities
67%
19%
14%
12,400 gov · 3,600 trans · ~2,500 unk · ~18,500 total
▲ +28 pts39→67%trend ▾
Run
$11
was $13
Invest
$420K
Future
−$7K
IGA — lifecycle & cert · governed % by quarter▲ +28 pts over 6 quarters (39% → 67%)
0%25%50%75%100%39%51%62%67%Q1'24Q2'24Q3'24Q4'24Q1'25Q2'25
SSO / Directory
Okta · AD/LDAP · apps + accounts
71%
14%
15%
federation + MFA + directory, blended · mixed units
▲ +17 pts54→71%trend ▾
Run
blend
↓ per app
Invest
$1.1M
Future
+$83K
SSO / Directory · governed % by quarter▲ +17 pts over 6 quarters (54% → 71%)
0%25%50%75%100%54%62%69%71%Q1'24Q2'24Q3'24Q4'24Q1'25Q2'25
Privileged & secrets
PAM — privileged & secrets
CyberArk · Vault · priv accts + secrets
24%
37%
39%
privileged sessions + secrets, blended · high unknown
▲ +9 pts15→24%trend ▾
Run
$180
was $205
Invest
$1.32M
Future
+$30K
PAM — privileged & secrets · governed % by quarter▲ +9 pts over 6 quarters (15% → 24%)
0%25%50%75%100%15%19%23%24%Q1'24Q2'24Q3'24Q4'24Q1'25Q2'25
PKI — certificate identities
PKI · certs
52%
18%
30%
2,600 gov · 900 trans · ~1,500 unk · ~5,000 certs
▲ +22 pts30→52%trend ▾
Run
$6
was $7
Invest
$260K
Future
−$10K
PKI — certificate identities · governed % by quarter▲ +22 pts over 6 quarters (30% → 52%)
0%25%50%75%100%30%42%49%52%Q1'24Q2'24Q3'24Q4'24Q1'25Q2'25
Non-human / emerging — the frontier
Non-human & agentic
Cloud IAM · Vault · agentic · NHIs + agent IDs
37%
58% unknown
5% gov · 22,000 trans · ~35,000+ unk · ~60,100 NHIs — largest black box
▲ +1 pts4→5%trend ▾
Run
$3
was $4
Invest
$1.2M
Future
−$31K
Non-human & agentic · governed % by quarter▲ +1 pts over 6 quarters (4% → 5%)
0%25%50%75%100%4%4%5%5%Q1'24Q2'24Q3'24Q4'24Q1'25Q2'25
03

Delivery & staffing

the labor behind the Run line · $4.5M
Workforce mix — 42 total
24FTE employees
18Contractors
FTE 57% · retained core Contractor 43% · flex capacity
Location strategy — US / India / Canada
16United States
20India
6Canada
US 38% · architecture, escalations, regulated access India 48% · build & run scale Canada 14% · near-shore ops
blended rate ▼ 12%
year over year

Delivery mix weighted toward India and Canada bends the blended labor rate — the primary driver behind the per-unit Run declines shown above. US capacity held for architecture, escalations, and regulated-data access that can't move offshore.

METHOD · Governed = under lifecycle + ownership + certification. Transition = application onboarded, accounts now visible and being remediated. Unknown = presence inferred from spend / traffic / auth logs; a best-guess estimate with a stated confidence band, not a hard count. Run shown per unit, never as a total. Future Run = the run-delta each Invest leaves — a schedule (year-1 shown; amortization rolls off after useful life, savings ramp in), not a flat figure (↓ reduces, ↑ absorbs + internalizes risk).
SAMPLE — replace with Metrics team data
Populated example · illustrative figures (target-state format)
Keystone · Risk Posture · Q_ FY__

Can we stop a threat actor? — where an identity attacker is contained, seen, or free to move.

Credentials will be phished and secrets will leak — the industry data is unambiguous. The program's value is what happens next: how far an adversary progresses before we cut them off.

Attack-chain containment
48%
can prevent / auto-stop · 78% at least detected
ASSUME BREACH · we measure the program by how quickly and how early we end the intrusion — not by pretending it won't start
01

The identity attack chain

left → right: the adversary's journey · where we stop them, where they move freely, where the money goes
Contained — attacker prevented / auto-stopped here
Detected only — we'd see it, response is manual · a window opens
Blind — no prevention, no detection · they move freely
02

How bad, how fast, versus whom

blast radius · speed race · the adversary benchmark

Blast radius — how bad if one identity falls

A compromised identity that reaches 2 systems is an incident; one that reaches 200 is a catastrophe. This is the size of the explosion.

18%
avg identity's reach into crown-jewel systems
63%
privileged access that is standing / always-on (vs JIT)
42
avg entitlements per identity
214
toxic access combinations flagged

Our clock vs theirs — the speed race

The adversary has a known tempo. If we detect and contain the identity before they act, the breach is a non-event.

We detect + contain in <8 hours — well inside the adversary's action window, and far ahead of the industry's 246-day credential-breach detection. The race is won on the identity layer.

The adversary benchmark — what the average shop leaves open

The same identity gaps drive most breaches industry-wide. Every figure below is a door we've already moved to close.

39%
of breach chains involve credential abuse
VERIZON DBIR 2026
$4.67M
avg stolen-credential breach · 246 days to detect
IBM COST OF A BREACH 2025
109:1
machine-to-human identity ratio · +77%/yr projected
PALO ALTO / CYBERARK 2026
97%
of AI-incident orgs lacked proper access controls
IBM 2025
03

Closing the blind stages

lightweight invest · framed as exposure reduction, not run cost
Blind stageCapability that closes itInvestExposure (blind %)
Total3 gates hardened$2.9M32% avg13% avg
METHOD · Readiness per stage = share of that stage's dominant-capability coverage that is preventive (Contained), monitored-only (Detected), or absent (Blind). Containment % = mean Contained across the six stages. Clock figures = mean time to detect + contain a flagged identity vs. published industry dwell times. Blast radius derived from entitlement, standing-privilege, and attack-path analysis. Benchmark figures cited inline. All figures illustrative — replace with actuals.
SAMPLE — replace with Metrics team data
Populated example · illustrative figures (target-state format)
Keystone · Metric Dictionary & Data Lineage · Q_ FY__

The numbers behind the story — every figure on the Operations and Risk pages, traced to source and formula.

Every number on the prior two pages traces to a system of record and a defined formula. Nothing here is a guess we can't show our work on. Where a figure is an estimate or not yet fully instrumented, we say so plainly — that transparency is what makes the confident numbers trustworthy.

Confidence — how much to trust each number
Hard countEnumerablecounted directly from a system of record
DerivedCalculatedcomputed from other measured metrics
ModeledAllocatedfrom the finance cost-allocation model
EstimateRangedinferred denominator, stated band
Target-statePending toolingnot yet fully instrumented
CitedExternalpublished benchmark, attributed
00

Foundational definitions

the terms every metric depends on, settled once
01

Most scrutinized metrics

the derived & estimated figures an exec pokes first · all repeat in the full catalog below
These carry the most interpretive weight — hero numbers, derived rollups, and estimates. Each is fully defined here and again in the complete catalog.
MetricWhat it meansFormulaSource(s)CadenceConfidence
02

Complete metric catalog

every metric type · logic documented once, values in the appendices
Appendix A — Operations values, per capability (every raw number)
Appendix B — Risk values, per attack stage (every raw number)
03

Benchmark citations

external figures — not our measurements · separated on purpose
LINEAGE · This dictionary is the source of truth for the Operations and Risk pages. Metric IDs cross-reference the figure they feed. "Formula" states the numerator/denominator or calculation logic; "Source" names the system(s) of record; "Confidence" flags whether a number is a hard count, a derived calculation, a modeled cost, a ranged estimate, a target-state figure pending tooling, or an external citation. All values illustrative — replace with actuals.
SAMPLE — replace with Metrics team data
Keystone · Workforce · Request access

Request access — ask or browse, side by side

found → requested in under 3 min

Describe what you need on the left, or browse applications on the right — both open at once. Either path drafts the same governed request, tracked under My requests.

 Assistant — I can request access or reset your password. I draft; a human approves.
What do you need, Maya?
Describe it in plain language — I'll find the right access and draft the request.
approve regional sales orders access to the finance thing delete my manager's account
I can request access · reset your password — anything else, I'll say so.
Keystone · Workforce · My requests

My requests — every hop, on record

Honest async — submitted → approval → provisioning → done, never a fake instant success. AI-drafted requests are marked; a human always decides.

01

In flight

honest status · nothing hidden
Keystone · Workforce · My access

My access

Your current entitlements, grouped by application, each in context.
Placeholder in this reference.
Keystone · Workforce · Sign-in methods

Sign-in methods

Your factors, assurance chips, and redundancy score (J-W1a).
Placeholder in this reference.
Keystone · Manager · Approvals

Approvals — the 30-second decision, with safe context

Requests waiting on you. Each carries the context that makes a decision safe — who else holds it, the requester's current access, the risk. Decide with a rationale; it's all audited.

01

Waiting on you

3 pending
Keystone · Manager · Team access

Team access

Your team's access at a glance — hold/remove per person, usage signals (J-M4).
Placeholder in this reference.
Keystone · Manager · Requests for others

Requests for others

Request access on behalf of a report (J-M2).
Placeholder in this reference.
Keystone · App-Owner · My applications

Govern your applications — end to end

Everything you manage, at a glance. Open an app to go under the hood — onboard SSO, shape entitlements, design roles with AI, vault credentials, and certify — the governed way, made the easy way.
B
Portfolio governance grade
Solid — one app needs attention
3 apps · 71% governed avg · 12 orphans · 2 certs due
Identity governance · IGA
Lifecycle & certification
71%
governed avg · 2 certifications due
Privileged access · PAM
Credentials & secrets
6
vaulted · 1 attestation overdue
Authentication · SSO
Single sign-on
3 / 3
apps live · OIDC · SAML
01

Owned by you

3 applications · click an app to manage it
Keystone · App-Owner · Certifications

Certifications

Access certification campaigns — keep/remove per holder, SoD + least-privilege (J-A6/A-05).
Placeholder in this reference.
Keystone · App-Owner · Entitlements

Entitlements

The entitlement catalog for your apps — the vocabulary requests compose from (J-A2).
Placeholder in this reference.
Admin guide — rev 1 · illustrative environment names
Metrics admin guideAdmin

The build book — how the pipeline works, and why.

Everything the console operates, explained: the architecture, the operating model, and a recipe for every system of record. The console shows state; this guide shows how and why. Cross-reference by metric ID.

1

Reference architecture

The system is seven decoupled layers. The single most important decision: the dashboard never calls an IAM API. Collectors gather, a store remembers, a transform publishes, and the pages read one static, versioned document. A dashboard holding live credentials to your identity stack is an attack surface; a dashboard reading metrics.json is a webpage.

LayerResponsibilityReference implementation
Source registryRoutes every source to exactly one collector; enforces the count-once ruleregistry.json in repo
Secrets backboneRead-only service accounts, one per system, resolved at runtimePAM / secrets vault (existing)
CollectorsOne script per system; uniform output envelopePython · Lambda (cloud) + domain-joined runner (AD/LDAP)
Snapshot storeAppend-only, period-keyed raw counts; never overwrittenDynamoDB / versioned repo dir
Manual intakeModeled + cited figures via reviewed templatesPR-reviewed JSON templates
Transform + publishDerives, validates, emits the data contract; fails loudlyLambda on EventBridge schedule
Data contractVersioned schema keyed by metric ID; the SPA's only inputmetrics.json + JSON Schema
Model citizenship. The metrics pipeline must be a model citizen of the controls it measures: vaulted credentials, least privilege, read-only everywhere, full audit. If the measurement system can't pass its own dashboard, nothing it publishes is credible.

Every collector emits the same envelope regardless of source, which is what keeps the transform simple:

{
  "source_id": "okta-prod",
  "collected_at": "2026-07-01T06:00:14Z",
  "collector_version": "1.4.0",
  "counts": { "apps_active_sso": 180, "users_mfa_enrolled": 11240, ... }
}
2

Operating model

The rule that makes the model simple and repeatable: the system computes every state except one, and the admin owns exactly one verb per object type.

Connections — Configure → Test → Apply

  • Configure saves metadata as a draft. Tenant URLs, client IDs, scopes, and a vault path reference — never a credential value.
  • Test runs one scoped, read-only probe. It exists as a separate verb so a typo is caught before it poisons a collection cycle.
  • Apply commits the verified connection to the source registry. Collectors include it from the next cycle. A connection whose last collection failed shows Degraded — computed, never hidden.

Metrics — Blocked → Collecting → Staged → Published

  • Blocked: one or more required sources unconfigured. The chips show exactly which.
  • Collecting: sources active, awaiting the first validated snapshot. Automatic.
  • Staged: data flowing, visible to admins only. This is where "that ratio can't be right" gets caught before an executive ever sees it.
  • Published: the single human promotion, per metric, reversible, audited.

The cascade

Derived metrics and page composites are never toggled directly — an artifact's state is the minimum of its inputs' states. A derived metric can be published only when every input is published; unpublishing an input automatically demotes everything above it. Composites (the kill chain, the hero stat) render each sub-element whose inputs are all published and show "not yet instrumented" for the rest — the dashboard depicts its own instrumentation coverage in the same visual language it uses for identity coverage.

The exec guarantees

  • Every visible number has passed a human staged review.
  • Every gap is explicit — and carries the registry's onboarding target date where one exists.
  • The dashboard only ever grows or explains itself. A silently vanishing number is a credibility incident; unpublish leaves the placeholder.

The admin's month

Connections green (fight any Degraded) → scheduled collection runs → review staged deltas — the console flags any metric that moved beyond its threshold → publish decisions → done. Per planning cycle, the manual intake templates land and flow through the same staged review. Nothing depends on memory or heroics.

3

Source registry & the count-once rule

The invariant: every identity is counted exactly once, by exactly one authoritative collector, and which collector that is falls out of the source's onboarding state. Double-counting the denominator is the fastest way to lose executive trust in every number downstream.
Registry stateAuthoritative counterFeeds
connectedISC Search — the only counter for that source. Direct collectors forbidden. Governed + Transition (ISC's own correlated / uncorrelated split)
enumerableDirect collector (AD / Graph / ldap3) — everything it counts is Transition by definition Category A · each disconnected source's count is its onboarding business case, sized in identities
inferredNo enumeration — app counts, spend signalsCategory B

The cutover ritual

When a source flips from enumerable to connected, run the direct collector one final cycle against the ISC count for that source. Variance within tolerance → retire the collector, flip the registry state. Variance outside tolerance → the ISC aggregation config has a gap (filter scoping, OU exclusions, correlation rules) and you caught it before the dashboard published a wrong number. Dual-counting is legitimate exactly once — at handoff.

4

System recipes

One recipe per system of record: auth setup, the least-privilege service account spec, endpoints per metric, and the gotchas that cost a day each if learned the hard way. Vendor URLs and versions current as of this revision — verify against the vendor's developer docs at build time.

SailPoint ISC

Auth & service account

OAuth2 client credentials via a Personal Access Token pair, scoped read-only (sp:scopes: idn:accounts:read, idn:search:read class of scopes). Store the client secret in the vault; the connection record holds only the tenant URL, client ID, and vault path.

Core technique — Search aggregations, not entity paging

ISC Search runs on an Elasticsearch backend and covers identities, roles, access profiles, entitlements, events, and account activities. Use aggregation queries so a governed-count is one call, not a 50,000-record pull:

# POST /v3/search — count identities by lifecycle state (feeds 1.4 / 1.5)
{
  "indices": ["identities"],
  "query": { "query": "attributes.cloudLifecycleState:active" },
  "aggregationsDsl": { "by_state": { "terms": { "field": "attributes.cloudLifecycleState.exact" } } }
}
FeedsEndpoint / technique
1.4 · 1.5Search aggregation on identities by lifecycle + correlation; GET /v3/accounts?filters=uncorrelated eq true for the transition split within connected sources
2.8Search aggregation — avg entitlement count per identity
2.9SoD policy violation APIs — count of active violations
2.5 · 2.6Entitlement joins against the crown-jewel app list (+ attack-path tooling where present)
Gotcha: Search data is ingested from the operational stores with latency (seconds to minutes). Fine for monthly metrics — but never diff same-day search counts against entity-API counts and call it drift.

CyberArk

Auth — two deployment paths

  • Self-hosted: POST /PasswordVault/API/Auth/CyberArk/Logon (or LDAP/SAML variants) returns a session token used in the Authorization header of every subsequent call.
  • Privilege Cloud (ISPSS): a CyberArk Identity service user obtains an OAuth bearer token from the Identity tenant, then calls the same PasswordVault API surface.
The permission that matters: the collector's safe membership gets List Accounts — never Retrieve. The collector counts accounts; it must be structurally incapable of reading a password. Audit permissions plus List on in-scope safes is the whole spec.
FeedsEndpoint / technique
2.7 (numerator)GET /PasswordVault/API/Accounts — vaulted account count, paged, filtered to privileged platforms
1.4 (PAM row)Same call grouped by safe/platform
2.7 (denominator)Not CyberArk. Directory-privileged accounts from the AD recipe — vaulted ÷ directory-privileged is the honest ratio; CyberArk only knows accounts it already has

HashiCorp Vault

Auth & policy

AppRole with a policy granting exactly list on the KV metadata/ paths in scope plus read on sys/internal/counters/activity. Listing KV v2 requires the list capability on the /metadata/ path specifically — that sentence is the collector's entire ACL.

FeedsEndpoint / technique
1.4 (secrets row)Recursive LIST {mount}/metadata/ per mount — secret counts
NHI ratioGET /v1/sys/internal/counters/activityentity vs non-entity clients per namespace and mount: a native human-vs-machine consumer split, free

Okta

Auth & service account

An API service app with scoped OAuth 2.0 tokens — okta.apps.read, okta.users.read, okta.logs.read and nothing else. Okta recommends scoped OAuth over legacy SSWS tokens precisely because the scopes bound what the bearer can touch.

FeedsEndpoint / technique
1.7 · 1.8GET /api/v1/apps — active apps by signOnMode = the SSO-governed app count
MFA rowGET /api/v1/users/{id}/factors per user — enrolled factor coverage
2.3 (auth stage)System Log GET /api/v1/logs — auth event signals
Gotcha: pagination is cursor-based via Link response headers — follow them verbatim; constructing your own page URLs silently undercounts large orgs. MFA coverage is a per-user fan-out (no bulk report API): iterate with backoff, or sample and label the confidence.

Entra ID (Microsoft Graph)

Auth & service account

App registration, client-credentials flow, application permissions: User.Read.All, Reports.Read.All, AuditLog.Read.All, Application.Read.All.

FeedsEndpoint / technique
1.3 · 1.6GET /v1.0/users with $filter/$count — enabled / member / guest splits; stale via signInActivity.lastSignInDateTime (premium license)
MFA rowGET /v1.0/reports/authenticationMethods/userRegistrationDetails — per-user isMfaRegistered, isMfaCapable, isPasswordlessCapable
NHI rowGET /v1.0/servicePrincipals — every service principal is an NHI; cloud-side inventory
Gotchas: the registration-details report excludes disabled users — the denominator must be enabled users. Advanced $filters need the ConsistencyLevel: eventual header. Follow @odata.nextLink; handle 429 throttling with backoff.

Active Directory (on-prem)

No REST API, and not reachable from cloud CI — the AD collector runs on a domain-joined runner inside the network (PowerShell AD module or Python ldap3 against the DCs). This is the one collector class that forces the hybrid-runner note in the architecture.

# Privileged group membership — the honest denominator for 2.7
Get-ADGroupMember "Domain Admins" -Recursive | Measure-Object
# Stale accounts — lastLogonTimestamp older than 90 days
Search-ADAccount -AccountInactive -TimeSpan 90.00:00:00 -UsersOnly | Measure-Object
# On-prem NHI denominator — SPN-bearing accounts (also the kerberoastable set)
Get-ADUser -Filter { ServicePrincipalName -like "*" } | Measure-Object
FeedsTechnique
2.7 (denom)Recursive privileged group enumeration (Domain / Enterprise / Schema Admins + delegated tiers)
2.3 (cred stage)Credential hygiene flags — ancient pwdLastSet, password-never-expires, Kerberos pre-auth disabled
Cat. A countsEnabled / disabled / stale user + computer counts per disconnected domain
Gotcha: lastLogonTimestamp replicates with up to ~14 days of slop — document it as approximate; never present staleness as exact.

Generic LDAP + adapter contracts

One parameterized ldap3 collector serves every instance. Each registers a small config — host, read-only bind DN (vault path), base DN, object-class filter, and the two or three count queries it must answer. Workday, SIEM, and CMDB/CASB follow the same pattern one level up: the pipeline defines the fields it needs (headcount for denominators, incident timestamps for 2.10, app inventory for 1.7) and each org fulfills the contract with its own export mechanism — Workday RaaS report, SIEM saved search, flat-file drop. Prescribing exact endpoints there would be false precision.

5

Metric crosswalk

The machine-readable heart of the system: every metric → required sources → capture class → cadence. This same document (crosswalk.json) drives the console's dependency engine and the collector configuration — the guide renders it, the console executes it, so they cannot drift. Rendered excerpt (full 36-row table generates from the data file):

IDMetricRequiresClassCadence
1.4Governed count (per capability)isc · okta · cyberark · vaulthardMonthly
1.1Governed identity % (hero)← 1.4 · 1.5 · 1.6derivedMonthly
1.7App governance splitokta · cmdbestimateMonthly
1.11Cost per managed identityintake · ← 1.4modeledQuarterly
2.3Stage readiness (C/D/B)okta · cyberark · vault · isc · siemderivedMonthly
2.7Standing privilege ratiocyberark · adhardMonthly
2.10MTTD + MTTC (our clock)siemtargetPer incident
2.11Attacker tempocitedcitedAnnual

Capture-class distribution across the 36: roughly 40% fully automatable from the four core systems plus directories, 25% derived for free once those land, and the remainder honestly manual — modeled finance figures and annual citations through the intake path. Say that out loud on the page; "here's what can't be automated and why" is half the value of the playbook.

6

Manual intake

Modeled and cited metrics enter through structured template files submitted for review — every number gets a reviewer and a timestamp before it can stage. Manual data goes through the same versioned, reviewed gate as automated data; it just originates from a human instead of an API.

TemplateFeedsCadenceReviewer
Finance cost model1.10–1.14 · 1.22QuarterlyFinance partner
Program business cases1.15–1.19 · 2.13Per cycleProgram lead
Industry benchmark refresh2.11 · 2.12AnnualAny admin — record source + retrieval date
7

Productionizing

This environment runs the full control plane — auth, roles, lifecycle, publish gates, audit — with simulated collectors behind the same interface real ones implement. Taking it live inside your organization is a swap, not a rebuild:

  • Collectors: replace the simulator Lambda with the per-system recipes in chapter 4, one at a time. The registry, lifecycle, and console don't change.
  • Identity: federate the user pool to your IdP; map exec / admin groups to directory groups. The sandbox role stays — every admin console deserves a safe place to learn.
  • Secrets: point the vault-path references at your PAM/secrets platform; grant the collector execution role read on exactly those paths.
  • Runners: stand up the domain-joined runner for AD/LDAP; everything else runs from your cloud scheduler of choice.
  • Snapshot store: the DynamoDB layout graduates to your warehouse when volume or BI integration demands it — the data contract is the stable seam.
Sequence to run: data contract first, then one collector end-to-end (ISC — the eventual center of gravity), then scale out by repetition. The dashboard works from day one on staged mock values; every cycle after that replaces a mocked field with a measured one.
Design mock — simulated console
Metrics admin consoleAdmin

Instrumentation — connections, lifecycle, publish gates.

0 / 36
metrics published
period 2026-07 · last run never · next Aug 01 06:00 UTC
A

Connections

1 of 12 active
B

Metric build status

state = min of inputs · publish is the only human gate
IDMetricSourcesState Staged valuePublishGuide
C

Page composites

inherit only — never toggled directly
D

Manual intake

per-cycle templates · same lifecycle as automated metrics
E

Publish audit log

append-only · who / what / when
No entries yet. Connection and publish actions land here.
Assistant
On record.
sent for approval · logged
View →