plexavo 0.2.2__tar.gz → 0.2.3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {plexavo-0.2.2 → plexavo-0.2.3}/PKG-INFO +64 -144
- {plexavo-0.2.2 → plexavo-0.2.3}/README.md +63 -143
- {plexavo-0.2.2 → plexavo-0.2.3}/plexavo/__init__.py +1 -1
- {plexavo-0.2.2 → plexavo-0.2.3}/plexavo/__main__.py +1 -1
- {plexavo-0.2.2 → plexavo-0.2.3}/plexavo.egg-info/PKG-INFO +64 -144
- {plexavo-0.2.2 → plexavo-0.2.3}/pyproject.toml +1 -1
- {plexavo-0.2.2 → plexavo-0.2.3}/tests/test_cli_entrypoint.py +4 -3
- {plexavo-0.2.2 → plexavo-0.2.3}/LICENSE +0 -0
- {plexavo-0.2.2 → plexavo-0.2.3}/plexavo/auth.py +0 -0
- {plexavo-0.2.2 → plexavo-0.2.3}/plexavo/aws_profile_setup.py +0 -0
- {plexavo-0.2.2 → plexavo-0.2.3}/plexavo/checks/__init__.py +0 -0
- {plexavo-0.2.2 → plexavo-0.2.3}/plexavo/checks/encryption.py +0 -0
- {plexavo-0.2.2 → plexavo-0.2.3}/plexavo/checks/iam.py +0 -0
- {plexavo-0.2.2 → plexavo-0.2.3}/plexavo/checks/iam_hygiene.py +0 -0
- {plexavo-0.2.2 → plexavo-0.2.3}/plexavo/checks/logging.py +0 -0
- {plexavo-0.2.2 → plexavo-0.2.3}/plexavo/checks/network.py +0 -0
- {plexavo-0.2.2 → plexavo-0.2.3}/plexavo/checks/storage.py +0 -0
- {plexavo-0.2.2 → plexavo-0.2.3}/plexavo/checks/usage.py +0 -0
- {plexavo-0.2.2 → plexavo-0.2.3}/plexavo/cli.py +0 -0
- {plexavo-0.2.2 → plexavo-0.2.3}/plexavo/findings.py +0 -0
- {plexavo-0.2.2 → plexavo-0.2.3}/plexavo/interactive.py +0 -0
- {plexavo-0.2.2 → plexavo-0.2.3}/plexavo/principals.py +0 -0
- {plexavo-0.2.2 → plexavo-0.2.3}/plexavo/report/__init__.py +0 -0
- {plexavo-0.2.2 → plexavo-0.2.3}/plexavo/report/ai_narration.py +0 -0
- {plexavo-0.2.2 → plexavo-0.2.3}/plexavo/report/fonts/DejaVuSans-Bold.ttf +0 -0
- {plexavo-0.2.2 → plexavo-0.2.3}/plexavo/report/fonts/DejaVuSans-BoldOblique.ttf +0 -0
- {plexavo-0.2.2 → plexavo-0.2.3}/plexavo/report/fonts/DejaVuSans-Oblique.ttf +0 -0
- {plexavo-0.2.2 → plexavo-0.2.3}/plexavo/report/fonts/DejaVuSans.ttf +0 -0
- {plexavo-0.2.2 → plexavo-0.2.3}/plexavo/report/fonts/GEIST-FONT-LICENSE.txt +0 -0
- {plexavo-0.2.2 → plexavo-0.2.3}/plexavo/report/html_report.py +0 -0
- {plexavo-0.2.2 → plexavo-0.2.3}/plexavo/report/pdf.py +0 -0
- {plexavo-0.2.2 → plexavo-0.2.3}/plexavo/report/templates/report.html.j2 +0 -0
- {plexavo-0.2.2 → plexavo-0.2.3}/plexavo/scoring.py +0 -0
- {plexavo-0.2.2 → plexavo-0.2.3}/plexavo.egg-info/SOURCES.txt +0 -0
- {plexavo-0.2.2 → plexavo-0.2.3}/plexavo.egg-info/dependency_links.txt +0 -0
- {plexavo-0.2.2 → plexavo-0.2.3}/plexavo.egg-info/entry_points.txt +0 -0
- {plexavo-0.2.2 → plexavo-0.2.3}/plexavo.egg-info/requires.txt +0 -0
- {plexavo-0.2.2 → plexavo-0.2.3}/plexavo.egg-info/top_level.txt +0 -0
- {plexavo-0.2.2 → plexavo-0.2.3}/setup.cfg +0 -0
- {plexavo-0.2.2 → plexavo-0.2.3}/tests/test_ai_narration_offline.py +0 -0
- {plexavo-0.2.2 → plexavo-0.2.3}/tests/test_auth_offline.py +0 -0
- {plexavo-0.2.2 → plexavo-0.2.3}/tests/test_encryption_offline.py +0 -0
- {plexavo-0.2.2 → plexavo-0.2.3}/tests/test_iam_hygiene_offline.py +0 -0
- {plexavo-0.2.2 → plexavo-0.2.3}/tests/test_iam_offline.py +0 -0
- {plexavo-0.2.2 → plexavo-0.2.3}/tests/test_logging_offline.py +0 -0
- {plexavo-0.2.2 → plexavo-0.2.3}/tests/test_network_offline.py +0 -0
- {plexavo-0.2.2 → plexavo-0.2.3}/tests/test_report_offline.py +0 -0
- {plexavo-0.2.2 → plexavo-0.2.3}/tests/test_scoring.py +0 -0
- {plexavo-0.2.2 → plexavo-0.2.3}/tests/test_storage_offline.py +0 -0
- {plexavo-0.2.2 → plexavo-0.2.3}/tests/test_usage_offline.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: plexavo
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.3
|
|
4
4
|
Summary: Open-source AWS misconfiguration scanner — runs with your own local AWS credentials, nothing sent to anyone else.
|
|
5
5
|
Author: Kavee
|
|
6
6
|
License: AGPL-3.0-or-later
|
|
@@ -125,187 +125,107 @@ scoped by a Condition block, or a CloudTrail lookup that hit its page cap on
|
|
|
125
125
|
`--report-html`/`--report-pdf` render this same data as a full report; see
|
|
126
126
|
[Cost](#cost) for what `--explain` needs and what it costs.
|
|
127
127
|
|
|
128
|
-
##
|
|
128
|
+
## Install
|
|
129
129
|
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
130
|
+
Plexavo is a command-line tool. Pick your OS below — every path installs
|
|
131
|
+
it into its own isolated environment, so it never clashes with your other
|
|
132
|
+
Python packages.
|
|
133
133
|
|
|
134
|
-
### macOS & Linux
|
|
134
|
+
### macOS & Linux
|
|
135
135
|
|
|
136
|
-
[uv](https://docs.astral.sh/uv/)
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
**1. Install uv** (if you don't already have it):
|
|
140
|
-
|
|
141
|
-
```bash
|
|
142
|
-
curl -LsSf https://astral.sh/uv/install.sh | sh
|
|
143
|
-
```
|
|
144
|
-
|
|
145
|
-
(Full options: [uv installation docs](https://docs.astral.sh/uv/getting-started/installation/).)
|
|
146
|
-
|
|
147
|
-
**2. Install Plexavo:**
|
|
136
|
+
[uv](https://docs.astral.sh/uv/) puts a single `plexavo` command on your
|
|
137
|
+
PATH, in every terminal, with nothing to activate:
|
|
148
138
|
|
|
149
139
|
```bash
|
|
140
|
+
curl -LsSf https://astral.sh/uv/install.sh | sh # skip if you have uv
|
|
150
141
|
uv tool install plexavo
|
|
151
142
|
```
|
|
152
143
|
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
**Have an Anthropic API key and want AI-narrated explanations** (see
|
|
157
|
-
[Cost](#cost) — it's optional and costs a few cents per scan, not
|
|
158
|
-
free)? Install with the `[ai]` extra instead — same package, just with
|
|
159
|
-
the `anthropic` library included:
|
|
160
|
-
|
|
161
|
-
```bash
|
|
162
|
-
uv tool install "plexavo[ai]"
|
|
163
|
-
```
|
|
164
|
-
|
|
165
|
-
No key yet, or not sure? Skip it for now — the plain install is
|
|
166
|
-
genuinely complete on its own. Add it later with:
|
|
167
|
-
|
|
168
|
-
```bash
|
|
169
|
-
uv tool install --reinstall "plexavo[ai]"
|
|
170
|
-
```
|
|
171
|
-
|
|
172
|
-
Just want to try it once without installing anything?
|
|
144
|
+
Update or remove later with `uv tool upgrade plexavo` /
|
|
145
|
+
`uv tool uninstall plexavo`. Prefer [pipx](https://pipx.pypa.io/)?
|
|
146
|
+
`pipx install plexavo` works the same way.
|
|
173
147
|
|
|
174
|
-
|
|
175
|
-
uvx plexavo scan --profile my-aws-profile
|
|
176
|
-
```
|
|
148
|
+
### Windows
|
|
177
149
|
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
uv tool uninstall plexavo
|
|
183
|
-
```
|
|
150
|
+
`uv` and `pipx` install fine, but the small `plexavo.exe` launcher they
|
|
151
|
+
drop on your PATH is unsigned, and Windows Smart App Control refuses to
|
|
152
|
+
run unsigned executables it doesn't recognise. The way around it is to
|
|
153
|
+
run Plexavo through Python directly. Two ways — both isolated, pick one:
|
|
184
154
|
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
Install with `pip` and run the tool as `py -m plexavo`:
|
|
155
|
+
#### Option 1 — uv (recommended)
|
|
188
156
|
|
|
189
157
|
```powershell
|
|
190
|
-
|
|
191
|
-
py -m plexavo
|
|
192
|
-
```
|
|
193
|
-
|
|
194
|
-
`py -m plexavo` with no arguments opens the interactive menu, exactly
|
|
195
|
-
like the `plexavo` command does on macOS/Linux — flags are only for
|
|
196
|
-
scripting/CI.
|
|
197
|
-
|
|
198
|
-
> **Why not uv/pipx on Windows?** Both work by putting a small generated
|
|
199
|
-
> `plexavo.exe` launcher on your PATH. That launcher is unsigned, and
|
|
200
|
-
> Windows Smart App Control blocks unsigned executables it doesn't
|
|
201
|
-
> recognise — so `plexavo` can fail to start with a "can't confirm who
|
|
202
|
-
> published" message. `py -m plexavo` calls Python directly and never
|
|
203
|
-
> touches that launcher, so it always works. (If your machine doesn't
|
|
204
|
-
> enforce Smart App Control, `uv tool install plexavo` works here too.)
|
|
158
|
+
uv tool install plexavo
|
|
205
159
|
|
|
206
|
-
|
|
160
|
+
Set-ExecutionPolicy -Scope CurrentUser RemoteSigned
|
|
207
161
|
|
|
208
|
-
|
|
209
|
-
|
|
162
|
+
if (!(Test-Path $PROFILE)) { New-Item -ItemType File -Path $PROFILE -Force }
|
|
163
|
+
Add-Content $PROFILE 'function plexavo { & "$env:APPDATA\uv\tools\plexavo\Scripts\python.exe" -m plexavo @args }'
|
|
210
164
|
```
|
|
211
165
|
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
```powershell
|
|
215
|
-
py -m pip install --user --upgrade plexavo
|
|
216
|
-
py -m pip uninstall plexavo
|
|
217
|
-
```
|
|
166
|
+
Open a new terminal and `plexavo` works exactly like it does on
|
|
167
|
+
macOS/Linux.
|
|
218
168
|
|
|
219
|
-
|
|
169
|
+
`uv tool install` still leaves the blocked `plexavo.exe` on your PATH.
|
|
170
|
+
The line you add to your PowerShell profile shadows it with a command
|
|
171
|
+
that calls uv's bundled `python.exe` directly — that Python is signed by
|
|
172
|
+
the Python Software Foundation, so Smart App Control never stops it. You
|
|
173
|
+
add it once; the `Set-ExecutionPolicy` line (also once) is what lets
|
|
174
|
+
PowerShell load your profile at all. Update later with
|
|
175
|
+
`uv tool upgrade plexavo`.
|
|
220
176
|
|
|
221
|
-
|
|
177
|
+
#### Option 2 — virtual environment (no uv)
|
|
222
178
|
|
|
223
179
|
```powershell
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
Open a new terminal and `plexavo` then works just like it does on
|
|
228
|
-
macOS/Linux.
|
|
229
|
-
|
|
230
|
-
### Run a scan
|
|
231
|
-
|
|
232
|
-
```bash
|
|
233
|
-
plexavo scan --profile my-aws-profile --report-html report.html
|
|
180
|
+
py -m venv plexavo-venv
|
|
181
|
+
.\plexavo-venv\Scripts\Activate.ps1
|
|
182
|
+
pip install plexavo
|
|
234
183
|
```
|
|
235
184
|
|
|
236
|
-
|
|
237
|
-
my-aws-profile --report-html report.html`.)
|
|
185
|
+
Now run `plexavo`. When you're finished, type `deactivate`.
|
|
238
186
|
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
187
|
+
A virtual environment is just a folder holding its own copy of Python and
|
|
188
|
+
its packages. Activating it is what adds its `plexavo` to your PATH — and
|
|
189
|
+
only for that one terminal. So every time you open a new terminal you run
|
|
190
|
+
`.\plexavo-venv\Scripts\Activate.ps1` again before using Plexavo. That
|
|
191
|
+
re-activation is the trade-off for installing nothing globally. If
|
|
192
|
+
PowerShell blocks the activate script, run
|
|
193
|
+
`Set-ExecutionPolicy -Scope CurrentUser RemoteSigned` once. Update with
|
|
194
|
+
`pip install --upgrade plexavo` inside the activated environment.
|
|
244
195
|
|
|
245
|
-
|
|
246
|
-
the `[ai]` install above)?
|
|
196
|
+
### AI-narrated explanations (optional, any OS)
|
|
247
197
|
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
plexavo
|
|
251
|
-
```
|
|
198
|
+
Plexavo is complete without this. If you have an Anthropic API key and
|
|
199
|
+
want each finding rewritten as a full narrative (see [Cost](#cost)),
|
|
200
|
+
install `"plexavo[ai]"` in place of `plexavo` in any command above.
|
|
252
201
|
|
|
253
|
-
|
|
254
|
-
available (no API key needed) and raw technical detail otherwise.
|
|
255
|
-
`--explain` replaces that with a live AI narrative for every finding,
|
|
256
|
-
including the templated ones.
|
|
257
|
-
- Drop `--report-html`/`--report-pdf` to just see the console table.
|
|
258
|
-
- `--explain-limit N` (default 25) caps how many findings get a live AI
|
|
259
|
-
call when `--explain` is passed, as a safety rail against unexpectedly
|
|
260
|
-
large real scans — it doesn't limit the free template remediation.
|
|
261
|
-
- No `ANTHROPIC_API_KEY` set, or a call fails for any reason (invalid key,
|
|
262
|
-
rate limit, network issue)? The scan and report are completely
|
|
263
|
-
unaffected — that finding falls back to template/raw detail instead of
|
|
264
|
-
an AI narrative, not an error. See [Cost](#cost).
|
|
265
|
-
|
|
266
|
-
### Alternative: pipx
|
|
267
|
-
|
|
268
|
-
Already use [pipx](https://pipx.pypa.io/) on macOS/Linux? It works exactly
|
|
269
|
-
the same way as uv — its own isolated environment, one global command, no
|
|
270
|
-
venv:
|
|
202
|
+
### From source (for contributing, or trying an unreleased change)
|
|
271
203
|
|
|
272
204
|
```bash
|
|
273
|
-
|
|
274
|
-
|
|
205
|
+
git clone https://github.com/plexavo/plexavo.git
|
|
206
|
+
cd plexavo
|
|
207
|
+
uv pip install -e . # or: pip install -e . (inside a venv)
|
|
275
208
|
```
|
|
276
209
|
|
|
277
|
-
|
|
278
|
-
Windows section above) — if the `plexavo` command is blocked, run
|
|
279
|
-
`py -m plexavo` instead, or use the `pip` install.
|
|
210
|
+
## Using Plexavo
|
|
280
211
|
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
Want full isolation and prefer to manage the environment yourself? Modern
|
|
284
|
-
Python (PEP 668) blocks a plain `pip install` outside a venv on many
|
|
285
|
-
Linux and Homebrew setups, so create one first:
|
|
212
|
+
Just run:
|
|
286
213
|
|
|
287
214
|
```bash
|
|
288
|
-
|
|
289
|
-
plexavo-env\Scripts\activate # Windows
|
|
290
|
-
source plexavo-env/bin/activate # Mac/Linux
|
|
291
|
-
|
|
292
|
-
pip install plexavo
|
|
293
|
-
pip install "plexavo[ai]" # with AI-narrated explanations
|
|
215
|
+
plexavo
|
|
294
216
|
```
|
|
295
217
|
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
Control.
|
|
218
|
+
with no arguments. It walks you through choosing an AWS profile (or
|
|
219
|
+
setting a new one up), picking whether you want an HTML or PDF report,
|
|
220
|
+
then runs the scan and shows your 0-100 score with every finding and its
|
|
221
|
+
plain-English fix. Nothing to memorise.
|
|
301
222
|
|
|
302
|
-
|
|
223
|
+
On Windows Option 2, run `python -m plexavo` if the bare `plexavo`
|
|
224
|
+
command is ever blocked.
|
|
303
225
|
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
uv pip install -e . # or: pip install -e . (inside a venv)
|
|
308
|
-
```
|
|
226
|
+
Scripting a scan into CI or a scheduled job? `plexavo scan --help` covers
|
|
227
|
+
the flag-driven form (`--profile`, `--region`, `--report-html`,
|
|
228
|
+
`--report-pdf`, `--explain`).
|
|
309
229
|
|
|
310
230
|
## Project structure
|
|
311
231
|
|
|
@@ -96,187 +96,107 @@ scoped by a Condition block, or a CloudTrail lookup that hit its page cap on
|
|
|
96
96
|
`--report-html`/`--report-pdf` render this same data as a full report; see
|
|
97
97
|
[Cost](#cost) for what `--explain` needs and what it costs.
|
|
98
98
|
|
|
99
|
-
##
|
|
99
|
+
## Install
|
|
100
100
|
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
101
|
+
Plexavo is a command-line tool. Pick your OS below — every path installs
|
|
102
|
+
it into its own isolated environment, so it never clashes with your other
|
|
103
|
+
Python packages.
|
|
104
104
|
|
|
105
|
-
### macOS & Linux
|
|
105
|
+
### macOS & Linux
|
|
106
106
|
|
|
107
|
-
[uv](https://docs.astral.sh/uv/)
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
**1. Install uv** (if you don't already have it):
|
|
111
|
-
|
|
112
|
-
```bash
|
|
113
|
-
curl -LsSf https://astral.sh/uv/install.sh | sh
|
|
114
|
-
```
|
|
115
|
-
|
|
116
|
-
(Full options: [uv installation docs](https://docs.astral.sh/uv/getting-started/installation/).)
|
|
117
|
-
|
|
118
|
-
**2. Install Plexavo:**
|
|
107
|
+
[uv](https://docs.astral.sh/uv/) puts a single `plexavo` command on your
|
|
108
|
+
PATH, in every terminal, with nothing to activate:
|
|
119
109
|
|
|
120
110
|
```bash
|
|
111
|
+
curl -LsSf https://astral.sh/uv/install.sh | sh # skip if you have uv
|
|
121
112
|
uv tool install plexavo
|
|
122
113
|
```
|
|
123
114
|
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
**Have an Anthropic API key and want AI-narrated explanations** (see
|
|
128
|
-
[Cost](#cost) — it's optional and costs a few cents per scan, not
|
|
129
|
-
free)? Install with the `[ai]` extra instead — same package, just with
|
|
130
|
-
the `anthropic` library included:
|
|
131
|
-
|
|
132
|
-
```bash
|
|
133
|
-
uv tool install "plexavo[ai]"
|
|
134
|
-
```
|
|
135
|
-
|
|
136
|
-
No key yet, or not sure? Skip it for now — the plain install is
|
|
137
|
-
genuinely complete on its own. Add it later with:
|
|
138
|
-
|
|
139
|
-
```bash
|
|
140
|
-
uv tool install --reinstall "plexavo[ai]"
|
|
141
|
-
```
|
|
142
|
-
|
|
143
|
-
Just want to try it once without installing anything?
|
|
115
|
+
Update or remove later with `uv tool upgrade plexavo` /
|
|
116
|
+
`uv tool uninstall plexavo`. Prefer [pipx](https://pipx.pypa.io/)?
|
|
117
|
+
`pipx install plexavo` works the same way.
|
|
144
118
|
|
|
145
|
-
|
|
146
|
-
uvx plexavo scan --profile my-aws-profile
|
|
147
|
-
```
|
|
119
|
+
### Windows
|
|
148
120
|
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
uv tool uninstall plexavo
|
|
154
|
-
```
|
|
121
|
+
`uv` and `pipx` install fine, but the small `plexavo.exe` launcher they
|
|
122
|
+
drop on your PATH is unsigned, and Windows Smart App Control refuses to
|
|
123
|
+
run unsigned executables it doesn't recognise. The way around it is to
|
|
124
|
+
run Plexavo through Python directly. Two ways — both isolated, pick one:
|
|
155
125
|
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
Install with `pip` and run the tool as `py -m plexavo`:
|
|
126
|
+
#### Option 1 — uv (recommended)
|
|
159
127
|
|
|
160
128
|
```powershell
|
|
161
|
-
|
|
162
|
-
py -m plexavo
|
|
163
|
-
```
|
|
164
|
-
|
|
165
|
-
`py -m plexavo` with no arguments opens the interactive menu, exactly
|
|
166
|
-
like the `plexavo` command does on macOS/Linux — flags are only for
|
|
167
|
-
scripting/CI.
|
|
168
|
-
|
|
169
|
-
> **Why not uv/pipx on Windows?** Both work by putting a small generated
|
|
170
|
-
> `plexavo.exe` launcher on your PATH. That launcher is unsigned, and
|
|
171
|
-
> Windows Smart App Control blocks unsigned executables it doesn't
|
|
172
|
-
> recognise — so `plexavo` can fail to start with a "can't confirm who
|
|
173
|
-
> published" message. `py -m plexavo` calls Python directly and never
|
|
174
|
-
> touches that launcher, so it always works. (If your machine doesn't
|
|
175
|
-
> enforce Smart App Control, `uv tool install plexavo` works here too.)
|
|
129
|
+
uv tool install plexavo
|
|
176
130
|
|
|
177
|
-
|
|
131
|
+
Set-ExecutionPolicy -Scope CurrentUser RemoteSigned
|
|
178
132
|
|
|
179
|
-
|
|
180
|
-
|
|
133
|
+
if (!(Test-Path $PROFILE)) { New-Item -ItemType File -Path $PROFILE -Force }
|
|
134
|
+
Add-Content $PROFILE 'function plexavo { & "$env:APPDATA\uv\tools\plexavo\Scripts\python.exe" -m plexavo @args }'
|
|
181
135
|
```
|
|
182
136
|
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
```powershell
|
|
186
|
-
py -m pip install --user --upgrade plexavo
|
|
187
|
-
py -m pip uninstall plexavo
|
|
188
|
-
```
|
|
137
|
+
Open a new terminal and `plexavo` works exactly like it does on
|
|
138
|
+
macOS/Linux.
|
|
189
139
|
|
|
190
|
-
|
|
140
|
+
`uv tool install` still leaves the blocked `plexavo.exe` on your PATH.
|
|
141
|
+
The line you add to your PowerShell profile shadows it with a command
|
|
142
|
+
that calls uv's bundled `python.exe` directly — that Python is signed by
|
|
143
|
+
the Python Software Foundation, so Smart App Control never stops it. You
|
|
144
|
+
add it once; the `Set-ExecutionPolicy` line (also once) is what lets
|
|
145
|
+
PowerShell load your profile at all. Update later with
|
|
146
|
+
`uv tool upgrade plexavo`.
|
|
191
147
|
|
|
192
|
-
|
|
148
|
+
#### Option 2 — virtual environment (no uv)
|
|
193
149
|
|
|
194
150
|
```powershell
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
Open a new terminal and `plexavo` then works just like it does on
|
|
199
|
-
macOS/Linux.
|
|
200
|
-
|
|
201
|
-
### Run a scan
|
|
202
|
-
|
|
203
|
-
```bash
|
|
204
|
-
plexavo scan --profile my-aws-profile --report-html report.html
|
|
151
|
+
py -m venv plexavo-venv
|
|
152
|
+
.\plexavo-venv\Scripts\Activate.ps1
|
|
153
|
+
pip install plexavo
|
|
205
154
|
```
|
|
206
155
|
|
|
207
|
-
|
|
208
|
-
my-aws-profile --report-html report.html`.)
|
|
156
|
+
Now run `plexavo`. When you're finished, type `deactivate`.
|
|
209
157
|
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
158
|
+
A virtual environment is just a folder holding its own copy of Python and
|
|
159
|
+
its packages. Activating it is what adds its `plexavo` to your PATH — and
|
|
160
|
+
only for that one terminal. So every time you open a new terminal you run
|
|
161
|
+
`.\plexavo-venv\Scripts\Activate.ps1` again before using Plexavo. That
|
|
162
|
+
re-activation is the trade-off for installing nothing globally. If
|
|
163
|
+
PowerShell blocks the activate script, run
|
|
164
|
+
`Set-ExecutionPolicy -Scope CurrentUser RemoteSigned` once. Update with
|
|
165
|
+
`pip install --upgrade plexavo` inside the activated environment.
|
|
215
166
|
|
|
216
|
-
|
|
217
|
-
the `[ai]` install above)?
|
|
167
|
+
### AI-narrated explanations (optional, any OS)
|
|
218
168
|
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
plexavo
|
|
222
|
-
```
|
|
169
|
+
Plexavo is complete without this. If you have an Anthropic API key and
|
|
170
|
+
want each finding rewritten as a full narrative (see [Cost](#cost)),
|
|
171
|
+
install `"plexavo[ai]"` in place of `plexavo` in any command above.
|
|
223
172
|
|
|
224
|
-
|
|
225
|
-
available (no API key needed) and raw technical detail otherwise.
|
|
226
|
-
`--explain` replaces that with a live AI narrative for every finding,
|
|
227
|
-
including the templated ones.
|
|
228
|
-
- Drop `--report-html`/`--report-pdf` to just see the console table.
|
|
229
|
-
- `--explain-limit N` (default 25) caps how many findings get a live AI
|
|
230
|
-
call when `--explain` is passed, as a safety rail against unexpectedly
|
|
231
|
-
large real scans — it doesn't limit the free template remediation.
|
|
232
|
-
- No `ANTHROPIC_API_KEY` set, or a call fails for any reason (invalid key,
|
|
233
|
-
rate limit, network issue)? The scan and report are completely
|
|
234
|
-
unaffected — that finding falls back to template/raw detail instead of
|
|
235
|
-
an AI narrative, not an error. See [Cost](#cost).
|
|
236
|
-
|
|
237
|
-
### Alternative: pipx
|
|
238
|
-
|
|
239
|
-
Already use [pipx](https://pipx.pypa.io/) on macOS/Linux? It works exactly
|
|
240
|
-
the same way as uv — its own isolated environment, one global command, no
|
|
241
|
-
venv:
|
|
173
|
+
### From source (for contributing, or trying an unreleased change)
|
|
242
174
|
|
|
243
175
|
```bash
|
|
244
|
-
|
|
245
|
-
|
|
176
|
+
git clone https://github.com/plexavo/plexavo.git
|
|
177
|
+
cd plexavo
|
|
178
|
+
uv pip install -e . # or: pip install -e . (inside a venv)
|
|
246
179
|
```
|
|
247
180
|
|
|
248
|
-
|
|
249
|
-
Windows section above) — if the `plexavo` command is blocked, run
|
|
250
|
-
`py -m plexavo` instead, or use the `pip` install.
|
|
181
|
+
## Using Plexavo
|
|
251
182
|
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
Want full isolation and prefer to manage the environment yourself? Modern
|
|
255
|
-
Python (PEP 668) blocks a plain `pip install` outside a venv on many
|
|
256
|
-
Linux and Homebrew setups, so create one first:
|
|
183
|
+
Just run:
|
|
257
184
|
|
|
258
185
|
```bash
|
|
259
|
-
|
|
260
|
-
plexavo-env\Scripts\activate # Windows
|
|
261
|
-
source plexavo-env/bin/activate # Mac/Linux
|
|
262
|
-
|
|
263
|
-
pip install plexavo
|
|
264
|
-
pip install "plexavo[ai]" # with AI-narrated explanations
|
|
186
|
+
plexavo
|
|
265
187
|
```
|
|
266
188
|
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
Control.
|
|
189
|
+
with no arguments. It walks you through choosing an AWS profile (or
|
|
190
|
+
setting a new one up), picking whether you want an HTML or PDF report,
|
|
191
|
+
then runs the scan and shows your 0-100 score with every finding and its
|
|
192
|
+
plain-English fix. Nothing to memorise.
|
|
272
193
|
|
|
273
|
-
|
|
194
|
+
On Windows Option 2, run `python -m plexavo` if the bare `plexavo`
|
|
195
|
+
command is ever blocked.
|
|
274
196
|
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
uv pip install -e . # or: pip install -e . (inside a venv)
|
|
279
|
-
```
|
|
197
|
+
Scripting a scan into CI or a scheduled job? `plexavo scan --help` covers
|
|
198
|
+
the flag-driven form (`--profile`, `--region`, `--report-html`,
|
|
199
|
+
`--report-pdf`, `--explain`).
|
|
280
200
|
|
|
281
201
|
## Project structure
|
|
282
202
|
|
|
@@ -4,7 +4,7 @@ This is the exact same entry point as the installed `plexavo` command, so
|
|
|
4
4
|
running it with no arguments still opens the interactive menu. It exists so
|
|
5
5
|
Windows users can install with plain `pip` and run the tool without going
|
|
6
6
|
through the generated `plexavo.exe` launcher, which Windows Smart App Control
|
|
7
|
-
blocks on some machines (it's unsigned). See the README's
|
|
7
|
+
blocks on some machines (it's unsigned). See the README's Install section.
|
|
8
8
|
"""
|
|
9
9
|
|
|
10
10
|
from plexavo.cli import main
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: plexavo
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.3
|
|
4
4
|
Summary: Open-source AWS misconfiguration scanner — runs with your own local AWS credentials, nothing sent to anyone else.
|
|
5
5
|
Author: Kavee
|
|
6
6
|
License: AGPL-3.0-or-later
|
|
@@ -125,187 +125,107 @@ scoped by a Condition block, or a CloudTrail lookup that hit its page cap on
|
|
|
125
125
|
`--report-html`/`--report-pdf` render this same data as a full report; see
|
|
126
126
|
[Cost](#cost) for what `--explain` needs and what it costs.
|
|
127
127
|
|
|
128
|
-
##
|
|
128
|
+
## Install
|
|
129
129
|
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
130
|
+
Plexavo is a command-line tool. Pick your OS below — every path installs
|
|
131
|
+
it into its own isolated environment, so it never clashes with your other
|
|
132
|
+
Python packages.
|
|
133
133
|
|
|
134
|
-
### macOS & Linux
|
|
134
|
+
### macOS & Linux
|
|
135
135
|
|
|
136
|
-
[uv](https://docs.astral.sh/uv/)
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
**1. Install uv** (if you don't already have it):
|
|
140
|
-
|
|
141
|
-
```bash
|
|
142
|
-
curl -LsSf https://astral.sh/uv/install.sh | sh
|
|
143
|
-
```
|
|
144
|
-
|
|
145
|
-
(Full options: [uv installation docs](https://docs.astral.sh/uv/getting-started/installation/).)
|
|
146
|
-
|
|
147
|
-
**2. Install Plexavo:**
|
|
136
|
+
[uv](https://docs.astral.sh/uv/) puts a single `plexavo` command on your
|
|
137
|
+
PATH, in every terminal, with nothing to activate:
|
|
148
138
|
|
|
149
139
|
```bash
|
|
140
|
+
curl -LsSf https://astral.sh/uv/install.sh | sh # skip if you have uv
|
|
150
141
|
uv tool install plexavo
|
|
151
142
|
```
|
|
152
143
|
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
**Have an Anthropic API key and want AI-narrated explanations** (see
|
|
157
|
-
[Cost](#cost) — it's optional and costs a few cents per scan, not
|
|
158
|
-
free)? Install with the `[ai]` extra instead — same package, just with
|
|
159
|
-
the `anthropic` library included:
|
|
160
|
-
|
|
161
|
-
```bash
|
|
162
|
-
uv tool install "plexavo[ai]"
|
|
163
|
-
```
|
|
164
|
-
|
|
165
|
-
No key yet, or not sure? Skip it for now — the plain install is
|
|
166
|
-
genuinely complete on its own. Add it later with:
|
|
167
|
-
|
|
168
|
-
```bash
|
|
169
|
-
uv tool install --reinstall "plexavo[ai]"
|
|
170
|
-
```
|
|
171
|
-
|
|
172
|
-
Just want to try it once without installing anything?
|
|
144
|
+
Update or remove later with `uv tool upgrade plexavo` /
|
|
145
|
+
`uv tool uninstall plexavo`. Prefer [pipx](https://pipx.pypa.io/)?
|
|
146
|
+
`pipx install plexavo` works the same way.
|
|
173
147
|
|
|
174
|
-
|
|
175
|
-
uvx plexavo scan --profile my-aws-profile
|
|
176
|
-
```
|
|
148
|
+
### Windows
|
|
177
149
|
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
uv tool uninstall plexavo
|
|
183
|
-
```
|
|
150
|
+
`uv` and `pipx` install fine, but the small `plexavo.exe` launcher they
|
|
151
|
+
drop on your PATH is unsigned, and Windows Smart App Control refuses to
|
|
152
|
+
run unsigned executables it doesn't recognise. The way around it is to
|
|
153
|
+
run Plexavo through Python directly. Two ways — both isolated, pick one:
|
|
184
154
|
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
Install with `pip` and run the tool as `py -m plexavo`:
|
|
155
|
+
#### Option 1 — uv (recommended)
|
|
188
156
|
|
|
189
157
|
```powershell
|
|
190
|
-
|
|
191
|
-
py -m plexavo
|
|
192
|
-
```
|
|
193
|
-
|
|
194
|
-
`py -m plexavo` with no arguments opens the interactive menu, exactly
|
|
195
|
-
like the `plexavo` command does on macOS/Linux — flags are only for
|
|
196
|
-
scripting/CI.
|
|
197
|
-
|
|
198
|
-
> **Why not uv/pipx on Windows?** Both work by putting a small generated
|
|
199
|
-
> `plexavo.exe` launcher on your PATH. That launcher is unsigned, and
|
|
200
|
-
> Windows Smart App Control blocks unsigned executables it doesn't
|
|
201
|
-
> recognise — so `plexavo` can fail to start with a "can't confirm who
|
|
202
|
-
> published" message. `py -m plexavo` calls Python directly and never
|
|
203
|
-
> touches that launcher, so it always works. (If your machine doesn't
|
|
204
|
-
> enforce Smart App Control, `uv tool install plexavo` works here too.)
|
|
158
|
+
uv tool install plexavo
|
|
205
159
|
|
|
206
|
-
|
|
160
|
+
Set-ExecutionPolicy -Scope CurrentUser RemoteSigned
|
|
207
161
|
|
|
208
|
-
|
|
209
|
-
|
|
162
|
+
if (!(Test-Path $PROFILE)) { New-Item -ItemType File -Path $PROFILE -Force }
|
|
163
|
+
Add-Content $PROFILE 'function plexavo { & "$env:APPDATA\uv\tools\plexavo\Scripts\python.exe" -m plexavo @args }'
|
|
210
164
|
```
|
|
211
165
|
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
```powershell
|
|
215
|
-
py -m pip install --user --upgrade plexavo
|
|
216
|
-
py -m pip uninstall plexavo
|
|
217
|
-
```
|
|
166
|
+
Open a new terminal and `plexavo` works exactly like it does on
|
|
167
|
+
macOS/Linux.
|
|
218
168
|
|
|
219
|
-
|
|
169
|
+
`uv tool install` still leaves the blocked `plexavo.exe` on your PATH.
|
|
170
|
+
The line you add to your PowerShell profile shadows it with a command
|
|
171
|
+
that calls uv's bundled `python.exe` directly — that Python is signed by
|
|
172
|
+
the Python Software Foundation, so Smart App Control never stops it. You
|
|
173
|
+
add it once; the `Set-ExecutionPolicy` line (also once) is what lets
|
|
174
|
+
PowerShell load your profile at all. Update later with
|
|
175
|
+
`uv tool upgrade plexavo`.
|
|
220
176
|
|
|
221
|
-
|
|
177
|
+
#### Option 2 — virtual environment (no uv)
|
|
222
178
|
|
|
223
179
|
```powershell
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
Open a new terminal and `plexavo` then works just like it does on
|
|
228
|
-
macOS/Linux.
|
|
229
|
-
|
|
230
|
-
### Run a scan
|
|
231
|
-
|
|
232
|
-
```bash
|
|
233
|
-
plexavo scan --profile my-aws-profile --report-html report.html
|
|
180
|
+
py -m venv plexavo-venv
|
|
181
|
+
.\plexavo-venv\Scripts\Activate.ps1
|
|
182
|
+
pip install plexavo
|
|
234
183
|
```
|
|
235
184
|
|
|
236
|
-
|
|
237
|
-
my-aws-profile --report-html report.html`.)
|
|
185
|
+
Now run `plexavo`. When you're finished, type `deactivate`.
|
|
238
186
|
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
187
|
+
A virtual environment is just a folder holding its own copy of Python and
|
|
188
|
+
its packages. Activating it is what adds its `plexavo` to your PATH — and
|
|
189
|
+
only for that one terminal. So every time you open a new terminal you run
|
|
190
|
+
`.\plexavo-venv\Scripts\Activate.ps1` again before using Plexavo. That
|
|
191
|
+
re-activation is the trade-off for installing nothing globally. If
|
|
192
|
+
PowerShell blocks the activate script, run
|
|
193
|
+
`Set-ExecutionPolicy -Scope CurrentUser RemoteSigned` once. Update with
|
|
194
|
+
`pip install --upgrade plexavo` inside the activated environment.
|
|
244
195
|
|
|
245
|
-
|
|
246
|
-
the `[ai]` install above)?
|
|
196
|
+
### AI-narrated explanations (optional, any OS)
|
|
247
197
|
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
plexavo
|
|
251
|
-
```
|
|
198
|
+
Plexavo is complete without this. If you have an Anthropic API key and
|
|
199
|
+
want each finding rewritten as a full narrative (see [Cost](#cost)),
|
|
200
|
+
install `"plexavo[ai]"` in place of `plexavo` in any command above.
|
|
252
201
|
|
|
253
|
-
|
|
254
|
-
available (no API key needed) and raw technical detail otherwise.
|
|
255
|
-
`--explain` replaces that with a live AI narrative for every finding,
|
|
256
|
-
including the templated ones.
|
|
257
|
-
- Drop `--report-html`/`--report-pdf` to just see the console table.
|
|
258
|
-
- `--explain-limit N` (default 25) caps how many findings get a live AI
|
|
259
|
-
call when `--explain` is passed, as a safety rail against unexpectedly
|
|
260
|
-
large real scans — it doesn't limit the free template remediation.
|
|
261
|
-
- No `ANTHROPIC_API_KEY` set, or a call fails for any reason (invalid key,
|
|
262
|
-
rate limit, network issue)? The scan and report are completely
|
|
263
|
-
unaffected — that finding falls back to template/raw detail instead of
|
|
264
|
-
an AI narrative, not an error. See [Cost](#cost).
|
|
265
|
-
|
|
266
|
-
### Alternative: pipx
|
|
267
|
-
|
|
268
|
-
Already use [pipx](https://pipx.pypa.io/) on macOS/Linux? It works exactly
|
|
269
|
-
the same way as uv — its own isolated environment, one global command, no
|
|
270
|
-
venv:
|
|
202
|
+
### From source (for contributing, or trying an unreleased change)
|
|
271
203
|
|
|
272
204
|
```bash
|
|
273
|
-
|
|
274
|
-
|
|
205
|
+
git clone https://github.com/plexavo/plexavo.git
|
|
206
|
+
cd plexavo
|
|
207
|
+
uv pip install -e . # or: pip install -e . (inside a venv)
|
|
275
208
|
```
|
|
276
209
|
|
|
277
|
-
|
|
278
|
-
Windows section above) — if the `plexavo` command is blocked, run
|
|
279
|
-
`py -m plexavo` instead, or use the `pip` install.
|
|
210
|
+
## Using Plexavo
|
|
280
211
|
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
Want full isolation and prefer to manage the environment yourself? Modern
|
|
284
|
-
Python (PEP 668) blocks a plain `pip install` outside a venv on many
|
|
285
|
-
Linux and Homebrew setups, so create one first:
|
|
212
|
+
Just run:
|
|
286
213
|
|
|
287
214
|
```bash
|
|
288
|
-
|
|
289
|
-
plexavo-env\Scripts\activate # Windows
|
|
290
|
-
source plexavo-env/bin/activate # Mac/Linux
|
|
291
|
-
|
|
292
|
-
pip install plexavo
|
|
293
|
-
pip install "plexavo[ai]" # with AI-narrated explanations
|
|
215
|
+
plexavo
|
|
294
216
|
```
|
|
295
217
|
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
Control.
|
|
218
|
+
with no arguments. It walks you through choosing an AWS profile (or
|
|
219
|
+
setting a new one up), picking whether you want an HTML or PDF report,
|
|
220
|
+
then runs the scan and shows your 0-100 score with every finding and its
|
|
221
|
+
plain-English fix. Nothing to memorise.
|
|
301
222
|
|
|
302
|
-
|
|
223
|
+
On Windows Option 2, run `python -m plexavo` if the bare `plexavo`
|
|
224
|
+
command is ever blocked.
|
|
303
225
|
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
uv pip install -e . # or: pip install -e . (inside a venv)
|
|
308
|
-
```
|
|
226
|
+
Scripting a scan into CI or a scheduled job? `plexavo scan --help` covers
|
|
227
|
+
the flag-driven form (`--profile`, `--region`, `--report-html`,
|
|
228
|
+
`--report-pdf`, `--explain`).
|
|
309
229
|
|
|
310
230
|
## Project structure
|
|
311
231
|
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "plexavo"
|
|
7
|
-
version = "0.2.
|
|
7
|
+
version = "0.2.3"
|
|
8
8
|
description = "Open-source AWS misconfiguration scanner — runs with your own local AWS credentials, nothing sent to anyone else."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = { text = "AGPL-3.0-or-later" }
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
"""Checks that `python -m plexavo` works and is equivalent to the installed
|
|
2
2
|
`plexavo` command / `python -m plexavo.cli`.
|
|
3
3
|
|
|
4
|
-
This is the Windows install path (README
|
|
5
|
-
via `py -m plexavo` instead of the Smart-App-Control-blocked
|
|
6
|
-
launcher. If the `plexavo/__main__.py` shim regresses, that
|
|
4
|
+
This is the Windows install path (README Install section): the venv option
|
|
5
|
+
runs the tool via `py -m plexavo` instead of the Smart-App-Control-blocked
|
|
6
|
+
`plexavo.exe` launcher. If the `plexavo/__main__.py` shim regresses, that
|
|
7
|
+
path breaks.
|
|
7
8
|
|
|
8
9
|
Run: python test_cli_entrypoint.py
|
|
9
10
|
"""
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|