Skip to content
§1

AWS Exit Risk user guide

How hard would it be to leave AWS?

The AWS Regulatory Risk Review Framework answers that for a whole AWS Organizational Unit, in a form an executive committee can act on: one exit-risk score weighted by where the money is spent, the services and accounts that drive it, and an indicative cost and time to exit. The same scan also produces the Cloud Assurance Framework Report: every account scored against 139 controls in 13 areas. Everything is read-only, and it runs on your own machine.

The web console: top bar with New scan, Exclusions, Exit model and Issues; an account filter set to prod; tabs for Exit risk, Multi-region and Cloud assurance; and the start of the executive summary for the synthetic demo organisation.
The web console with the demo organisation (synthetic data, made-up numbers) filtered to prod. Three views: Exit risk, Multi-region and Cloud assurance.
§2

Why it exists

Regulatory Risk, the missing pillar.

The AWS Well-Architected Framework has six pillars: Operational Excellence, Security, Reliability, Performance Efficiency, Cost Optimization and Sustainability. They describe a workload that runs well on AWS. None of them asks the question a regulator asks first: could you leave if you had to?

For banks, insurers, payment providers, market infrastructure and healthcare, that question is not optional. Running material workloads in the cloud is outsourcing, and outsourcing rules require a documented, credible and tested exit strategy:

The framework proposes Regulatory Risk as the seventh pillar: the measured degree to which your architecture keeps you free to exit, change providers, or bring workloads back in house. Like the other pillars, it is a design property you can measure, track and improve.

  • Measure it

    A spend-weighted 0 to 100 exit-risk score per OU and per account, from your own billing data, against an open catalog of 120 AWS services ranked by portability.

  • Explain it

    Which services (Connect, Redshift, DynamoDB, Lambda and so on) and which accounts drive the score, why each service is hard to move, the migration path, and how long it typically takes.

  • Plan it

    Indicative effort, duration and cost of a full exit, adjusted for your delivery maturity (CI/CD, Terraform, team size), ready for the exit plan your regulator asks to see.

  • Track it

    Rescan each quarter, so new lock-in shows up as it is adopted, not when the exit is needed. Choosing a proprietary service can still be the right call; this makes it a known, priced choice.

The aim is not to discourage AWS. It is to replace “we are locked in” (fear) with “38/100, with three accounts holding 57% of the spend at risk and roughly 3 to 5.5 years to exit” (a fact a board can govern).

§3

Install and first scan

One command, then three steps.

You need Python 3.10 or later and uv (or pipx). There is no virtual environment to manage. In a terminal:

uv tool install git+https://github.com/andrewbakercloudscale/aws-regulatory-risk-review-framework
exitrisk serve              # opens http://127.0.0.1:8740

With pipx instead:

pipx install git+https://github.com/andrewbakercloudscale/aws-regulatory-risk-review-framework

exitrisk serve starts the console on http://127.0.0.1:8740 and opens it in your browser. It listens on this computer only. The first screen has three steps:

  1. 1Connect to AWS. AWS sign-in for SSO or IAM Identity Center (paste your portal’s start URL once), or any AWS CLI profile already on the machine, including aws-cli-zsp. Use the management (payer) account to see every account.
  2. 2Check access. Tests the read-only calls a scan needs and shows a tick or a cross with the fix for each. If anything is missing it writes the request to send your AWS administrator.
  3. 3Scan and report. Seconds for hundreds of accounts. Type prod in the filter bar, answer the questions under Exit model in the top bar, then Export PDF above the report.

No AWS access yet? Settings (the gear, top right), then Load demo data, shows a synthetic bank estate: 49 accounts and made-up numbers. Every screenshot on this page comes from it.

Get started: three cards, Connect to AWS with an AWS sign-in button, Check access, and Scan and report with a New scan button, plus a link to load the demo organisation.
The first screen: connect, check access, scan.

New scan

  • Sign-in

    The AWS profile for the management (payer) account, or Sign in with AWS SSO. Check access sits beside it.

  • Scope

    One or more Organizational Units. To narrow the report to some accounts (names containing prod, say), use the account filter after the scan: it changes the report without a new scan.

  • Options

    The exit target (Azure by default; also Google Cloud, Oracle Cloud, a sovereign or local cloud, an on-premises platform or a physical data centre), months of spend history (12 shows a year of growth), and the scan depth.

  • Scan depth

    Quick (spend only, seconds for hundreds of accounts), inventory (resource counts) or dependency (resources and the integrations between them). Only regions with spend makes a deep scan about twice as fast.

  • Extras

    Tick Run the Cloud Assurance Framework checks, and Add an Agentic Risk Review to the report, if you want them.

