Skip to content

SecOps Least Privilege Report

Audit date: April 15, 2026 Scope: SecOps platform — all identities, permissions, and database access Stories: LPRIV-001 through LPRIV-006

See Detailed Audit for per-story evidence tables.


Identities in Scope

IdentityTypeUsed By
id-secops-prodUser-assigned managed identityca-secops-prod web app Container App
id-agents-prodUser-assigned managed identityContainer App Jobs (orchestrator, AWS, DDE agents)
cirius-findings-trackerApp registrationSSO (MSAL PKCE) and RBAC group lookups
Cirius SecOps BotApp registrationTeams bot — user resolution
secopsadminPostgreSQL login roleca-secops-prodpsql-secops-prod

Current State

id-secops-prod — Web App Managed Identity

RoleScopeRequired For
AcrPullciriusagentsprod (resource)Container image pull
Key Vault Secrets Usercirius-openai-kv-prod (resource)Runtime secrets (API keys, DB URL)

Status: Minimal. No Contributor, Owner, or subscription-level roles.

id-agents-prod — Agents Managed Identity

RoleScopeRequired For
Key Vault Secrets Usercirius-openai-kv-prod (resource)Agent runtime secrets
Log Analytics Readercirius-logging-law-central (resource)KQL queries for all 17+ agents
AcrPullciriusagentsprod (resource)Container image pull
Storage Table Data Contributorciriussecuritymemprod (resource)IOC memory (SecurityMemory table)
Storage Blob Data Contributorciriusarchiveprod (resource)Evidence archive uploads
Cognitive Services OpenAI Usercirius-openai-prod (resource)SecurityAgent LLM triage
ReaderLogging subscriptionAzure resource discovery
Security ReaderLogging subscriptionDefender for Cloud findings

Note: Reader and Security Reader at subscription scope are broader than ideal. All other roles are resource-scoped. See Proposed State for subscription-level scope investigation.

cirius-findings-tracker — Web App Registration

PermissionTypeRequired For
User.ReadDelegatedMSAL PKCE sign-in
GroupMember.Read.AllApplicationRBAC group membership check (SecOps group ffdf1dcb)
User.Read.AllApplicationEntra UPN resolution for rule attribution

Status: Minimal — 3 permissions, all with documented owners.

Cirius SecOps Bot — Bot Registration

PermissionTypeRequired For
User.Read.AllApplicationTeams aadObjectId → UPN resolution

Status: Minimal — 1 permission.

PostgreSQL — Database Access

AccountTypeCurrent Permissions
secopsadminAdministratorFull superuser — ALL privileges on ALL objects

Status: ❌ Over-privileged — application connects as DB admin.


Proposed Tightened State

Priority 1 — PostgreSQL Service Account (LPRIV-003)

Create scoped secops_app role:

  • CONNECT to secops database
  • USAGE, CREATE on public schema (CREATE needed for Alembic migrations)
  • SELECT, INSERT, UPDATE, DELETE on all application tables
  • USAGE, SELECT on all sequences

Risk if not fixed: DB admin compromise gives full data access and ability to drop tables. Effort: Low — SQL script ready in lpriv-secops-audit.md. Rory approval required: Yes — production DB change.

Priority 2 — Investigate Subscription-Level Reader Roles (id-agents-prod)

Reader and Security Reader at subscription scope give read access to all resources in the logging subscription. Investigate whether these can be narrowed to specific resource groups (rg-logging-logs, rg-logging-archive) without breaking agent functionality.

Risk: Lower than Priority 1 — read-only roles don't allow data modification. Effort: Medium — requires testing agents after scope reduction. Note: If Reader is needed for cross-RG resource discovery, document the specific feature and leave it in place.


Delta — What Needs to Change

ChangePriorityStoryStatus
Create secops_app PostgreSQL role, update connection stringHIGHLPRIV-003Pending Rory approval
Investigate subscription-level Reader scope reduction for id-agents-prodMEDIUMLPRIV-007BACKLOG
No other changes neededAll other permissions minimal

SOC2 / HIPAA Mapping

ControlRequirementFinding
HIPAA §164.312(a)(1) — Access controlUnique user identification and least privilegePostgreSQL admin gap identified — remediation in progress
SOC2 CC6.3 — Least privilegeAccess limited to what is necessaryApp reg and managed identities are minimal; DB gap tracked
SOC2 CC6.1 — Logical accessAccess control policy enforcedManaged identity RBAC is correctly scoped; DB requires fix

Document History

DateChangeAuthor
April 2026Initial report — LPRIV-001 through LPRIV-006 completeKobe

Internal use only — Cirius Group