A W S   S U M M A R Y                     [ KRZ ]   krz.sh

WHAT
python tool. sends one plaintext email a day summarizing an aws
account: billing, security hub findings, route 53 health checks,
cloudwatch alarms, s3 audit, expiring acm certs, config compliance,
cloudfront changes, waf blocks.

built for solo or small-team accounts. add a section by dropping
new_section.py in sections/ and listing it in config.toml.

CONFIGURE
edit config.toml:

[aws]
profile = "default"
region = "us-east-1"

[email]
from = "you@example.com"
to = ["you@example.com"]
subject = "Daily AWS Report"

[report]
sections = ["acm"]

no aws profile yet:

aws configure --profile default

RUN
python main.py

or with uv (installs deps, makes a venv):

uv run main.py

emails are plaintext with ascii tables via tabulate.

INSTALL
python 3.11+.

pip install -r requirements.txt
# or: uv sync

needs boto3 and tabulate. the iam user or role needs read access to
cost explorer, security hub, s3, cloudfront, cloudwatch, route 53,
acm, config, waf, and ses if sending from aws.

STRUCTURE
config.toml          aws profile, region, email, report options
main.py              entry point; builds and sends the report
email_formatter.py   formats the email body
utils.py             shared helpers
pyproject.toml       metadata and dependencies
sections/            one generator per section
acm.py             expiring certs
cloudfront.py      distribution changes
cloudwatch.py      alarms
config.py          config compliance
costexplorer.py    billing
route53.py         health checks
s3.py              bucket audit
securityhub.py     findings

each section implements get_section(config) -> str. add, remove, or
order sections in config.toml.

TODO
- csv or html export
- slack or teams notifications
- lambda deployment

LICENSE
0bsd. see LICENSE.

krz.sh