A spend-only scan of a few hundred accounts takes seconds. A deep scan takes about 20 seconds per account with 18 regions enabled, 8 accounts at a time: about 15 minutes for 166 accounts.

The New scan dialog: an AWS profile with Check access beside it, organizational units Prod, PCI, Non-Prod and Sandbox with account counts, exit target Microsoft Azure, 12 months of spend history, and scan depth set to dependency scan.
New scan: profile, one or more OUs, exit target, history and scan depth.

To upgrade later, then restart the console once its running scans have finished:

uv tool upgrade aws-regulatory-risk-review-framework
exitrisk serve --replace
§4

AWS access

Read-only, and it says what is missing.

Everything is read-only. The core score needs only Organizations and Cost Explorer read access in the management (payer) account. Cost Explorer must be enabled there.

  • Spend-only scan (management account)

    Organizations read (the OU tree, accounts and their tags) and Cost Explorer read (spend by account, service, month and region, plus Savings Plans and reservations). Enough for the full score, ranking, charts and estimate.

  • Deep scan (member accounts)

    A read-only role, ExitRiskReadOnly, in each member account (one CloudFormation StackSet), or your own Identity Center permission set there. It counts resources and, for a dependency scan, the integrations between services. Only counts are stored: never names, ARNs or definitions.

  • Cloud Assurance checks

    Extra list, describe and get calls through the same member role or permission set. Check access has two optional checks for them, one in the management account and one in a member account.

What your administrator grants. An IAM Identity Center permission set in the management account with the tool’s inline policy (least privilege), or the AWS-managed AWSOrganizationsReadOnlyAccess and AWSBillingReadOnlyAccess. Both come ready-made in Terraform and CloudFormation. Details: IAM_PERMISSIONS.md.

Check access

Makes every read-only call a scan makes, once, and names any permission that is missing: the OU tree, account names and tags, Cost Explorer spend, Savings Plans and reservations, and, for a deep scan, every inventory and dependency call inside one member account. Optional checks that fail show as warnings, and a quick scan still runs.

When something is refused it writes the request for your administrator: your identity, the management account id, the missing actions and the policy, ready to copy or download.

AWS sign-in (SSO), no terminal

Click AWS sign-in in the header, add your access portal’s start URL once (its region is found automatically), and approve the sign-in on AWS’s own page. The console lists every account you can reach, preselects the management account, and Use for a new scan creates or reuses a matching SSO profile in ~/.aws/config. The token stays in the AWS CLI’s own cache and is never sent to the browser.

The AWS sign-in dialog: an access portal example d-1234567890.awsapps.com/start, not signed in, region eu-west-1, with Sign in and Add a portal buttons.
AWS sign-in through IAM Identity Center, from the header.

Profiles and aws-cli-zsp

The scanner uses standard profiles from ~/.aws/config, so anything boto3 supports works: SSO, credential_process, assumed roles. With AWS CLI ZSP the first API call of a scan asks for one Touch ID, and the one hour session covers the whole scan. The tool never reads, stores or logs keys.

Check access results: signed in, a warning that this is a member account and not the management account, the OU tree refused with the missing actions named, Cost Explorer and Savings Plans checks, and deep scan and Cloud assurance checks with the refused calls listed.
Check access: a tick, warning or cross per permission, each with the fix.
§5

The exit-risk report

Read in five minutes, defended for an hour.

