What it doesTwenty 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.
SPENDIs 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.
REACHCan 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.
PROOFCould 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.