AegisAI
Capabilities

What AegisAI does, in nine sentences.

Authenticate

HS256, RS256, ES256, PS256. JWKS rotation. Issuer and audience verification. Configurable clock-skew leeway.

Authorise (SAP)

Real BAPI_USER_GET_DETAIL walk: ACTIVITYGROUPS, PROFILES, AUTH_OBJECTS with field-value tuples. Wildcard support.

Authorise (cloud)

AWS simulate_principal_policy, Azure RBAC role-assignments, GCP testIamPermissions. Fail-closed on connector error.

Trust signals

Frequency, scope expansion, coverage growth, cross-user coordination. Trust score drives rate-limit bands and request restrictions.

Policy

Priority-weighted expression set evaluated by a safe AST whitelist. Deny-by-default, deny-wins-on-tie.

Plan

Intent compiles into SafeQuery{sql, params, entity, fields, tenant_id, row_policy_names}. :named placeholders only.

Execute

MODE-gated dispatch. PRODUCTION refuses to run the SAP simulator or in-memory fixtures. Identity propagates to the backend.

Mask

Schema-driven response firewall. Per-field classification × user clearance × auth-object gate. Drop / redact / hash / partial / aggregate.

Audit

Tamper-evident HMAC chain. Postgres-backed, row-locked append. Public /api/audit/integrity probe; admin-only /api/audit/verify.

Connectors

Real SDK calls. No mocked authority.

Every connector uses the system's native authority surface. AegisAI does not maintain a parallel permission cache. If your SAP admin revokes a role at 09:00, AegisAI denies at 09:00.

SAP S/4HANA · ECC

Identity propagation via SAP Logon Ticket or user credentials. Authority lookup walks BAPI_USER_GET_DETAIL; per-object field-value enforcement via SUSR_USER_AUTH_FOR_OBJ_GET.

  • RFC / BAPI via pyrfc
  • OData v2 / v4 with typed entity sets
  • Customer Z-RFC extension point
  • Double enforcement: AegisAI checks, SAP checks again

AWS RDS · Redshift

Principal ARN resolved via STS GetCallerIdentity; permission checked via iam:SimulatePrincipalPolicy per request.

  • RDS Data API for Aurora / Postgres / MySQL
  • Redshift Data API for Workgroup or Cluster
  • Static credentials, role-assumption, or instance profile
  • Fail-closed on any IAM error

Azure Synapse

Authentication via DefaultAzureCredential (managed identity, environment, or CLI). Permission checked via Azure RBAC role-assignments at request scope.

  • Synapse SQL endpoint via REST
  • Per-workspace scope binding
  • Token caching with explicit expiry

GCP BigQuery

Service-account credentials from a configured key file. Permission checked via testIamPermissions on the project resource.

  • BigQuery client API
  • Region-locked queries
  • Cache-disabled by default for deterministic responses
A request, end to end

What a single /query looks like.

A sales user asks for orders for company code 1000. Below is the literal HTTP shape — request, response envelope, and the audit row that gets persisted.

Request

POST /query HTTP/1.1
Authorization: Bearer eyJ...<JWT>
Content-Type: application/json

{
  "intent": "get sales bukrs 1000",
  "context": {"system": "sap"}
}

Response (success)

HTTP/1.1 200 OK
Content-Type: application/json

{
  "decision": "ALLOW",
  "trust_score": 0.82,
  "trust_level": "HIGH",
  "trace_id": "9f8c2a4b91d3...",
  "data": {
    "sales": [
      {"id": 1, "customer": "Acme",
       "amount": 100, "bukrs": "1000",
       "department": "sales"}
    ]
  },
  "trace": {"stages": [...]}
}

Audit row appended

{
  "id": 4291,
  "trace_id": "9f8c2a4b91d3...",
  "tenant_id": "tenant_a",
  "user_id": "user1",
  "decision": "allowed",
  "intent": "get sales bukrs 1000",
  "executed_query": "SELECT id, customer, amount,
    bukrs, department FROM sales
    WHERE tenant_id = :tenant_id
      AND bukrs IN (:bukrs_0)",
  "prev_hash": "a1b2c3...",
  "row_hash":  "d4e5f6...",
  "hmac_sig":  "0e1f2a..."
}

If the policy or trust system denies

HTTP/1.1 403 Forbidden
Content-Type: application/json

{
  "detail": "Trust restriction:
    trust_block_scope_expansion: 'novel'"
}

# Audit row written with status="error",
# decision="denied". The hash chain extends
# the same way as for an ALLOW.

Want to see this against your data?

Bring a sandbox tenant. We'll spin up AegisAI in front of it, plumb your IdP, and walk through the audit chain on a live demo.

Book a demo