summaryrefslogtreecommitdiff
path: root/README.nfo
blob: 8e7f8b6e25e78efb37975c8e17e2d9646032f6f9 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
┌──────────────────────────────────────────────────────────────┐
│  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 = "[email protected]"
      to = ["[email protected]"]
      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                                                      │
└──────────────────────────────────────────────────────────────┘