ARCHITECTURE

Read-only access, isolated vaults, Australian data residency

How an Appware audit reaches your account, what it can and cannot do, and where your data lives. Everything on this page can be checked from your side.

01 / CROSS-ACCOUNT READ-ONLY IAM

One role, one named principal, one hour

  1. 1

    You create the role

    Deploy the CloudFormation stack in your account. It creates one role named AppwareReadonlyAuditRole-<your account id>.

  2. 2

    Appware assumes it

    A single named Appware principal calls sts:AssumeRole with your ExternalId. Account root cannot be trusted.

  3. 3

    One-hour read session

    STS returns credentials that expire within 3600 seconds. The seven read actions are the only ones the role grants.

  4. 4

    Findings and dossier

    Cost, volume, ECS and logging metadata become the FinOps and Well-Architected dossier. Remediation is yours to run.

Cross-account AssumeRole flow The Appware auditor principal assumes a read-only role in the customer account using an ExternalId and receives one hour credentials. APPWARE ACCOUNT Auditor principal Audit engine TRUST BOUNDARY sts:AssumeRole Condition: sts:ExternalId Session credentials expire in 3600 s YOUR ACCOUNT AppwareAuditEngine 7 read actions

Hover or focus a zone for detail.

Read-only by construction

The role policy lists 7 read or list actions (ce, cloudwatch, ec2, ecs, bedrock). There is no write, delete, IAM, S3 or secrets action, so Appware cannot change your account even if it wanted to.

Check: IAM console, role policy

192-bit ExternalId

The ExternalId is appw_ plus 32 URL-safe base64 characters: 32 x 6 bits = 192 bits of entropy, issued server-side and enforced by the stack's AllowedPattern.

Check: CloudFormation parameter pattern

Bounded sessions

MaxSessionDuration is 3600 seconds, so a leaked session credential is useless after one hour.

Check: Role setting

Every access is logged by you

Each assume-role call appears in your own CloudTrail as AssumeRole with the Appware principal and your ExternalId condition.

Check: Your CloudTrail

Instant revocation

Delete the stack or the role and the trust is gone immediately. No Appware action is needed.

Check: CloudFormation delete-stack

02 / ONBOARDING TEMPLATE

The AppwareAuditEngine CloudFormation template

This is what you deploy. Read it before you do. The actions below are the complete list: ce:GetCostAndUsage, cloudwatch:GetMetricData, ec2:DescribeVolumes, ecs:ListClusters, ecs:ListServices, ecs:DescribeServices, bedrock:GetModelInvocationLoggingConfiguration.

appware-audit-engine.yaml Download
AWSTemplateFormatVersion: '2010-09-09'
Description: >-
  Appware Pty Ltd (ACN 674 815 297) read-only audit role. Grants read and list verbs only.

Parameters:
  AppwareExternalId:
    Type: String
    Description: Unique ExternalId issued by Appware at kickoff. Do not create your own.
    AllowedPattern: '^appw_[A-Za-z0-9_-]{32}$'
    MinLength: 37
    MaxLength: 37
  AppwareAuditorPrincipalArn:
    Type: String
    Description: Named Appware auditor role or user supplied at kickoff. Account root is rejected.
    AllowedPattern: '^arn:aws:iam::\d{12}:(role|user)/[\w+=,.@-]+$'

Resources:
  AppwareAuditEngine:
    Type: AWS::IAM::Role
    Properties:
      RoleName: !Sub 'AppwareReadonlyAuditRole-${AWS::AccountId}'
      MaxSessionDuration: 3600
      AssumeRolePolicyDocument:
        Version: '2012-10-17'
        Statement:
          - Effect: Allow
            Principal:
              AWS: !Ref AppwareAuditorPrincipalArn
            Action: 'sts:AssumeRole'
            Condition:
              StringEquals:
                'sts:ExternalId': !Ref AppwareExternalId
      Policies:
        - PolicyName: AppwareReadonlyFinOpsInspection
          PolicyDocument:
            Version: '2012-10-17'
            Statement:
              - Sid: CostExplorerGlobalReadOnly
                Effect: Allow
                Action:
                  - 'ce:GetCostAndUsage'
                Resource: '*'
              - Sid: RegionalReadOnlyInspection
                Effect: Allow
                Action:
                  - 'cloudwatch:GetMetricData'
                  - 'ec2:DescribeVolumes'
                  - 'ecs:ListClusters'
                  - 'ecs:ListServices'
                  - 'ecs:DescribeServices'
                  - 'bedrock:GetModelInvocationLoggingConfiguration'
                Resource: '*'
      Tags:
        - Key: ManagedBy
          Value: Appware

Outputs:
  RoleArn:
    Description: ARN of the Appware audit role
    Value: !GetAtt AppwareAuditEngine.Arn

You receive the ExternalId and the auditor principal ARN by email at kickoff. Never reuse an ExternalId across accounts, and never create your own.

03 / SOVEREIGN AIR-GAP

POSIX 0700 partitions between audit work and operator data

Tenant vault directories use mode 0700 (rwx------). Only the owning user can enter them. Any other process receives PermissionError from the kernel, not a filtered view.

Process access to a mode 0700 vault The owning process reads the vault. A different uid is refused with PermissionError. Owner processuid = vault owner Commercial workeruid = other MODE 0700rwx------ group: ---other: --- VAULT tenant files KMS key PermissionError

Hover or focus a node for detail.

04 / KMS TENANT VAULTS

One key per Sovereign Retainer tenant

Dedicated key per tenant

Each Sovereign Retainer tenant vault is encrypted under its own KMS key, so one tenant's key cannot decrypt another tenant's data.

Check: KMS key alias per tenant

Pinned to ap-southeast-2

Keys and ciphertext both live in the Sydney region. A single-region KMS key cannot be used from another region.

Check: KMS console, key region

Attributable key use

KMS records Decrypt and GenerateDataKey calls in CloudTrail, so every use of a tenant key can be traced to a principal.

Check: CloudTrail event history

05 / AUSTRALIAN DATA SOVEREIGNTY

ap-southeast-2 Sydney, delivered through the Brisbane edge

DataLocationDetail
Customer data at restap-southeast-2 (Sydney)Audit inputs, dossiers and tenant vaults are stored in the Sydney region.
Encryption keysAWS KMS, ap-southeast-2Each Sovereign Retainer tenant vault is encrypted under its own KMS key in the same region.
Public websiteCloudFront, including the Brisbane edgeOnly public static pages are cached at the edge (Brisbane Edge BNE50-P3). No customer data is served from the edge.
Legal entityAppware Pty Ltd, QueenslandAn Australian company (ACN 674 815 297) subject to Australian law.