The report is one long page in nine numbered sections and an appendix. Filter it by account name in the bar at the top (contains, starts with, ends with or a regex, plus exclusions, such as prod, prd excluding sandbox). The report rebuilds at once, with no new scan. Click any screenshot to open it full size.

  • 1. Executive summary

    Bottom line, what we found, exit cost and time as ranges, recommendations and a confidence rating, then the key figures.

  • 2. Agentic Risk Review

    The optional AI second opinion, when you asked for one.

  • 3. Risk profile

    Spend by tier and its trend, and which product types are growing.

  • 4. Accounts

    How many are portable vs higher risk, risk vs spend, the ranking by spend at risk, and who owns the risk.

  • 5. Services

    The AWS-only services that drive lock-in, and third-party products billed through AWS.

  • 6. Exit estimate and timing

    Your answers, the exit timeline, where the effort goes, the notice period and commitments written off.

  • 7. Resilience

    Critical accounts, correlated failure by region and channel, a stressed exit, the data to move and the links to move it.

  • 8. Areas of focus

    The accounts that will decide the exit, why, how to tackle each and in which phase.

  • 9. Data quality

    What the report does not cover, and why. Every AWS API error is listed here with a fix.

  • Appendix

    Each service’s tier, rationale, migration path, equivalents and typical duration.

1. Executive summary

A written brief you can read out as it is: the bottom line, what we found, what we recommend and a confidence rating that says why the numbers might move, with a step and a button for each way to raise it. Then the key figures: the two scores, annual spend, the share on High or Critical services, exit cost and window, engineering effort and commitments written off.

Two headline scores. By spend and by number of accounts. If the spend score is much higher, risk sits in a few big accounts; if the account score is higher, it is spread across many small ones.

Where the work is. Spend measures exposure, not difficulty. Beside the score the report gives technical portability (weighted by engineering effort), exit effort in engineer-days, the exit window, five dimensions (service portability, dependency complexity, data gravity, engineering effort, operational criticality) and the readiness of each critical account.

Where the work is: technical portability 41/100, exit effort 9,000 to 16,000 engineer-days, exit window 3 to 5.5 years, and five dimension cards.
Where the work is: difficulty, measured apart from spend.
The executive summary: bottom line, what we found, what we recommend, confidence Low with steps to raise it, then key figure tiles and the where the work is measures.
Executive summary. Cost and time stay marked provisional until the Exit model questions are answered.

3. Risk profile

Spend by exit-risk tier, its trend month by month (is lock-in growing?), and the change in spend by product type, each bar split by how hard its services are to exit.

Risk profile: a donut of monthly spend by tier, a stacked bar chart of spend trend by tier, and spend growth by product type.
Where the exit risk sits, and whether it is growing faster than the estate.

4. Accounts

How many accounts are portable against how many are higher risk, and the share of spend each group holds. A bubble chart of inherent risk against spend shows which accounts drive the exit (top right).

The account ranking sorts by spend at risk (monthly spend times risk), so large, hard-to-move accounts come first, with their main lock-in services. Who owns the risk totals spend at risk by executive and owner, from the accounts’ tags.

Accounts: bars of accounts and spend by rating, a table of portable vs higher-risk accounts, a bubble chart of inherent risk vs spend, the account ranking by spend at risk, and who owns the risk.
Accounts: how many are at risk, how big, and who owns them. Names and owners are synthetic.

5. Services

The top services by spend coloured by tier, the High and Critical services in use with their spend and growth, and third-party products billed through AWS (Marketplace software and third-party models on Bedrock), which usually move with a new contract.

Services driving lock-in: a bar chart of top services by spend coloured by tier, a table of high and critical services with tier, monthly spend, share, accounts and change, and third-party products billed through AWS.
The AWS-only services that drive lock-in.

6. Exit estimate and timing

Exit cost, exit window and engineering effort as ranges, an indicative timeline by wave, where the effort goes, the tools that shorten the move for each service, and every answer and assumption behind the estimate.

Timing checks whether the exit fits the notice period you enter under Exit model, which Savings Plans and reservations run off before it finishes, and what would be written off: still owed after the exit for capacity no longer used. A chart shows each month’s commitments with the exit window shaded, and the report gives the last date a 3-year term stays inside the window. Any EDP shortfall is counted too.

Timing: exit finishes Mar 2030 to Dec 2031, deadline does not fit a 24-month notice, commitments of $199k a month, EDP ends Jun 2028, and a table of Savings Plans and reservations.
Timing: the exit window against your notice period and AWS commitments.
Exit cost and time estimate: cost, window and effort tiles, a chart of commitments written off over time, an indicative timeline, where the effort goes, tools that shorten the move, and your answers and assumptions.
Exit estimate: your answers, the timeline and where the effort goes.

7. Resilience

