By default
- Costs and inventory
- What is open or misconfigured
- AI spend and usage
Giving a third party access takes trust. We read costs, what is open, and AI spend. We write only if you grant the agents' role.
Cloud, security and AI. We read when you connect; write is a second role, the agents' role.
Illustrative example
Cloud
AI services
We read costs, inventory, AI spend and whether anything was left open. Nothing is written.
Agents apply what you approve: costs, exposure and AI spend.
The AWS, Azure or GCP role, and the keys for AI services, connect in read-only. Write lives in a second role, the agents' role: you create it, you approve each action. Without that role we do not stop or delete anything.
By default
With the agent
Azure, GCP and AI service keys are stored in a private S3 bucket, encrypted with AWS KMS and our own key. For AWS we store no keys: only the role ARN.
You generate a cloud credential
Azure Client Secret, GCP Service Account key or AI API key
We seal the envelope
KMS encrypts the credential. The master key never leaves AWS.
Stored encrypted in S3
Private, versioned bucket, HTTPS only. The master key never leaves KMS.
The confused deputy attack lets a malicious third party assume an IAM role in your account by impersonating a legitimate service. To prevent it, your organization has a random 128-bit code that your AWS role requires as the ExternalId.
With your unique code
AAA Sentinel requests access with your organization's code. Your role recognizes it and lets it in to read.
Without your code
Another account, even if it knew the role name, does not have your code. The cloud refuses access.
Without this exact ExternalId, any AssumeRole attempt is rejected by AWS.
Authentication with Amazon Cognito (User Pools + Hosted UI) for people and OAuth2 Client Credentials with 1-hour HS256 JWTs for the API. API tokens carry your organization and its scopes.
You sign in
Sign-up, sign-in and recovery go through Cognito.
We check who you are
MFA and email domain, if your organization requires them.
You get a session token
Signed, short-lived, with your organization inside.
Every request carries that organization
The API never takes the tenant from the request body.
Each organization's data is stored under its organization identifier. That identifier comes from your verified session, never from what the request sends.
Your organization
Looks up findings and costs for your accounts.
Sees only its own data
Another organization
Tries to read the same data.
Blocked: different tenant
Each organization only sees its own rows. The organization comes from the session, never from the request.
Every relevant action (scans, configuration changes, access and agent actions) goes into a dedicated DynamoDB table, encrypted with KMS and kept for one year. The application only appends entries: no write overwrites another.
Sample audit record
Illustrative example
Today, 09:12
Posture scan of production
Scheduled · read-only
Today, 11:40
Ana approved stopping staging-web-03
Agent · with write permission
Today, 16:05
Exposure alert sent to the channel
Notification · no change in the cloud
Platform secrets (API token signing, payments, bot verification) live in AWS Systems Manager Parameter Store as SecureString and are read at runtime. The Jira and Linear keys you configure are stored in DynamoDB, encrypted with our KMS key, and the interface only shows them masked.
AWS rotates the KMS key every year
Parameter Store SecureString and KMS-encrypted tables
Loaded at runtime via SDK
Read when you connect. Write only if you grant the agents' role. To see what is open in your accounts, go to Security.
Start for free nowNo card · Read when you connect · Write if you grant it