Skip to content

DDE Privileged Access Review ​

Environment: Azure DDE (tenant ff1c5d68, ciriusdde.com) Scope: Privileged roles and service principals across all DDE subscriptions Purpose: Quarterly review to detect over-provisioned admin access in a HIPAA-relevant customer-facing environment Owner: Rory (architect) — all remediation approved by Rory before merge Remediation repo: azure-dde-infra (separate Terraform PR)


Why This Review Matters ​

DDE is customer-facing Medicare billing. Any permanent admin at subscription scope in DDE represents standing privilege that HIPAA and HITRUST expect to be just-in-time or narrowly scoped. Defender for Cloud surfaces service principals with permanent admin roles at subscription scope as findings that must be remediated or justified.


Identities in Scope ​

Human Identities ​

IdentityTenantExpected RolesExpected Scope
rory@ciriusdde.comDDEGlobal Administrator (PIM-eligible)Entra ID
cirius-breakglass@ciriusdde.comDDEGlobal Administrator (permanent, unsuppressible)Entra ID

Break-glass is permanent and unsuppressible by design. Any activity triggers CRITICAL alert — never add to known-good rules (hard API block in SecOps).

Service Principals ​

Service PrincipalPurposeExpected RoleExpected Scope
github-deploy-main (DDE)Terraform deploy via OIDC federated credentialContributor + User Access Administrator (split: Contributor for resources, UAA for RBAC assignments)Per-subscription, NOT tenant root
kobe-sp (DDE)Read-only inventory for Kobe agentReader + Security ReaderPer-subscription
Any automation SPs for agentsMinimum permission per functionScoped data-plane roles (Key Vault Secrets User, Storage Blob Data Reader, etc.)Resource-scope where possible

Federated credential rule: GitHub org must be Cirius-Group-Inc (exact). OIDC breaks on any other casing.


What Over-Provisioned Access Looks Like ​

Findings to flag during the review:

  1. Owner at subscription scope held by a service principal — almost never justified. Contributor + User Access Administrator provides the same working surface with clearer intent and audit trail.
  2. Contributor at subscription scope on human accounts — should be PIM-eligible or scoped to resource groups.
  3. Permanent (non-PIM) assignments of Global Administrator, Privileged Role Administrator, User Administrator on humans — must be PIM-eligible with activation justification.
  4. Any assignment on the tenant root management group that isn't explicitly required — prefer subscription scope.
  5. Legacy or decommissioned service principals still holding active role assignments — remove the SP entirely, don't just unassign.
  6. Classic administrator assignments (Co-Administrator, Account Administrator) — must be zero across DDE subscriptions.
  7. github-deploy-main scoped to tenant root instead of individual subscriptions.
  8. Guest users with any elevated role — guests must not hold admin.

Review Process ​

Frequency: Quarterly, plus on-demand whenever Defender for Cloud surfaces a privileged-identity finding in DDE.

  1. Inventory — run the DDE lpriv audit workflow (same pattern as pim-audit.yml for PROD, ported to DDE tenant) to snapshot all subscription- and management-group- scoped role assignments and all federated credentials on service principals.
  2. Compare — diff snapshot against the expected baseline above. Anything in the snapshot that isn't in the baseline is a finding.
  3. Classify each finding:
    • Remediate — access is not justified, plan removal.
    • Justify — access is legitimate, update this baseline with date and reason.
    • Investigate — access is unexpected and the owner is unclear.
  4. File SecOps story — one story per remediation under the DDEENV project prefix, status BACKLOG until Rory reviews.
  5. Rory reviews — each remediation requires Rory's approval before any Terraform change lands.
  6. Remediate in azure-dde-infra — Terraform changes only, no portal clicks:
    • Remove the assignment via azurerm_role_assignment deletion or by narrowing the scope attribute.
    • For SPs that are fully decommissioned, delete the app registration via azuread_application resource removal.
    • For github-deploy-main over-scope, split into one assignment per subscription rather than a single tenant-root assignment.
  7. PR workflow — branch, PR, Checkov + terraform plan in CI, Rory review, merge triggers apply via OIDC. Never apply locally.
  8. Verify — re-run the audit after apply, confirm finding cleared, close the SecOps story with evidence link.

Relationship to Azure Policy ​

DDE subscriptions carry HIPAA/HITRUST and ISO 27001 policy assignments. The built-in control "A maximum of 3 owners should be designated for your subscription" is the Azure Policy backstop — this review is the deeper continuous check.


Out of Scope ​

  • PROD tenant privileged access — covered by lpriv-baseline.md.
  • AWS IAM privileged access — covered by AWS least-privilege workstream.
  • Data-plane suppression rules — covered by lpriv-secops.md.

  • security/lpriv-baseline.md — PROD tenant equivalent
  • security/lpriv-ops-automation.md — ops-automation identities
  • security/lpriv-secops.md — SecOps platform identities
  • SecOps project DDEENV — DDE HIPAA Compliance Wave epic

Internal use only — Cirius Group