What it does

Twenty read-only API calls, three questions.

The file is short enough to read before you run it, and --calls lists every API it touches. It needs the ReadOnlyAccess managed policy or less.

SPEND

Is there a limit that actually stops an agent?

Budgets that only email are not a limit. It looks for a budget with an action, and for a billing alarm as the earliest warning.

REACH

Can an agent go further than it was meant to?

Root without MFA, long-lived keys nobody rotates or uses, and agent-looking roles carrying administrator power.

PROOF

Could you prove afterwards what it did?

CloudTrail present, multi-region and integrity-validated; the log bucket protected from silent deletion; Bedrock invocation logging and guardrails; GuardDuty and Config.

Who runs it, and what it needs

  • An engineer with read access to the account. It uses whatever credentials the AWS CLI already has on that machine: a profile, an SSO session, environment variables. Nothing is typed into it. The report is written to be forwarded to whoever decides.
  • Python 3 and boto3. That is the whole dependency list.
  • The regions your agents run in, with --regions. The default is us-east-1 and us-west-2, which is wrong for most of Europe; pass yours.
  • One account per run. An organisation with several runs it once per account that runs agents; the results do not combine.
  • Services you do not use are not scored. Bedrock checks apply only where CloudTrail shows Bedrock has been invoked in the last 90 days; otherwise they are reported as not assessed and carry no weight in the score or the fee.

Why you should not have to trust it

  • Give it a role that can only read. This CloudFormation template creates a role allowing exactly the twenty calls the check makes and nothing else. Run the check through that role and the worst a hostile copy of the file could do is read. --policy prints the same policy for any other tooling.
  • Watch what it does. --audit-log calls.log appends every API call as it is made, service and operation, so the read-only claim is checked from outside the script rather than stated inside it.
  • Check the file is the file. SHA-256 of the download: cd59ab81558eba950bfccc03303c71cccbdee47c3f5d5afda593ef67e3986aa9. The source, with its history and tests, is published alongside the verifier it belongs to.
  • Read it. It is one file, about 400 lines, and half of them are the words on this page.
pip install boto3
python3 agent_readiness_check.py --regions us-east-1,eu-west-1 --html report.html --audit-log calls.log

Each finding comes with its evidence, its blast radius in plain words, and the fix. The score is 100 minus 20 per critical, 10 per high, 5 per medium, 2 per low.