Which accounts are critical (from tags such as Criticality = Tier1, or names you give), how much of the critical estate one regional event would take down, whether tier 1 channels are isolated from each other, what could move in weeks under a stressed exit, and how many terabytes an exit has to move. It counts the Direct Connect links you have today and prices three options for new 10 Gbps links dedicated to the migration, kept apart from production: Cheap (1 link), Medium (2) and Urgent (4), each with time to copy and cost at AWS list price.

Resilience: 5 critical accounts, correlated failure High 90 with 90% of critical spend in London, 24% of critical spend with no rapid exit, 2.7 PB of data to move, and Cheap, Medium and Urgent link options.
Resilience: critical accounts, correlated failure, a stressed exit, the data to move and the links to move it.

8. Areas of focus

The accounts whose complexity or risk will decide the exit: AWS-only services with no like-for-like target, critical services, AWS-only integrations, data to move, share of the effort, and evidence and owner gaps. Each says how to tackle it and in which phase, with programme themes and a plan by phase.

It comes from fixed rules, so the same scan always gives the same list. The optional Agentic Risk Review in section 2 gives the AI’s view beside it.

9. Data quality

What the report does not cover, and why. The report never fails silently: every AWS API error becomes an issue here with a fix, and is written to the log. Issues in the top bar shows the count, coloured by the worst severity, and jumps here.

Data quality and scan issues: two warnings, an EventBridge throttling exception in one account and a service not in the catalog scored as tier 3, each with a fix.
Every gap, with the fix.

Appendix

Every service in scope with its tier, why, the recommended migration path, equivalents on Azure, Google Cloud and neutral platforms, and a typical duration. The catalog of 120 services is open and reviewable.

Appendix: tier 5 Critical services DynamoDB, Connect and SWF, with why this tier, recommended migration path, equivalents and typical duration.
Appendix: each service's tier, rationale, migration path and typical duration.
Areas of focus: accounts to focus on, their share of the effort, AWS-only blockers, programme themes, a what to do when table by phase, and a card per account with each concern and how to tackle it.
Areas of focus: where the exit will be won or lost.
§6

Exit model questions

Make the estimate your own.

Until someone answers these, the estimate runs on defaults and describes a made-up organisation. The report marks cost, exit window and effort provisional and keeps them out of the bottom line. Open Exit model in the top bar; changing any answer, or pressing These answers are right, makes the figures your organisation’s own. The estimate updates in under a second, so you can change answers live in a meeting.

  • Standard CI/CD pipeline?

    One standard, several partially standard, or mostly manual. One deployment pattern to retarget is cheaper than dozens.

  • Terraform used, and current?

    Terraform current, Terraform with drift, CloudFormation or CDK, or little or none. Infrastructure as code that matches production lets the platform be recreated on the target.

  • Target platform

    Azure, Google Cloud, Oracle Cloud, a sovereign or local cloud, an on-premises platform you already run, or a physical data centre (with where the hardware goes and whether you need a DR site).

  • Regulated entity

    Yes adds exit-plan evidence, regulator notification and assurance testing to the effort.

  • Team and cost

    Core cloud team size and % allocated, application engineers, blended day rate, currency, contingency, parallel-run months.

  • AI coding agents

    Each service is rated for how much an agent cuts its porting work: Lambda about half, data moves not at all.

  • Notice period and critical accounts

    The regulator or board notice period the exit has to fit (section 6), and the accounts that count as critical (section 7) when no criticality tag says so.

Exclusions in the top bar lists every AWS product in the scan with its spend. Tick any (Marketplace, say) and click Apply and regenerate to leave them out. No rescan is needed. Every formula is in METHODOLOGY.md.

§7

Multi-region

What would a second region take?

The Multi-region tab answers the question a regulator asks once the exit plan is in place: what would it take to survive the loss of a whole AWS region? It uses the same scan, so there is nothing new to collect and no new permission. For the accounts you choose it gives:

  • the extra cost to run a year: infrastructure, replication traffic, the AWS Support uplift and extra people;
  • the cost and time to achieve it, and the extra staff;
  • a recommended second region, from service parity, latency and price;
  • failover risks per account and service: fails over by itself, needs manual or scripted failover (EC2, most databases), must be restored or re-run (Redshift, Glue, EMR), or is not offered in that region.
