-Prowler Lighthouse integrates with the NextJS application:
+Prowler Lighthouse AI integrates with the NextJS application:
- The [Langgraph-Supervisor](https://www.npmjs.com/package/@langchain/langgraph-supervisor) library integrates directly with NextJS
- The system uses the authenticated user session to interact with the Prowler API server
@@ -74,7 +74,7 @@ Modifying the supervisor prompt allows you to:
The supervisor agent and all specialized agents are defined in the `route.ts` file. The supervisor agent uses [langgraph-supervisor](https://www.npmjs.com/package/@langchain/langgraph-supervisor), while other agents use the prebuilt [create-react-agent](https://langchain-ai.github.io/langgraphjs/how-tos/create-react-agent/).
-To add new capabilities or all Lighthouse to interact with other APIs, create additional specialized agents:
+To add new capabilities or all Lighthouse AI to interact with other APIs, create additional specialized agents:
1. First determine what the new agent would do. Create a detailed prompt defining the agent's purpose and capabilities. You can see an example from [here](https://github.com/prowler-cloud/prowler/blob/master/ui/lib/lighthouse/prompts.ts#L359-L385).
???+ note
diff --git a/docs/getting-started/requirements.md b/docs/getting-started/requirements.md
index 1405477533..d2be93c630 100644
--- a/docs/getting-started/requirements.md
+++ b/docs/getting-started/requirements.md
@@ -491,11 +491,15 @@ The provided credentials must have the appropriate permissions to perform all th
## Infrastructure as Code (IaC)
-Prowler's Infrastructure as Code (IaC) provider enables you to scan local infrastructure code for security and compliance issues using [Checkov](https://www.checkov.io/). This provider supports a wide range of IaC frameworks and requires no cloud authentication.
+Prowler's Infrastructure as Code (IaC) provider enables you to scan local or remote infrastructure code for security and compliance issues using [Checkov](https://www.checkov.io/). This provider supports a wide range of IaC frameworks and requires no cloud authentication for local scans.
### Authentication
-The IaC provider does not require any authentication or credentials since it scans local files directly. This makes it ideal for CI/CD pipelines and local development environments.
+- For local scans, no authentication is required.
+- For remote repository scans, authentication can be provided via:
+ - [**GitHub Username and Personal Access Token (PAT)**](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens#creating-a-personal-access-token-classic)
+ - [**GitHub OAuth App Token**](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens#creating-a-fine-grained-personal-access-token)
+ - [**Git URL**](https://git-scm.com/docs/git-clone#_git_urls)
### Supported Frameworks
@@ -515,27 +519,3 @@ The IaC provider leverages Checkov to support multiple frameworks, including:
- Kustomize
- OpenAPI
- SAST, SCA (Software Composition Analysis)
-
-### Usage
-
-To run Prowler with the IaC provider, use the `iac` flag. You can specify the directory to scan, frameworks to include, and paths to exclude.
-
-#### Basic Example
-
-```console
-prowler iac --scan-path ./my-iac-directory
-```
-
-#### Specify Frameworks
-
-Scan only Terraform and Kubernetes files:
-
-```console
-prowler iac --scan-path ./my-iac-directory --frameworks terraform kubernetes
-```
-
-#### Exclude Paths
-
-```console
-prowler iac --scan-path ./my-iac-directory --exclude-path ./my-iac-directory/test,./my-iac-directory/examples
-```
diff --git a/docs/img/mutelist-ui-1.png b/docs/img/mutelist-ui-1.png
new file mode 100644
index 0000000000..8114e64fdf
Binary files /dev/null and b/docs/img/mutelist-ui-1.png differ
diff --git a/docs/img/mutelist-ui-2.png b/docs/img/mutelist-ui-2.png
new file mode 100644
index 0000000000..847f7c1b16
Binary files /dev/null and b/docs/img/mutelist-ui-2.png differ
diff --git a/docs/img/mutelist-ui-3.png b/docs/img/mutelist-ui-3.png
new file mode 100644
index 0000000000..da1951c533
Binary files /dev/null and b/docs/img/mutelist-ui-3.png differ
diff --git a/docs/img/mutelist-ui-4.png b/docs/img/mutelist-ui-4.png
new file mode 100644
index 0000000000..82ce685e51
Binary files /dev/null and b/docs/img/mutelist-ui-4.png differ
diff --git a/docs/img/mutelist-ui-5.png b/docs/img/mutelist-ui-5.png
new file mode 100644
index 0000000000..128bf30731
Binary files /dev/null and b/docs/img/mutelist-ui-5.png differ
diff --git a/docs/img/mutelist-ui-6.png b/docs/img/mutelist-ui-6.png
new file mode 100644
index 0000000000..659eccb61e
Binary files /dev/null and b/docs/img/mutelist-ui-6.png differ
diff --git a/docs/img/mutelist-ui-7.png b/docs/img/mutelist-ui-7.png
new file mode 100644
index 0000000000..e6352c97e9
Binary files /dev/null and b/docs/img/mutelist-ui-7.png differ
diff --git a/docs/img/mutelist-ui-8.png b/docs/img/mutelist-ui-8.png
new file mode 100644
index 0000000000..54e2110edb
Binary files /dev/null and b/docs/img/mutelist-ui-8.png differ
diff --git a/docs/img/mutelist-ui-9.png b/docs/img/mutelist-ui-9.png
new file mode 100644
index 0000000000..cba2ece1a3
Binary files /dev/null and b/docs/img/mutelist-ui-9.png differ
diff --git a/docs/img/saml/idp_config.png b/docs/img/saml/idp_config.png
new file mode 100644
index 0000000000..0665b34886
Binary files /dev/null and b/docs/img/saml/idp_config.png differ
diff --git a/docs/img/saml/saml-sso-azure-1.png b/docs/img/saml/saml-sso-azure-1.png
new file mode 100644
index 0000000000..c714d742e7
Binary files /dev/null and b/docs/img/saml/saml-sso-azure-1.png differ
diff --git a/docs/img/saml/saml-sso-azure-2.png b/docs/img/saml/saml-sso-azure-2.png
new file mode 100644
index 0000000000..483af4548c
Binary files /dev/null and b/docs/img/saml/saml-sso-azure-2.png differ
diff --git a/docs/img/saml/saml-sso-azure-3.png b/docs/img/saml/saml-sso-azure-3.png
new file mode 100644
index 0000000000..7983694c5c
Binary files /dev/null and b/docs/img/saml/saml-sso-azure-3.png differ
diff --git a/docs/img/saml/saml-sso-azure-4.png b/docs/img/saml/saml-sso-azure-4.png
new file mode 100644
index 0000000000..f6c6029343
Binary files /dev/null and b/docs/img/saml/saml-sso-azure-4.png differ
diff --git a/docs/img/saml/saml-sso-azure-5.png b/docs/img/saml/saml-sso-azure-5.png
new file mode 100644
index 0000000000..6dbeb6e65d
Binary files /dev/null and b/docs/img/saml/saml-sso-azure-5.png differ
diff --git a/docs/img/saml/saml-sso-azure-6.png b/docs/img/saml/saml-sso-azure-6.png
new file mode 100644
index 0000000000..b351004a87
Binary files /dev/null and b/docs/img/saml/saml-sso-azure-6.png differ
diff --git a/docs/img/saml/saml-sso-azure-7.png b/docs/img/saml/saml-sso-azure-7.png
new file mode 100644
index 0000000000..76551bef06
Binary files /dev/null and b/docs/img/saml/saml-sso-azure-7.png differ
diff --git a/docs/img/saml/saml-sso-azure-8.png b/docs/img/saml/saml-sso-azure-8.png
new file mode 100644
index 0000000000..5dd2f1e1ef
Binary files /dev/null and b/docs/img/saml/saml-sso-azure-8.png differ
diff --git a/docs/img/saml/saml-sso-azure-9.png b/docs/img/saml/saml-sso-azure-9.png
new file mode 100644
index 0000000000..130dd5e7cd
Binary files /dev/null and b/docs/img/saml/saml-sso-azure-9.png differ
diff --git a/docs/img/saml/saml-step-1.png b/docs/img/saml/saml-step-1.png
new file mode 100644
index 0000000000..d505c2597c
Binary files /dev/null and b/docs/img/saml/saml-step-1.png differ
diff --git a/docs/img/saml/saml-step-2.png b/docs/img/saml/saml-step-2.png
new file mode 100644
index 0000000000..ddb036c98d
Binary files /dev/null and b/docs/img/saml/saml-step-2.png differ
diff --git a/docs/img/saml/saml-step-3.png b/docs/img/saml/saml-step-3.png
new file mode 100644
index 0000000000..2b8dfbd845
Binary files /dev/null and b/docs/img/saml/saml-step-3.png differ
diff --git a/docs/img/saml/saml-step-4.png b/docs/img/saml/saml-step-4.png
new file mode 100644
index 0000000000..cca0987c50
Binary files /dev/null and b/docs/img/saml/saml-step-4.png differ
diff --git a/docs/img/saml/saml-step-5.png b/docs/img/saml/saml-step-5.png
new file mode 100644
index 0000000000..ea83f960eb
Binary files /dev/null and b/docs/img/saml/saml-step-5.png differ
diff --git a/docs/img/saml/saml-step-remove.png b/docs/img/saml/saml-step-remove.png
new file mode 100644
index 0000000000..f0868691af
Binary files /dev/null and b/docs/img/saml/saml-step-remove.png differ
diff --git a/docs/img/saml/saml_attribute_statements.png b/docs/img/saml/saml_attribute_statements.png
new file mode 100644
index 0000000000..62d6366131
Binary files /dev/null and b/docs/img/saml/saml_attribute_statements.png differ
diff --git a/docs/index.md b/docs/index.md
index fb8e1d734e..f8625de875 100644
--- a/docs/index.md
+++ b/docs/index.md
@@ -312,6 +312,51 @@ Prowler is available as a project in [PyPI](https://pypi.org/project/prowler/),
prowler azure --az-cli-auth
```
+### Prowler App Update
+
+You have two options to upgrade your Prowler App installation:
+
+#### Option 1: Change env file with the following values
+
+Edit your `.env` file and change the version values:
+
+```env
+PROWLER_UI_VERSION="5.9.0"
+PROWLER_API_VERSION="5.9.0"
+```
+
+#### Option 2: Run the following command
+
+```bash
+docker compose pull --policy always
+```
+
+The `--policy always` flag ensures that Docker pulls the latest images even if they already exist locally.
+
+
+???+ note "What Gets Preserved During Upgrade"
+
+ Everything is preserved, nothing will be deleted after the update.
+
+#### Troubleshooting
+
+If containers don't start, check logs for errors:
+
+```bash
+# Check logs for errors
+docker compose logs
+
+# Verify image versions
+docker images | grep prowler
+```
+
+If you encounter issues, you can rollback to the previous version by changing the `.env` file back to your previous version and running:
+
+```bash
+docker compose pull
+docker compose up -d
+```
+
## Prowler container versions
The available versions of Prowler CLI are the following:
@@ -614,12 +659,23 @@ prowler github --github-app-id app_id --github-app-key app_key
#### Infrastructure as Code (IaC)
-Prowler's Infrastructure as Code (IaC) provider enables you to scan local infrastructure code for security and compliance issues using [Checkov](https://www.checkov.io/). This provider supports a wide range of IaC frameworks, allowing you to assess your code before deployment.
+Prowler's Infrastructure as Code (IaC) provider enables you to scan local or remote infrastructure code for security and compliance issues using [Checkov](https://www.checkov.io/). This provider supports a wide range of IaC frameworks, allowing you to assess your code before deployment.
```console
# Scan a directory for IaC files
prowler iac --scan-path ./my-iac-directory
+# Scan a remote GitHub repository (public or private)
+prowler iac --scan-repository-url https://github.com/user/repo.git
+
+# Authenticate to a private repo with GitHub username and PAT
+prowler iac --scan-repository-url https://github.com/user/repo.git \
+ --github-username
## How It Works
-Prowler Lighthouse uses OpenAI's language models and integrates with your Prowler security findings data.
+Prowler Lighthouse AI uses OpenAI's language models and integrates with your Prowler security findings data.
Here's what's happening behind the scenes:
@@ -14,28 +14,28 @@ Here's what's happening behind the scenes:
- It uses a ["supervisor" architecture](https://langchain-ai.lang.chat/langgraphjs/tutorials/multi_agent/agent_supervisor/) that interacts with different agents for specialized tasks. For example, `findings_agent` can analyze detected security findings, while `overview_agent` provides a summary of connected cloud accounts.
- The system connects to OpenAI models to understand, fetch the right data, and respond to the user's query.
???+ note
- Lighthouse is tested against `gpt-4o` and `gpt-4o-mini` OpenAI models.
+ Lighthouse AI is tested against `gpt-4o` and `gpt-4o-mini` OpenAI models.
- The supervisor agent is the main contact point. It is what users interact with directly from the chat interface. It coordinates with other agents to answer users' questions comprehensively.
-
+
???+ note
All agents can only read relevant security data. They cannot modify your data or access sensitive information like configured secrets or tenant details.
## Set up
-Getting started with Prowler Lighthouse is easy:
+Getting started with Prowler Lighthouse AI is easy:
1. Go to the configuration page in your Prowler dashboard.
2. Enter your OpenAI API key.
3. Select your preferred model. The recommended one for best results is `gpt-4o`.
4. (Optional) Add business context to improve response quality and prioritization.
-
+
### Adding Business Context
-The optional business context field lets you provide additional information to help Lighthouse understand your environment and priorities, including:
+The optional business context field lets you provide additional information to help Lighthouse AI understand your environment and priorities, including:
- Your organization's cloud security goals
- Information about account owners or responsible teams
@@ -46,7 +46,7 @@ Better context leads to more relevant responses and prioritization that aligns w
## Capabilities
-Prowler Lighthouse is designed to be your AI security team member, with capabilities including:
+Prowler Lighthouse AI is designed to be your AI security team member, with capabilities including:
### Natural Language Querying
@@ -70,7 +70,7 @@ Get tailored step-by-step instructions for fixing security issues:
### Enhanced Context and Analysis
-Lighthouse can provide additional context to help you understand the findings:
+Lighthouse AI can provide additional context to help you understand the findings:
- Explain security concepts related to findings in simple terms
- Provide risk assessments based on your environment and context
@@ -82,20 +82,20 @@ Lighthouse can provide additional context to help you understand the findings:
## Important Notes
-Prowler Lighthouse is powerful, but there are limitations:
+Prowler Lighthouse AI is powerful, but there are limitations:
- **Continuous improvement**: Please report any issues, as the feature may make mistakes or encounter errors, despite extensive testing.
-- **Access limitations**: Lighthouse can only access data the logged-in user can view. If you can't see certain information, Lighthouse can't see it either.
-- **NextJS session dependence**: If your Prowler application session expires or logs out, Lighthouse will error out. Refresh and log back in to continue.
+- **Access limitations**: Lighthouse AI can only access data the logged-in user can view. If you can't see certain information, Lighthouse AI can't see it either.
+- **NextJS session dependence**: If your Prowler application session expires or logs out, Lighthouse AI will error out. Refresh and log back in to continue.
- **Response quality**: The response quality depends on the selected OpenAI model. For best results, use gpt-4o.
### Getting Help
-If you encounter issues with Prowler Lighthouse or have suggestions for improvements, please [reach out through our Slack channel](https://goto.prowler.com/slack).
+If you encounter issues with Prowler Lighthouse AI or have suggestions for improvements, please [reach out through our Slack channel](https://goto.prowler.com/slack).
### What Data Is Shared to OpenAI?
-The following API endpoints are accessible to Prowler Lighthouse. Data from the following API endpoints could be shared with OpenAI depending on the scope of user's query:
+The following API endpoints are accessible to Prowler Lighthouse AI. Data from the following API endpoints could be shared with OpenAI depending on the scope of user's query:
#### Accessible API Endpoints
@@ -139,7 +139,7 @@ The following API endpoints are accessible to Prowler Lighthouse. Data from the
#### Excluded API Endpoints
-Not all Prowler API endpoints are integrated with Lighthouse. They are intentionally excluded for the following reasons:
+Not all Prowler API endpoints are integrated with Lighthouse AI. They are intentionally excluded for the following reasons:
- OpenAI/other LLM providers shouldn't have access to sensitive data (like fetching provider secrets and other sensitive config)
- Users queries don't need responses from those API endpoints (ex: tasks, tenant details, downloading zip file, etc.)
@@ -173,7 +173,7 @@ Not all Prowler API endpoints are integrated with Lighthouse. They are intention
- List all tasks - `/api/v1/tasks`
- Retrieve data from a specific task - `/api/v1/tasks/{id}`
-**Lighthouse Configuration:**
+**Lighthouse AI Configuration:**
- List OpenAI configuration - `/api/v1/lighthouse-config`
- Retrieve OpenAI key and configuration - `/api/v1/lighthouse-config/{id}`
@@ -187,7 +187,7 @@ Not all Prowler API endpoints are integrated with Lighthouse. They are intention
During feature development, we evaluated other LLM models.
-- **Claude AI** - Claude models have [tier-based ratelimits](https://docs.anthropic.com/en/api/rate-limits#requirements-to-advance-tier). For Lighthouse to answer slightly complex questions, there are a handful of API calls to the LLM provider within few seconds. With Claude's tiering system, users must purchase $400 credits or convert their subscription to monthly invoicing after talking to their sales team. This pricing may not suit all Prowler users.
+- **Claude AI** - Claude models have [tier-based ratelimits](https://docs.anthropic.com/en/api/rate-limits#requirements-to-advance-tier). For Lighthouse AI to answer slightly complex questions, there are a handful of API calls to the LLM provider within few seconds. With Claude's tiering system, users must purchase $400 credits or convert their subscription to monthly invoicing after talking to their sales team. This pricing may not suit all Prowler users.
- **Gemini Models** - Gemini lacks a solid tool calling feature like OpenAI. It calls functions recursively until exceeding limits. Gemini-2.5-Pro-Experimental is better than previous models regarding tool calling and responding, but it's still experimental.
- **Deepseek V3** - Doesn't support system prompt messages.
@@ -197,8 +197,8 @@ Context windows are limited. While demo data fits inside the context window, que
**3. Is my security data shared with OpenAI?**
-Minimal data is shared to generate useful responses. Agents can access security findings and remediation details when needed. Provider secrets are protected by design and cannot be read. The Lighthouse key is only accessible to our NextJS server and is never sent to LLMs. Resource metadata (names, tags, account/project IDs, etc) may be shared with OpenAI based on your query requirements.
+Minimal data is shared to generate useful responses. Agents can access security findings and remediation details when needed. Provider secrets are protected by design and cannot be read. The OpenAI key configured with Lighthouse AI is only accessible to our NextJS server and is never sent to LLMs. Resource metadata (names, tags, account/project IDs, etc) may be shared with OpenAI based on your query requirements.
-**4. Can the Lighthouse change my cloud environment?**
+**4. Can the Lighthouse AI change my cloud environment?**
No. The agent doesn't have the tools to make the changes, even if the configured cloud provider API keys contain permissions to modify resources.
diff --git a/docs/tutorials/prowler-app-mute-findings.md b/docs/tutorials/prowler-app-mute-findings.md
new file mode 100644
index 0000000000..599ade9c55
--- /dev/null
+++ b/docs/tutorials/prowler-app-mute-findings.md
@@ -0,0 +1,59 @@
+# Mute Findings (Mutelist)
+
+Prowler App allows users to mute specific findings to focus on the most critical security issues. This comprehensive guide demonstrates how to effectively use the Mutelist feature to manage and prioritize security findings.
+
+## What Is the Mutelist Feature?
+
+The Mutelist feature enables users to:
+
+- **Suppress specific findings** from appearing in future scans
+- **Focus on critical issues** by hiding resolved or accepted risks
+- **Maintain audit trails** of muted findings for compliance purposes
+- **Streamline security workflows** by reducing noise from non-critical findings
+
+## Prerequisites
+
+Before muting findings, ensure:
+
+- Valid access to Prowler App with appropriate permissions
+- A provider added to the Prowler App
+- Understanding of the security implications of muting specific findings
+
+???+ warning
+ Muting findings does not resolve underlying security issues. Review each finding carefully before muting to ensure it represents an acceptable risk or has been properly addressed.
+
+## Step 1: Add a provider
+
+To configure Mutelist:
+
+1. Log into Prowler App
+2. Navigate to the providers page
+
+3. Add a provider, then "Configure Muted Findings" button will be enabled in providers page and scans page
+
+
+
+
+## Step 2: Configure Mutelist
+
+1. Open the modal by clicking "Configure Muted Findings" button
+
+1. Provide a valid Mutelist in `YAML` format. More details about Mutelist [here](../tutorials/mutelist.md)
+
+If the YAML configuration is invalid, an error message will be displayed
+
+
+
+## Step 3: Review the Mutelist
+
+1. Once added, the configuration can be removed or updated
+
+
+## Step 4: Check muted findings in the scan results
+
+1. Run a new scan
+2. Check the muted findings in the scan results
+
+
+???+ note
+ The Mutelist configuration takes effect on the next scans.
\ No newline at end of file
diff --git a/docs/tutorials/prowler-app-sso-entra.md b/docs/tutorials/prowler-app-sso-entra.md
new file mode 100644
index 0000000000..a5be365846
--- /dev/null
+++ b/docs/tutorials/prowler-app-sso-entra.md
@@ -0,0 +1,43 @@
+# Entra ID Configuration
+
+This page provides instructions for creating and configuring a Microsoft Entra ID (formerly Azure AD) application to use SAML SSO with Prowler App.
+
+## Creating and Configuring the Enterprise Application
+
+1. From the "Enterprise Applications" page in the Azure Portal, click "+ New application".
+
+ 
+
+2. At the top of the page, click "+ Create your own application".
+
+ 
+
+3. Enter a name for the application and select the "Integrate any other application you don't find in the gallery (Non-gallery)" option.
+
+ 
+
+4. Assign users and groups to the application, then proceed to "Set up single sign on" and select "SAML" as the method.
+
+ 
+
+5. In the "Basic SAML Configuration" section, click "Edit".
+
+ 
+
+6. Enter the "Identifier (Entity ID)" and "Reply URL (Assertion Consumer Service URL)". These values can be obtained from the SAML SSO integration setup in Prowler App. For detailed instructions, refer to the [SAML SSO Configuration](./prowler-app-sso.md) page.
+
+ 
+
+7. In the "SAML Certificates" section, click "Edit".
+
+ 
+
+8. For the "Signing Option," select "Sign SAML response and assertion", and then click "Save".
+
+ 
+
+9. Once the changes are saved, the metadata XML can be downloaded from the "App Federation Metadata Url".
+
+ 
+
+10. Save the downloaded Metadata XML to a file. To complete the setup, upload this file during the Prowler App integration. (See the [SAML SSO Configuration](./prowler-app-sso.md) page for details).
diff --git a/docs/tutorials/prowler-app-sso.md b/docs/tutorials/prowler-app-sso.md
index 2ca898beb4..61d913b2fd 100644
--- a/docs/tutorials/prowler-app-sso.md
+++ b/docs/tutorials/prowler-app-sso.md
@@ -1,175 +1,203 @@
-# Configuring SAML Single Sign-On (SSO) in Prowler
+# SAML Single Sign-On (SSO) Configuration
-This guide explains how to enable and test SAML SSO integration in Prowler. It includes environment setup, API endpoints, and how to configure Okta as your Identity Provider (IdP).
+This guide provides comprehensive instructions to configure SAML-based Single Sign-On (SSO) in Prowler App. This configuration allows users to authenticate using the organization's Identity Provider (IdP).
+
+This document is divided into two main sections:
+
+- **User Guide**: For organization administrators to configure SAML SSO through Prowler App.
+
+- **Developer and Administrator Guide**: For developers and system administrators running self-hosted Prowler App instances, providing technical details on environment configuration, API usage, and testing.
---
-## Environment Configuration
+## User Guide: Configuring SAML SSO in Prowler App
-### `DJANGO_ALLOWED_HOSTS`
+Follow these steps to enable and configure SAML SSO for an organization.
-Update this variable to specify which domains Django should accept incoming requests from. This typically includes:
+### Key Features
-- `localhost` for local development
-- container hostnames (e.g. `prowler-api`)
-- public-facing domains or tunnels (e.g. ngrok)
+Prowler can be integrated with SAML SSO identity providers such as Okta to enable single sign-on for the organization's users. The Prowler SAML integration currently supports the following features:
-**Example**:
+- **IdP-Initiated SSO**: Users can initiate login from their Identity Provider's dashboard.
+- **SP-Initiated SSO**: Users can initiate login directly from the Prowler login page.
+- **Just-in-Time Provisioning**: Users from the organization signing into Prowler for the first time will be automatically created.
-```env
-DJANGO_ALLOWED_HOSTS=localhost,127.0.0.1,prowler-api,mycompany.prowler
-```
+???+ warning "Deactivate SAML"
+ If the SAML configuration is removed, users who previously authenticated via SAML will need to reset their password to regain access using standard login. This is because their accounts no longer have valid authentication credentials without the SAML integration.
-# SAML Configuration API
+### Prerequisites
-You can manage SAML settings via the API. Prowler provides full CRUD support for tenant-specific SAML configuration.
+- Administrator access to the Prowler organization is required.
+- Administrative access to the SAML 2.0 compliant Identity Provider (e.g., Okta, Azure AD, Google Workspace) is necessary.
-- GET /api/v1/saml-config: Retrieve the current configuration
+### Configuration Steps
-- POST /api/v1/saml-config: Create a new configuration
+#### Step 1: Access Profile Settings
-- PATCH /api/v1/saml-config: Update the existing configuration
+To access the account settings, click the "Account" button in the top-right corner of Prowler App, or navigate directly to `https://cloud.prowler.com/profile` (or `http://localhost:3000/profile` for local setups).
-- DELETE /api/v1/saml-config: Remove the current configuration
+
+#### Step 2: Enable SAML Integration
-???+ note "API Note"
- SSO with SAML API documentation.[Prowler API Reference - Upload SAML configuration](https://api.prowler.com/api/v1/docs#tag/SAML/operation/saml_config_create)
+On the profile page, find the "SAML SSO Integration" card and click "Enable" to begin the configuration process.
-# SAML Initiate
+
-### Description
+#### Step 3: Configure the Identity Provider (IdP)
-This endpoint receives an email and checks if there is an active SAML configuration for the associated domain (i.e., the part after the @). If a configuration exists it responds with an HTTP 302 redirect to the appropriate saml_login endpoint for the organization.
+The Prowler SAML configuration panel displays the information needed to configure the IdP. This information must be used to create a new SAML application in the IdP.
-- POST /api/v1/accounts/saml/initiate/
+1. **Assertion Consumer Service (ACS) URL**: The endpoint in Prowler that will receive the SAML assertion from the IdP.
+2. **Audience URI (Entity ID)**: A unique identifier for the Prowler application (Service Provider).
-???+ note
- Important: This endpoint is intended to be used from a browser, as it returns a 302 redirect that needs to be followed to continue the SAML authentication flow. For testing purposes, it is better to use a browser or a tool that follows redirects (such as Postman) rather than relying on unit tests that cannot capture the redirect behavior.
+To configure the IdP, copy the **ACS URL** and **Audience URI** from Prowler and use them to set up a new SAML application.
-### Expected payload
-```
-{
- "email_domain": "user@domain.com"
-}
-```
+
-### Possible responses
+???+ info "IdP Configuration"
+ The exact steps for configuring an IdP vary depending on the provider (Okta, Azure AD, etc.). Please refer to the IdP's documentation for instructions on creating a SAML application. For SSO integration with Azure AD / Entra ID, see our [Entra ID configuration instructions](./prowler-app-sso-entra.md).
- • 302 FOUND: Redirects to the SAML login URL associated with the organization.
+#### Step 4: Configure Attribute Mapping in the IdP
- • 403 FORBIDDEN: The domain is not authorized.
+For Prowler to correctly identify and provision users, the IdP must be configured to send the following attributes in the SAML assertion:
-### Validation logic
+| Attribute Name | Description | Required |
+|----------------|---------------------------------------------------------------------------------------------------------|----------|
+| `firstName` | The user's first name. | Yes |
+| `lastName` | The user's last name. | Yes |
+| `userType` | The Prowler role to be assigned to the user (e.g., `admin`, `auditor`). If a role with that name already exists, it will be used; otherwise, a new role called `no_permissions` will be created with minimal permissions. You can then edit the permissions for that role in the [RBAC Management tab](./prowler-app-rbac.md). | No |
+| `companyName` | The user's company name. This is automatically populated if the IdP sends an `organization` attribute. | No |
- • Looks up the domain in SAMLDomainIndex.
+???+ info "IdP Attribute Mapping"
+ Note that the attribute name is just an example and may be different in your IdP. For instance, if your IdP provides a 'division' attribute, you can map it to 'userType'.
+ 
- • Retrieves the related SAMLConfiguration object via tenant_id.
+???+ warning "Dynamic Updates"
+ These attributes are updated in Prowler each time a user logs in. Any changes made in the identity provider (IdP) will be reflected the next time the user logs in again.
+#### Step 5: Upload IdP Metadata to Prowler
-# SAML Integration: Testing Guide
+Once the IdP is configured, it provides a **metadata XML file**. This file contains the IdP's configuration information, such as its public key and login URL.
-This document outlines the process for testing the SAML integration functionality.
+To complete the Prowler-side configuration:
+
+1. Return to the Prowler SAML configuration page.
+
+2. Enter the **email domain** for the organization (e.g., `mycompany.com`). Prowler uses this to identify users who should authenticate via SAML.
+
+3. Upload the **metadata XML file** downloaded from the IdP.
+
+
+
+#### Step 6: Save and Verify Configuration
+
+Click the "Save" button to complete the setup. The "SAML Integration" card will now show an "Active" status, indicating that the configuration is complete and enabled.
+
+
+
+???+ info "IdP Configuration"
+ The exact steps for configuring an IdP vary depending on the provider (Okta, Azure AD, etc.). Please refer to the IdP's documentation for instructions on creating a SAML application.
+
+##### Remove SAML Configuration
+You can disable SAML SSO by removing the existing configuration from the integration panel.
+
+
+### Signing in with SAML SSO
+
+Once SAML SSO is enabled, users from the configured domain can sign in by entering their email address on the login page and clicking "Continue with SAML SSO". They will be redirected to the IdP to authenticate and then returned to Prowler.
+
+
---
-## 1. Start Ngrok and Update ALLOWED_HOSTS
+## Developer and Administrator Guide
-Start ngrok on port 8080:
-```
+This section provides technical details for developers and administrators of self-hosted Prowler instances.
+
+### Environment Configuration
+
+For self-hosted deployments, several environment variables must be configured to ensure SAML SSO functions correctly. These variables are typically set in an `.env` file.
+
+| Variable | Description | Example |
+|---------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------|
+| `API_BASE_URL` | The base URL of the Prowler API instance. | `http://mycompany.prowler/api/v1` |
+| `DJANGO_ALLOWED_HOSTS` | A comma-separated list of hostnames that the Django backend will accept requests from. Include any domains used to access the Prowler API. | `localhost,127.0.0.1,prowler-api,mycompany.prowler` |
+| `AUTH_URL` | The base URL of the Prowler web UI. This is used to construct the callback URL after authentication. | `http://mycompany.prowler` |
+| `SAML_SSO_CALLBACK_URL` | The full callback URL where users are redirected after authenticating with the IdP. It is typically constructed using the `AUTH_URL`. | `${AUTH_URL}/api/auth/callback/saml` |
+
+After modifying these variables, the Prowler API must be restarted for the changes to take effect.
+
+### SAML API Reference
+
+Prowler provides a REST API to manage SAML configurations programmatically.
+
+- **Endpoint**: `/api/v1/saml-config`
+- **Methods**:
+ - `GET`: Retrieve the current SAML configuration for the tenant.
+ - `POST`: Create a new SAML configuration.
+ - `PATCH`: Update an existing SAML configuration.
+ - `DELETE`: Remove the SAML configuration.
+
+???+ note "API Documentation"
+ For detailed information on using the API, refer to the [Prowler API Reference](https://api.prowler.com/api/v1/docs#tag/SAML/operation/saml_config_create).
+
+#### SAML Initiate Endpoint
+
+- **Endpoint**: `POST /api/v1/accounts/saml/initiate/`
+- **Description**: This endpoint initiates the SAML login flow. It takes an email address, determines if the domain has a SAML configuration, and redirects the user to the appropriate IdP login page. It is primarily designed for browser-based flows.
+
+### Testing SAML Integration
+
+Follow these steps to test a SAML integration in a development environment.
+
+#### 1. Expose the Local Environment
+
+Since the IdP needs to send requests to the local Prowler instance, it must be exposed to the internet. A tool like `ngrok` can be used for this purpose.
+
+To start ngrok, run the following command:
+```bash
ngrok http 8080
```
+This command provides a public URL (e.g., `https://Error:
+{resourcesData.errors[0].detail}
+{!hasConfig - ? "Please configure your OpenAI API key to use Lighthouse." - : "OpenAI API key is invalid. Please update your key to use Lighthouse."} + ? "Please configure your OpenAI API key to use Lighthouse AI." + : "OpenAI API key is invalid. Please update your key to use Lighthouse AI."}
= ({ return (+ + {failedFindingsCount} + +
+ > + ); + }, + }, + { + accessorKey: "region", + header: ({ column }) => ( ++ Loading resource details... +
++ Loading findings... +
++ Total findings: {allFindings.length} +
+ {allFindings.map((finding: any, index: number) => { + const { attributes: findingAttrs, id } = finding; + + // Handle cases where finding might not have all attributes + if (!findingAttrs) { + return ( ++ Finding {id} - No attributes available +
++ No findings found for this resource. +
+ )} +Download
+ {title} {message} +
+