ProficientNowTechRFCs

3. Architecture

RFC-PAM-0002                                                    Section 3
Category: Standards Track                                    Architecture

3. Architecture

← Previous: 2. Requirements | Index | Next: 4. Components →


3.1 System Overview

The architecture has two planes. The Azure plane decides whether a person may log in to a host and whether they are root: Entra groups, two Azure RBAC roles, PIM, all declared in Terraform. The host plane decides what a non-root person may do: Linux groups, an allow-listed sudo policy and a wrapped deploy action, delivered by Ansible and kept in agreement with Entra by a synchronisation agent that authenticates with the host's own Arc managed identity. Evidence from both planes lands in Sentinel.

3.2 Two Planes, One Source

QuestionDecided byDeclared inEnforced by
May this person log in to this class?Entra group → VM User LoginTerraform (arc-config map)AADSSHLoginForLinux at connection time
Is this person root right now?PIM activation on pn-host-admin → VM Administrator LoginTerraform (eligible assignment) + PIM policyExtension places active admins in aad_admins
May this person sudo a routine admin command?Entra pn-host-operator → Linux pn_operatorAnsible (sudoers.d allow-list)sudo
May this person write in the project tree?Entra pn-host-editor-<class> → Linux deployAnsible (group + tree ownership)filesystem permissions
May this person deploy?Entra editor/deployer groups → Linux pn_deployerAnsible (sudoers.d rule for pn-deploy as deploy)sudo + wrapper validation
Does the host agree with Entra?pn-access agent, every 5 minutesAnsible (agent + map)agent; drift reported to Sentinel

The single source of truth for who is Entra; for what a group means, Git.

3.3 Authority Domains

DomainAuthorityControllerChange path
Person exists / is enabledEntra IDIT / identity adminsEntra
Person's tiers and classesEntra group membershipPlatform Lead (STD-IDENT-001 RACI "A"), Security ownerEntra group edit (PIM for admin eligibility)
Which groups get which Azure role on which classTerraform map in ovh-infraPlatform Lead via PR (CODEOWNERS)Git PR → Terraform apply
What a tier may do on a hostAnsible roles in ovh-infraPlatform Lead via PRGit PR → Ansible run
Which projects the deploy action may touchRoot-owned allow-list, Ansible-managedPlatform Lead via PRGit PR
Break-glass keysAzure Key VaultSecurity ownerKey Vault, rotation SOP
Evidence and alertsSentinelSecurity ownerSentinel analytics rules (in Git where possible)

No authority is exercised by editing a host directly. Section 11 makes this the definition of "done".

3.4 Trust Boundaries

BoundaryWhat crossesTrust basisWhat must never cross
1. Person → EntraIdentity assertionPassword + MFA under Conditional AccessUnverified identity
2. Entra → Arc/hostLogin decision, root decisionToken validation against the two Azure roles, evaluated per connectionCached authority after group removal (certificates are minutes-lived)
3. Host → GraphGroup membership factsArc managed identity, read-only application permissionAny write to Entra; any secret on the host
4. Human → root / DockerAllow-listed commands; wrapped deploysudo policy with Runas root only; wrapper validating project/verb/serviceShells, editors, su, arbitrary Docker arguments

3.5 Data Flow — Login and Elevation

3.6 Data Flow — Synchronisation and Decommissioning


Document Navigation


End of Section 3

On this page