Multi-region executive summary: to recover within 3 hours, a second region in Frankfurt for 40 accounts would add $2.5m to $6m a year to run, cost $1.6m to $3.5m and take 5 to 11 months to build, and need 2 to 5 more people.
Multi-region summary: run, build, people, and where to put it.

Choices (section 2). The recovery target (recover within 3 hours, or instant failover), where the second region may be (anywhere, same continent, jurisdiction or country), the primary and second region, and the AWS Support plan. Team, day rate, CI/CD and Terraform are shared with the exit estimate. Every figure is a range and stays provisional until these are confirmed.

Accounts to make multi-region, sorted by spend, each with readiness and its services' failover risks, such as Redshift High: no live replica, restore or re-run.
Accounts (section 3): sorted by spend, ticked by default. Open one for each service's failover risk.
Which second region: spend by region today, the recommended region Frankfurt, candidate regions ranked by latency, parity and price with why each ranks there, and regulation to check.
Second region (section 4): candidates ranked, each saying why, and the regulation to check.

Click a service under “Not available” to correct it: available in that region (the AWS list lags launches), or not needed in the second region at all. The regulation list (POPIA and the Prudential Authority, GDPR and DORA, UK GDPR and PRA SS2/21) is a pointer for the compliance conversation, not legal advice. Details: MULTI_REGION.md.

§8

Cloud Assurance Framework Report

The controls a regulator asks about.

A separate report from the same console and scan. It scores every account against 139 controls in 13 areas: who holds administrator access, what is reachable from the internet, whether changes are logged and made through pipelines, whether production survives the loss of a data centre or region, whether sensitive data is protected against silent change, and who owns each account.

  1. 1Check access tests the extra read permissions (two optional checks, in the management account and in a member account).
  2. 2New scan, tick Run the Cloud Assurance Framework checks. It works with any scan depth and uses the same member role or permission set. From the command line:
    exitrisk scan --profile mgmt --assurance --spend-regions
  3. 3Open the Cloud assurance tab, choose the ruleset and the settings in section 2, and export the PDF from Export PDF.
Cloud assurance executive summary: assurance risk Medium, 47/100 by spend across 47 accounts with 97% of checks measured, tiles for high or critical accounts, critical findings, rules applied and owners to fix, and control areas weakest first.
Every account scored against the selected controls, weakest areas first.

The 13 areas

  • Internet exposure (25)

    Hosts, data and services reachable from the internet that should not be.

  • Identity and privileged access (20)

    Who holds administrator rights, root and long-lived credentials, segregation of duties.

  • Audit trail (11)

    Complete, tamper-evident records of who changed what, kept as evidence.

  • Threat detection and open findings (16)

    Security services switched on, and the issues AWS itself reports being closed.

  • Data protection and location (13)

    Encryption, key management, and where data actually sits.

  • Sensitive data controls (6)

    Payment and customer files protected against change, deletion and silent tampering.

  • Change management (5)

    Production changed through pipelines, not by hand.

  • Resilience and disaster recovery (23)

    Production survives the loss of a data centre or region, and recovery is tested.

  • Technology lifecycle (6)

    Runtimes and platform versions past their end of support.

  • Third-party and external access (2)

    Resources and roles shared with accounts outside the organisation.

  • Ownership and accountability (7)

    Every account has a current, reachable owner and security contact.

  • Cost control (1)

    Spend is planned, watched and owned.

  • AI services (4)

    AI model use is logged and governed.

Rules and rulesets

Choose rules in section 2 shows every rule, searchable by name, id or reference (CIS AWS Foundations Benchmark v3.0, AWS Foundational Security Best Practices) and filterable by area, severity and framework. Tick the rules that apply, change a severity if your policy rates it differently, then Apply without saving or Save ruleset under a name such as “Payments production”.

Built-in rulesets: All rules, Regulator essentials (critical and high), CIS AWS Foundations, AWS Foundational Security Best Practices, Resilience and disaster recovery, Sensitive data, and Identity and access. Changing the ruleset or any setting rebuilds the report at once, with no new scan.

Settings say how the rules see your accounts: which are production, which are the internet edge, which buckets are sensitive, which accounts are critical, how many administrators are acceptable, where data may be held, which tags are required and which accounts may use AI services.

