Prowler is the world’s most widely used Open-Source Cloud Security Platform that automates security and compliance across any cloud environment.
> /plugin marketplace add prowler-cloud/prowler> /plugin install prowler@prowler-plugins
Repo: prowler-cloud/prowler
What's inside


Prowler is the world’s most widely used Open-Source Cloud Security Platform that automates security and compliance across any cloud environment. With thousands of ready-to-use security checks, remediation guidance, and compliance frameworks, Prowler is built to “Secure ANY Cloud at AI Speed”. Prowler delivers AI-driven, customizable, and easy-to-use assessments, dashboards, reports, and integrations, making cloud security simple, scalable, and cost-effective for organizations of any size.
Prowler includes hundreds of built-in controls to ensure compliance with standards and frameworks, including:
Prowler Cloud and Prowler Local Server, its self-hosted open-source version, are web applications that simplify running Prowler across your cloud provider accounts. They provide a user-friendly interface to visualize the results and streamline your security assessments.

For more details, refer to the Prowler Local Server documentation
prowler <provider>

prowler dashboard

Attack Paths automatically extends every completed AWS scan with a graph that combines Cartography's cloud inventory with Prowler findings. The feature runs in the API worker after each scan.
Two graph backends are supported as the long-lived sink:
neo4j service).Select the sink with ATTACK_PATHS_SINK_DATABASE (neo4j or neptune; default neo4j).
Note: Cartography ingestion always uses a temporary Neo4j database, regardless of the configured sink. The
NEO4J_*variables below must remain set even whenATTACK_PATHS_SINK_DATABASE=neptune.
| Variable | Description | Default |
|---|---|---|
NEO4J_HOST | Hostname used by the API containers. | neo4j |
NEO4J_PORT | Bolt port exposed by Neo4j. | 7687 |
NEO4J_USER / NEO4J_PASSWORD | Credentials with rights to create per-tenant databases. | neo4j / neo4j_password |
| Variable | Description | Default |
|---|---|---|
NEPTUNE_WRITER_ENDPOINT | Bolt host for the Neptune writer instance. Required when sink is neptune. | empty |
NEPTUNE_READER_ENDPOINT | Optional reader endpoint for read-only queries. Falls back to the writer when unset. | empty |
NEPTUNE_PORT | Bolt port exposed by Neptune. | 8182 |
AWS_REGION | Region the Neptune cluster lives in. Required when sink is neptune. | empty |
Neptune authenticates with SigV4 using the standard boto3 credential chain. The worker's IAM role (or AWS_ACCESS_KEY_ID / AWS_SECRET_ACCESS_KEY) supplies the credentials. There is no Neptune password variable.
Every AWS provider scan will enqueue an Attack Paths ingestion job automatically. Other cloud providers will be added in future iterations.
[!Tip] For the most accurate and up-to-date information about checks, services, frameworks, and categories, visit Prowler Hub.
| Provider | Checks | Services | Compliance Frameworks | Categories | Support | Interface |
|---|---|---|---|---|---|---|
| AWS | 621 | 86 | 47 | 19 | Official | UI, API, CLI |
| Azure | 191 | 22 | 21 | 16 | Official | UI, API, CLI |
| GCP | 109 | 20 | 19 | 12 | Official | UI, API, CLI |
| Kubernetes | 92 | 7 | 8 | 11 | Official | UI, API, CLI |
| GitHub | 24 | 3 | 2 | 5 | Official | UI, API, CLI |
| M365 | 111 | 10 | 6 | 10 | Official | UI, API, CLI |
| OCI | 52 | 14 | 5 | 10 | Official | UI, API, CLI |
| Alibaba Cloud | 63 | 9 | 6 | 9 | Official | UI, API, CLI |
| Cloudflare | 29 | 3 | 2 | 5 | Official | UI, API, CLI |
| IaC | See trivy docs. | N/A | N/A | N/A | Official | UI, API, CLI |
| MongoDB Atlas | 10 | 3 | 1 | 8 | Official | UI, API, CLI |
| LLM | See promptfoo docs. | N/A | N/A | N/A | Official | CLI |
| Image | N/A | N/A | N/A | N/A | Official | UI, API, CLI |
| Google Workspace | 65 | 11 | 3 | 6 | Official | UI, API, CLI |
| OpenStack | 34 | 5 | 1 | 9 | Official | UI, API, CLI |
| Vercel | 26 | 6 | 1 | 8 | Official | UI, API, CLI |
| Okta | 29 | 8 | 2 | 2 | Official | UI, API, CLI |
| Linode Contact us | 10 | 3 | 1 | 4 | Unofficial | CLI |
| Huawei Cloud Contact us | 25 | 10 | 1 | 6 | Unofficial | CLI |
| E2E Networks Contact us | 27 | 6 | 0 | 2 | Unofficial | CLI |
| Scaleway Contact us | 1 | 1 | 1 | 1 | Unofficial | CLI |
| StackIT Contact us | 7 | 2 | 1 | 3 | Unofficial | CLI |
| NHN | 6 | 2 | 2 | 0 | Unofficial | CLI |
[!Note] The numbers in the table are updated periodically.
[!Note] Use the following commands to list Prowler's available checks, services, compliance frameworks, and categories:
prowler <provider> --list-checksprowler <provider> --list-servicesprowler <provider> --list-complianceprowler <provider> --list-categories
Prowler Local Server offers flexible installation methods tailored to various environments:
For detailed instructions on using Prowler Local Server, refer to the usage guide.
Docker Compose installed: https://docs.docker.com/compose/install/.macOS/Linux:
VERSION=$(curl -s https://api.github.com/repos/prowler-cloud/prowler/releases/latest | jq -r .tag_name)
curl -sLO "https://raw.githubusercontent.com/prowler-cloud/prowler/refs/tags/${VERSION}/docker-compose.yml"
# Environment variables can be customized in the .env file. Using default values in production environments is not recommended.
curl -sLO "https://raw.githubusercontent.com/prowler-cloud/prowler/refs/tags/${VERSION}/.env"
docker compose up -d
Windows PowerShell:
$VERSION = (Invoke-RestMethod -Uri "https://api.github.com/repos/prowler-cloud/prowler/releases/latest").tag_name
Invoke-WebRequest -Uri "https://raw.githubusercontent.com/prowler-cloud/prowler/refs/tags/$VERSION/docker-compose.yml" -OutFile "docker-compose.yml"
# Environment variables can be customized in the .env file. Using default values in production environments is not recommended.
Invoke-WebRequest -Uri "https://raw.githubusercontent.com/prowler-cloud/prowler/refs/tags/$VERSION/.env" -OutFile ".env"
docker compose up -d
[!WARNING] 🔒 For a secure setup, the API auto-generates a unique key pair,
DJANGO_TOKEN_SIGNING_KEYandDJANGO_TOKEN_VERIFYING_KEY, and stores it in~/.config/prowler-api(non-container) or the bound Docker volume in_data/api(container). Never commit or reuse static/default keys. To rotate keys, delete the stored key files and restart the API.
Once configured, access Prowler Local Server at http://localhost:3000. Sign up using your email and password to get started.
[!Note] If you want to use AWS role assumption (e.g., with the "Connect assuming IAM Role" option), you may need to mount your local
.awsdirectory into the container as a volume (e.g.,- "${HOME}/.aws:/home/prowler/.aws:ro"). There are several ways to configure credentials for Docker containers. See the Troubleshooting section for more details and examples.
You can find more information in the Troubleshooting section.
git installed.uv installed: uv installation.pnpm installed: pnpm installation.Docker Compose installed: https://docs.docker.com/compose/install/.git clone https://github.com/prowler-cloud/prowler
cd prowler/api
uv sync
source .venv/bin/activate
set -a
source .env
docker compose up postgres valkey -d
cd src/backend
python manage.py migrate --database admin
gunicorn -c config/guniconf.py config.wsgi:application
After completing the setup, access the API documentation at http://localhost:8080/api/v1/docs.
git clone https://github.com/prowler-cloud/prowler
cd prowler/api
uv sync
source .venv/bin/activate
set -a
source .env
cd src/backend
python -m celery -A config.celery worker -l info -E
git clone https://github.com/prowler-cloud/prowler
cd prowler/api
uv sync
source .venv/bin/activate
set -a
source .env
cd src/backend
python -m celery -A config.celery beat -l info --scheduler django_celery_beat.schedulers:DatabaseScheduler
git clone https://github.com/prowler-cloud/prowler
cd prowler/ui
pnpm install
pnpm run build
pnpm start
Once configured, access Prowler Local Server at http://localhost:3000. Sign up using your email and password to get started.
Some pre-commit hooks require tools installed on your system:
Install TruffleHog (secret scanning) — see the official installation options.
Install Hadolint (Dockerfile linting) — see the official installation options.
Prowler CLI is available as a project in PyPI. Consequently, it can be installed using pip with Python >=3.10, <3.13:
pip install prowler
prowler -v
For further guidance, refer to https://docs.prowler.com
The following versions of Prowler CLI are available, depending on your requirements:
latest: Synchronizes with the master branch. Note that this version is not stable.v4-latest: Synchronizes with the v4 branch. Note that this version is not stable.v3-latest: Synchronizes with the v3 branch. Note that this version is not stable.<x.y.z> (release): Stable releases corresponding to specific versions. See the complete list of Prowler releases.stable: Always points to the latest release.v4-stable: Always points to the latest release for v4.v3-stable: Always points to the latest release for v3.The container images are available here:
Python >=3.10, <3.13 is required with uv:
git clone https://github.com/prowler-cloud/prowler
cd prowler
uv sync
source .venv/bin/activate
python prowler-cli.py -v
[!IMPORTANT] To clone Prowler on Windows, configure Git to support long file paths by running the following command:
git config core.longpaths true.
The official Prowler GitHub Action runs Prowler scans in your GitHub workflows using the official prowlercloud/prowler Docker image. Scans run on any supported provider, with optional --push-to-cloud to send findings to Prowler Cloud and optional SARIF upload so findings show up in the repo's Security → Code scanning tab and as inline PR annotations.
name: Prowler IaC Scan
on:
pull_request:
permissions:
contents: read
security-events: write
actions: read
jobs:
prowler:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: prowler-cloud/prowler@5.25
with:
provider: iac
output-formats: sarif json-ocsf
upload-sarif: true
flags: --severity critical high
Full configuration, per-provider authentication, and SARIF examples: Prowler GitHub Action tutorial. Marketplace listing: Prowler Security Scan.
Prowler Local Server is composed of four key components:
flowchart TB
user([User / Security Team])
cli([Prowler CLI])
subgraph APP["Prowler Local Server"]
ui["Prowler UI<br/>(Next.js)"]
api["Prowler API<br/>(Django REST Framework)"]
worker["API Worker<br/>(Celery)"]
beat["API Scheduler<br/>(Celery Beat)"]
mcp["Prowler MCP Server<br/>(Lighthouse AI tools)"]
end
sdk["Prowler SDK<br/>(Python)"]
subgraph DATA["Data Layer"]
pg[("PostgreSQL")]
valkey[("Valkey / Redis")]
neo4j[("Neo4j")]
end
providers["Providers"]
user --> ui
user --> cli
ui -->|REST| api
ui -->|MCP HTTP| mcp
mcp -->|REST| api
api --> pg
api --> valkey
beat -->|enqueue jobs| valkey
valkey -->|dispatch| worker
worker --> pg
worker -->|Attack Paths| neo4j
worker -->|invokes| sdk
cli --> sdk
sdk --> providers
Prowler can be executed across various environments, offering flexibility to meet your needs. It can be run from:
Your own workstation
A Kubernetes Job
Google Compute Engine
Azure Virtual Machines (VMs)
Amazon EC2 instances
AWS Fargate or other container platforms
CloudShell
And many more environments.

Prowler includes a comprehensive set of AI Skills that help AI coding assistants understand Prowler's codebase patterns and conventions.
Skills are structured instructions that give AI assistants the context they need to write code that follows Prowler's standards. They include:
| Category | Skills |
|---|---|
| Generic | typescript, react-19, nextjs-15, tailwind-4, playwright, pytest, django-drf, zod-4, zustand-5, ai-sdk-5 |
| Prowler | prowler, prowler-api, prowler-ui, prowler-mcp, prowler-sdk-check, prowler-test-ui, prowler-test-api, prowler-test-sdk, prowler-compliance, prowler-provider, prowler-pr, prowler-docs |
./skills/setup.sh
This configures skills for AI coding assistants that follow the agentskills.io standard:
| Tool | Configuration |
|---|---|
| Claude Code | .claude/skills/ (symlink) |
| OpenCode | .claude/skills/ (symlink) |
| Codex (OpenAI) | .codex/skills/ (symlink) |
| GitHub Copilot | .github/skills/ (symlink) |
| Gemini CLI | .gemini/skills/ (symlink) |
Note: Restart your AI coding assistant after running setup to load the skills. Gemini CLI requires
experimental.skillsenabled in settings.
For installation instructions, usage details, tutorials, and the Developer Guide, visit https://docs.prowler.com/
Prowler is licensed under the Apache License 2.0.
A copy of the License is available at http://www.apache.org/licenses/LICENSE-2.0
.backportrc.json
.claude-plugin/
marketplace.json
.config/
wt.toml
.env
.gitattributes
.github/
actionlint.yaml
actions/
grype-scan/
action.yml
osv-scanner/
action.yml
setup-python-uv/
action.yml
slack-notification/
action.yml
README.md
trivy-scan/
action.yml
agents/
issue-triage.md
aw/
actions-lock.json
CODEOWNERS
codeql/
api-codeql-config.yml
sdk-codeql-config.yml
ui-codeql-config.yml
FUNDING.yml
ISSUE_TEMPLATE/
bug_report.yml
config.yml
feature-request.yml
new-check-request.yml
labeler.yml
pull_request_template.md
renovate.json
scripts/
changelog_attribution.py
grype-pr-comment.js
osv-scan.sh
slack-messages/
container-release-completed.json
container-release-started.json
README.md
test-e2e-path-resolution.sh
test-impact.py
trivy-pr-comment.js
test-impact.yml
towncrier/
template.md.jinja
workflows/
api-code-quality.yml
api-codeql.yml
api-container-build-push.yml
api-container-checks.yml
api-security.yml
api-tests.yml
backport.yml
bump-version.yml
check-test-init-files.yml
ci-actionlint.yml
ci-zizmor.yml
comment-label-update.yml
compile-changelogs.yml
conventional-commit.yml
create-backport-label.yml
dockerhub-descriptions.yml
docs-check-provider-cards.yml
find-secrets.yml
helm-chart-checks.yml
helm-chart-release.yml
issue-lock-on-close.yml
issue-triage.lock.yml
issue-triage.md
labeler.yml
markdown-lint.yml
mcp-container-build-push.yml
mcp-container-checks.yml
mcp-pypi-release.yml
mcp-security.yml
mcp-tests.yml
nightly-arm64-container-builds.yml
pr-check-changelog.yml
pr-check-compliance-mapping.yml
pr-conflict-checker.yml
pr-merged.yml
prepare-release.yml
release-freeze-gate.yml
renovate-config-validate.yml
sdk-check-duplicate-test-names.yml
sdk-code-quality.yml
sdk-codeql.yml
sdk-container-build-push.yml
sdk-container-checks.yml
sdk-pypi-release.yml
sdk-refresh-aws-services-regions.yml
sdk-refresh-oci-regions.yml
sdk-security.yml
sdk-tests.yml
test-impact-analysis.yml
ui-codeql.yml
ui-container-build-push.yml
ui-container-checks.yml
ui-e2e-tests-v2.yml
ui-security.yml
ui-tests.yml
zizmor.yml
.gitignore
.grype.yaml
.markdownlint.json
.markdownlintignore
.pre-commit-config.yaml
.readthedocs.yaml
.trivyignore.yaml
.worktreeinclude
action.yml
AGENTS.md
api/
.env.example
AGENTS.md
changelog.d/
.gitkeep
README.md
saml-acs-post-only.fixed.md
tenant-deletion-transaction.fixed.md
users-me-active-membership.changed.md
CHANGELOG.md
docker-entrypoint.sh
Dockerfile
docs/
orphan-task-recovery.md
partitions.md
pyproject.toml
README.md
src/
__init__.py
backend/
__init__.py
api/
__init__.py
adapters.py
apps.py
attack_paths/
__init__.py
cypher_sanitizer.py
database.py
ingest/
__init__.py
driver.py
queries/
__init__.py
aws_deprecated.py
aws.py
registry.py
schema.py
types.py
retryable_session.py
sink/
__init__.py
base.py
drop.py
factory.py
neo4j.py
neptune.py
views_helpers.py
authentication.py
base_views.py
celery_utils.py
compliance.py
constants.py
db_router.py
db_utils.py
decorators.py
exceptions.py
filters.py
fixtures/
dev/
0_dev_users.json
1_dev_tenants.json
2_dev_providers.json
3_dev_scans.json
4_dev_resources.json
5_dev_findings.json
6_dev_rbac.json
7_dev_compliance.json
8_dev_attack_paths_scans.json
health.py
management/
commands/
check_and_fix_socialaccount_sites_migration.py
findings.py
reconcile_orphan_tasks.py
middleware.py
migrations/
__init__.py
0001_initial.py
0002_token_migrations.py
0003_update_provider_unique_constraint_with_is_deleted.py
0004_rbac.py
0005_rbac_missing_admin_roles.py
0006_findings_first_seen.py
0007_scan_and_scan_summaries_indexes.py
0008_daily_scheduled_tasks_update.py
0009_increase_provider_uid_maximum_length.py
0010_findings_performance_indexes_partitions.py
0011_findings_performance_indexes_parent.py
0012_scan_report_output.py
0013_integrations_enum.py
0014_integrations.py
0015_finding_muted.py
0016_finding_compliance_resource_details_and_more.py
0017_m365_provider.py
0018_resource_scan_summaries.py
0019_finding_denormalize_resource_fields.py
0020_findings_new_performance_indexes_partitions.py
0021_findings_new_performance_indexes_parent.py
0022_scan_summaries_performance_indexes.py
0023_resources_lookup_optimization.py
0024_findings_uid_index_partitions.py
0025_findings_uid_index_parent.py
0026_provider_secret_gcp_service_account.py
0027_compliance_requirement_overviews.py
0028_findings_check_index_partitions.py
0029_findings_check_index_parent.py
0030_lighthouseconfiguration.py
0031_scan_disable_on_cascade_periodic_tasks.py
0032_saml.py
0033_processors_enum.py
0034_processors.py
0035_finding_muted_reason.py
0036_rfm_tenant_finding_index_partitions.py
0037_rfm_tenant_finding_index_parent.py
0038_resource_failed_findings_count.py
0039_resource_resources_failed_findings_idx.py
0040_rfm_tenant_resource_index_partitions.py
0041_rfm_tenant_resource_parent_partitions.py
0042_scan_scans_prov_ins_desc_idx.py
0043_github_provider.py
0044_integration_unique_configuration_per_tenant.py
0045_alter_scan_output_location.py
0046_lighthouse_gpt5.py
0047_remove_integration_unique_configuration_per_tenant.py
0048_api_key.py
0049_compliancerequirementoverview_passed_failed_findings.py
0050_lighthouse_multi_llm.py
0051_oraclecloud_provider.py
0052_mute_rules.py
0053_lighthouse_bedrock_openai_compatible.py
0054_iac_provider.py
0055_mongodbatlas_provider.py
0056_remove_provider_unique_provider_uids_and_more.py
0057_threatscoresnapshot.py
0058_drop_redundant_compliance_requirement_indexes.py
0059_compliance_overview_summary.py
0060_attack_surface_overview.py
0061_daily_severity_summary.py
0062_backfill_daily_severity_summaries.py
0063_scan_category_summary.py
0064_finding_categories.py
0065_alibabacloud_provider.py
0066_provider_compliance_score.py
0067_tenant_compliance_summary.py
0068_finding_resource_group_scangroupsummary.py
0069_resource_resource_group.py
0070_attack_paths_scan.py
0071_drop_partitioned_indexes.py
0072_drop_unused_indexes.py
0073_findings_fail_new_index_partitions.py
0074_findings_fail_new_index_parent.py
0075_cloudflare_provider.py
0076_openstack_provider.py
0077_remove_attackpathsscan_graph_database_indexes.py
0078_remove_attackpathsscan_graph_database_fields.py
0079_attackpathsscan_graph_data_ready.py
0080_backfill_attack_paths_graph_data_ready.py
0081_finding_group_daily_summary.py
0082_backfill_finding_group_summaries.py
0083_image_provider.py
0084_googleworkspace_provider.py
0085_finding_group_daily_summary_trgm_indexes.py
0086_attack_paths_cleanup_periodic_task.py
0087_vercel_provider.py
0088_finding_group_status_muted_fields.py
0089_backfill_finding_group_status_muted.py
0090_attack_paths_cleanup_priority.py
0091_findings_arrays_gin_index_partitions.py
0092_findings_arrays_gin_index_parent.py
0093_okta_provider.py
0095_reconcile_orphan_tasks_periodic_task.py
0096_attack_paths_scan_is_migrated.py
0097_attack_paths_scan_db_defaults.py
models.py
pagination.py
partitions.py
rbac/
permissions.py
renderers.py
rls.py
schema_extensions.py
schema_hooks.py
signals.py
specs/
v1.yaml
sse/
__init__.py
base_views.py
channelmanager.py
utils.py
tests/
__init__.py
integration/
test_authentication.py
test_providers.py
test_rls_transaction.py
test_tenants.py
test_adapters.py
test_apps.py
test_attack_paths_database.py
test_attack_paths_queries.py
test_attack_paths_service_privesc_queries.py
test_attack_paths.py
test_authentication.py
test_celery_settings.py
test_compliance.py
test_cypher_sanitizer.py
test_database.py
test_db_connection_labels.py
test_db_utils.py
test_decorators.py
test_health.py
test_middleware.py
test_mixins.py
test_models.py
test_rbac.py
test_retryable_session.py
test_sentry.py
test_serializers.py
test_sink.py
test_sse.py
test_utils.py
test_uuid_utils.py
test_validators.py
test_version.py
test_views.py
utils.py
uuid_utils.py
v1/
__init__.py
mixins.py
serializer_utils/
authentication.py
base.py
integrations.py
lighthouse.py
processors.py
providers.py
serializers.py
urls.py
views.py
validators.py
config/
__init__.py
asgi.py
celery.py
custom_logging.py
django/
__init__.py
base.py
devel.py
production.py
testing.py
env.py
guniconf.py
settings/
__init__.py
celery.py
eventstream.py
partitions.py
sentry.py
social_login.py
urls.py
version.py
wsgi.py
conftest.py
manage.py
pytest.ini
tasks/
__init__.py
assets/
fonts/
FiraCode-Regular.ttf
PlusJakartaSans-Regular.ttf
img/
cis_logo.png
ens_logo.png
nis2_logo.png
prowler_logo.png
... 1600 moreShowing a partial view of a very large repo.
FAQ
prowler is a Claude Code plugin with 39 hand-picked skills for security work, indexed on Flowy. Install it with the command on its page. It includes framework-compliance-triage, ai-sdk-5, django-drf. Its skills do not fire on their own yet. Request auto-invocation to have Flowy route them as you prompt. Free and open source.