Trust & security · Permissions

The Axiom permissions model.

Read-only by default. Execution is a separate opt-in. No write permissions live in the scan role. Provider-specific permission shapes for AWS, Azure (preview), and GCP (preview). Revocable in one click.

The model in one sentence

Two roles exist, never one. The scan role is read-only and contains zero write permissions. The execution role is opt-in per action class, more-scoped than the scan role, and used only when Axiom applies a change.

01

Why least privilege

Most cloud incidents involving third-party tools trace to over-permissive integration roles:

  • Vendor compromise becomes customer compromise when the integration role has write access
  • "Just-in-case" permissions accumulate and rarely get cleaned up
  • Auditors can't reason about scope when the role grants * on broad services

Axiom solves this by making the smallest possible role the default — and forcing every additional capability to be a deliberate opt-in.

02 · AWS · Read

AWS scan role (read-only)

The role Axiom creates during onboarding contains only Describe / Get / List actions across:

  • EC2, S3, RDS, IAM, CloudWatch, CloudWatch Logs, Cost Explorer, STS, Resource Groups Tagging

It cannot:

  • Create, modify, or delete any resource
  • Read object content (S3) or row data (RDS)
  • Decrypt secrets or KMS keys
  • Read Lambda function source code or environment variable values
  • Modify IAM policies, users, roles, or permission boundaries

Full policy + per-line explanation at /docs/aws-setup.

03 · AWS · Execute

AWS execution role (opt-in, separate)

Execution requires a second IAM role you create per action class. Three rules:

  • Per action class — separate execution roles for cost optimization, security remediation, drift correction, and ReleaseOps. You can enable only the classes you want.
  • More scoped than scan — execution role permissions list specific Modify/Delete actions Axiom needs, never *.
  • Approval-gated — Axiom assumes the execution role only after an approval flips a plan item to "approved". Outside of an approved apply, the execution role is never assumed.

Axiom presents the exact execution policy at the moment you enable an action class. Nothing speculative.

04 · Azure

Azure permission model (preview)

Azure connector ships via Service Principal + role assignment:

  • Read-only scan: Reader built-in role at subscription or resource-group scope
  • Plus a custom read-only role for Azure Cost Management + Activity Log analytics
  • Execution: separate custom role created per action class (preview Q2 2026)
  • No client secret stored — Axiom uses federated identity (workload identity federation) where available

Subscription/resource-group scoping is enforced at the role assignment level — you control exactly which scopes Axiom sees.

05 · GCP

GCP permission model (preview)

GCP connector ships via Service Account + IAM role binding:

  • Read-only scan: roles/viewer + roles/iam.securityReviewer at project or folder scope
  • Plus custom roles for Cloud Billing + Cloud Audit analytics
  • Execution: per-action-class custom roles (preview Q3 2026)
  • Authentication via workload identity federation — no JSON key files stored on Axiom's side

06 · Boundaries

Approval boundaries

Permission classifications drive approval routing:

  • Low risk (contained blast radius, idempotent) — single approver. Can be Trust-Ladder-promoted to auto-apply after measured success.
  • Medium risk (moderate blast, reversible) — single approver. Pre-verified rollback required. Never auto-applied.
  • High risk (broad blast or hard-to-reverse) — multi-party approval. Cannot be auto-applied regardless of Trust Ladder state.

See approval workflow.

07 · Revoke

Revoking access

  • AWS — delete the IAM role in your AWS console. Axiom loses all access on next assume attempt.
  • Azure — delete the role assignment for the Axiom Service Principal, or disable the SP entirely.
  • GCP — remove the IAM binding from the Service Account, or disable the SA.
  • Org-wide — disconnect from Dashboard → Settings → Connections → Disconnect all. Stops Axiom from attempting future assumptions across all providers.

Trust questions

What permissions are minimum required?

AWS: 14 Describe/Get/List actions. Azure: Reader role + custom read role. GCP: viewer + securityReviewer roles.

Why two roles instead of one?

Read-only is the constant default; execution is an opt-in event. Two roles = the execution surface area is auditable and revocable independently.

Is the scan role safe?

Yes — no write, no decrypt, no modify. Worst case if compromised: someone reads infrastructure metadata for the regions you authorized.

What gets logged?

Every assume-role event lands in AWS CloudTrail / Azure Activity Log / GCP Audit Logs in your account — visible to you, not Axiom-controlled.

Can I rotate?

Yes. External IDs are per-connection. Disconnect + re-onboard generates a fresh trust policy with a new External ID.

What if my org needs a custom role boundary?

Permission boundaries are fully compatible. The scan role inherits boundary constraints automatically.

Need a human?

Most flows are documented — but we'll help if anything is unclear.

Talk to Vision XIX Labs