Rules and settings: ruleset All rules, 139 rules, a searchable rule list filtered to resilience and disaster recovery with severity, applies to, references and read from, Save ruleset, and settings for production, edge, sensitive and critical accounts.
Choose the rules that apply, change severities, and save the selection as a ruleset.

Findings and accounts

Each finding says why it matters, how to fix it and where. Each account opens to its failing and unmeasured checks, with the resources affected.

A critical finding, SSH or RDP reachable from the internet, with why it matters, the fix, CIS and FSBP references, and the two accounts and resources affected.
A finding: why it matters, the fix, the references, and where.
Accounts: shared-network-prod scored 80 Critical, opened to its failing checks such as root user without MFA and unencrypted EBS volumes, each with the items affected.
An account opened to its failing checks.

Scoring

  • Each check is Pass, Fail, Not measured or Not applicable. A refused or failed call is Not measured, never a pass, and coverage is shown beside every score.
  • Each failing rule adds its severity’s points once: Critical 40, High 15, Medium 5, Low 1. Points combine with diminishing returns, so the score stays between 0 and 100.
  • A critical account counts its points 1.5 times. Any failing Critical rule sets the score to at least 80.
  • Ratings: Critical 80 and above, High 50 to 79, Medium 20 to 49, Low below 20. The OU score is weighted by spend, with the plain average beside it.

Ownership and evidence

Section 5 lists accounts with no owner tag, or an owner email not found in IAM Identity Center. For each it proposes the owner most related accounts have (for example payments-dev from payments-prod), or the most common owner in its OU. Edit the proposal, tick Approve, and export the approved changes as a CSV or as AWS CLI commands for an administrator to review and run. The console never changes AWS.

Download evidence (section 7) saves the report as JSON with a SHA-256 of its canonical form. Keep it with the risk register: recomputing the hash shows the file is unchanged. Each report names the catalogue version and the scan id. Every rule is listed in CLOUD_ASSURANCE.md.

Ownership: accounts with a missing owner, each with a new owner field, the reason, and an Approve box, then Export approved changes (CSV) and Export AWS CLI commands.
Owners missing or not found, with proposed owners to approve and export.
§9

Agentic Risk Review

An optional second opinion.

The report’s figures come from a deterministic model: the same scan always gives the same score, estimate and areas of focus. The Agentic Risk Review adds a second opinion from a large reasoning model on how entrenched the estate is, what the exit will cost and take, and where to focus. It is off until you ask for it, and it never changes the report’s own figures.

  1. 1Once: Settings, AI configuration to choose the provider, model and key. Test connection proves it works in seconds.
  2. 2New scan, tick Add an Agentic Risk Review to the report. It needs a deep scan, so ticking it switches the scan depth to a dependency scan.
  3. 3Read the report while it runs. The result lands in section 2, right after the executive summary, and is included in the PDF. For an older scan, section 2 has a Run Agentic Risk Review button.

It works in three passes: an analysis of each account, a view of the whole estate, then an independent review that checks the draft for inconsistencies and corrects it. Section 2 opens with the overall AI summary, then the accounts to focus on, what will decide the exit, programme risks, sequencing, quick wins and questions for owners. A demo estate of 48 accounts takes about 6 minutes; a large estate 20 to 40 minutes. The result shows its approximate cost.

  • Amazon Bedrock

    An AWS profile or a Bedrock API key. The summary stays in your AWS account.

  • Claude Enterprise or Claude API

    An API key from your organisation’s Claude Console.

  • Together AI

    GLM, with a Together API key.

  • OpenRouter

    Claude or GLM models, with an OpenRouter API key.

  • AI gateway (Portkey, LiteLLM or your own)

    Any OpenAI-compatible endpoint, so the guardrails, logging and billing you already have still apply.

What is sent: a summary of the report as filtered (per account its name, OU path, spend, services and tiers, effort, data size, integration counts, critical flag and owner tag, plus the estate totals and estimate). Never resource names, ARNs, configuration or AWS credentials. Hide account names and owners, on by default for third-party providers, swaps them for codes and restores them in the answer. Check the provider is approved for this data first. Details: AI_REVIEW.md.

§10

PDF and exports

A fixed version for the minutes.

Export PDF above the report gives a board-ready PDF with charts, an executive narrative, a data-quality section, and an appendix explaining every service’s tier, migration path and typical duration. The footer carries the scan id, catalog version and generation time, so the minutes reference a fixed version.

Export PDF, One-page summary prints an ExCo summary on a single A4 page: the score, headline, key tiles, tier bar, top findings and decisions, the accounts that drive the exit with their owners, and who owns the risk. Use it for a board pack cover or a pre-read; the full report stays the reference.

The Multi-region and Cloud assurance views export the same way. Sample PDFs from the demo data: exit risk, one-page summary and multi-region.

From the command line (PDFs need the pdf extra and Playwright’s Chromium):

exitrisk pdf <scan-id> --include prod --questionnaire answers.json --out board-pack.pdf
exitrisk pdf <scan-id> --include prod --onepage
exitrisk pdf <scan-id> --view assurance --include prod
exitrisk report <scan-id> --include prod --questionnaire answers.json

Compare scans (Settings) shows what changed between two scans: score, spend, tiers, accounts added, removed or re-rated, and services that grew or appeared. A monthly scan (Settings) repeats a scan each month so the comparison shows a trend.

The one-page ExCo summary for the demo organisation: exit-risk score 39/100 Moderate, headline, eight tiles, a tier bar, what we found, decisions needed, accounts that drive the exit and who owns the risk.
The one-page ExCo summary, on one A4 page.
§11

Command line

Scans and PDFs without the browser.

Everything the console does can be scripted. mgmt is an AWS profile for the management account. Scans and logs live in ~/.exitrisk (or $EXITRISK_DATA_DIR).

  • exitrisk serve [--port 8750] [--replace]

    Start the web console on 127.0.0.1. --replace restarts a running console once its scans finish.

  • exitrisk scan --profile mgmt --ou ou-ab12-cdef3456 --months 3

    Spend-only scan. --ou a,b scans several OUs.

  • exitrisk scan --profile mgmt --inventory --role ExitRiskReadOnly

    Plus resource counts in each member account.

  • exitrisk scan --profile mgmt --dependencies --role ExitRiskReadOnly

    Plus the integrations between services.

  • exitrisk scan ... --inventory-scope material

    Deep-scan material accounts only.

  • exitrisk scan ... --spend-regions

    Only regions with spend: about twice as fast.

  • exitrisk scan --profile mgmt --assurance --spend-regions

    Plus the Cloud Assurance Framework checks.

  • exitrisk scan --profile mgmt --target gcp

    Exit target: azure (default), gcp, oci, sovereign, onprem, datacenter.

  • exitrisk pdf <scan-id> --include prod --questionnaire answers.json --out board-pack.pdf

    Board PDF without a browser.

  • exitrisk pdf <scan-id> --include prod --onepage

    One-page ExCo summary.

  • exitrisk pdf <scan-id> --view assurance --include prod

    Cloud Assurance Framework Report as PDF.

  • exitrisk pdf --scan <id> --view multiregion --multiregion answers.json

    Multi-region view as PDF (report gives the same as JSON).

  • exitrisk report <scan-id> --include prod --questionnaire answers.json

    The report as JSON for other tools.

  • exitrisk catalog

    List the service tiers.

§12

How the score works

Five tiers, weighted by spend.

Every service is placed in one of five tiers by how hard it is to move. The open catalog of 120 services says why for each one.

  • Tier 1 · Portable · score 10

    EC2, EKS, EFS, ElastiCache, MSK, OpenSearch, Route 53

  • Tier 2 · Low · score 30

    S3, RDS/Aurora, ECS, DocumentDB, KMS, CloudFront

  • Tier 3 · Moderate · score 50

    SQS, SNS, API Gateway, Athena, SageMaker, Bedrock

  • Tier 4 · High · score 75

    Lambda, Redshift, Glue, Kinesis, Step Functions, EventBridge, Cognito

  • Tier 5 · Critical · score 95

    DynamoDB, Connect, Greengrass, SWF, QLDB

  • Inherent risk of an account is the spend-weighted mean of its services’ scores (0 to 100).
  • Weight is the account’s share of in-scope spend (or 1/N when counting by number of accounts).
  • Contribution is inherent risk times weight, and the OU score is the sum of contributions, reported by spend and by number of accounts.
  • Spend at risk is monthly spend times risk / 100. The account ranking sorts by it.
  • Ratings: Low below 25, Moderate from 25, Elevated from 40, High from 55, Critical from 70.

A service not in the catalog is scored as tier 3 and listed under data quality. The estimate model, its assumptions and limits are in METHODOLOGY.md; how to present the result is in EXCO_GUIDE.md.

§13

Questions and problems

Common questions.

  • Does it change anything in AWS?

    No. Every call is read-only (list, describe, get). Even the ownership fixes are exported as a CSV or AWS CLI commands for an administrator to review and run; the console never changes AWS.

  • Where does my data go?

    Nowhere. The console runs on your machine and listens on 127.0.0.1 only. Scans are kept in ~/.exitrisk. The optional Agentic Risk Review sends a summary to the provider you choose (never resource names, ARNs, configuration or credentials); Bedrock keeps it in your AWS account.

  • Is the estimate a quote?

    No. It is an order-of-magnitude planning figure for an executive decision, always given as a range. Cost and time stay marked provisional until the Exit model questions are answered.

  • Why two scores?

    By spend, a small account full of proprietary services is flagged without distorting the number. By number of accounts, one very large account cannot set the whole picture. The gap tells you whether risk is concentrated or widespread.

  • Does a regulator accept this as an exit plan?

    It evidences the assessment part of an exit plan: dependency mapping, feasibility, cost and time. A full plan also needs triggers, governance, testing and a stressed-exit scenario.

  • How do I raise the confidence rating?

    Answer the delivery questions under Exit model, and deploy the read-only ExitRiskReadOnly role to every member account, then run a deep scan. The steps are listed under the rating in section 1, with a button for each.

  • What does it cost?

    The tool is free and open source under Apache 2.0. Cost Explorer charges US$0.01 per request: a scan makes two per 100 accounts plus pagination, and Check access costs US$0.03.

If something is not right.

Start with Check access and section 9, Data quality. Most problems show up there with a fix.

  • ExpiredToken

    The session is older than its lifetime. Run it again; aws-cli-zsp asks for Touch ID again.

  • SSOToken, or "Not signed in"

    No AWS SSO sign-in for the profile’s portal, or it expired. Use AWS sign-in in the header, or aws sso login.

  • AccessDeniedException on Organizations

    Not the management account, or missing permissions. Use the payer account profile. The scan carries on for the calling account only.

  • DataUnavailableException

    Cost Explorer is not enabled. Enable it in the Billing console; data appears within 24 hours.

  • AccessDenied on sts:AssumeRole

    The member role is missing or its trust is wrong. Deploy the StackSet and check the trust names your scanner account.

  • ThrottlingException, Rate exceeded

    API limits during a deep scan. Calls are already retried; lower EXITRISK_MAX_WORKERS (default 8) and run it again.

  • "X is not in the service catalog"

    A new or rare AWS service. It is scored as tier 3; add it to the catalog.

  • address already in use

    Port 8740 is taken. Run exitrisk serve --port 8750.

  • "The console restarted while this scan was running"

    Scans run in memory. Start the scan again, and restart with exitrisk serve --replace, which waits for running scans.

  • PDF command: needs Playwright

    An optional dependency for PDFs without a browser. Install the pdf extra and run playwright install chromium.

  • Something else

    Settings, Application log shows recent records for the current scan. The full log is ~/.exitrisk/logs/exitrisk.log (JSON lines). Open a GitHub issue with the scan’s log lines; they hold account ids and service names but never credentials.

§14

Uninstall

Remove it.

Stop the console (Ctrl+C in its terminal), then:

uv tool uninstall aws-regulatory-risk-review-framework
# or, if you installed with pipx:
pipx uninstall aws-regulatory-risk-review-framework

Scans, logs, saved rulesets and AI keys stay in ~/.exitrisk. Delete that folder too if you do not want them. Nothing was installed in AWS by the tool; if your administrator deployed the ExitRiskReadOnly StackSet or a permission set for it, they can remove those the same way they added them.

§15

More help

Found a gap, or a tier you disagree with?

Open an issue on GitHub with the scan’s log lines. The service catalog is the easiest place to help: a new service, a better migration path, or a challenge to a tier. The estimate is an order-of-magnitude planning figure, not a delivery quote. AWS is a trademark of Amazon.com, Inc.; this project is not affiliated with or endorsed by AWS.