
Prowler Provider
FreeExtend Prowler with new cloud providers and services.
Free · Opens the source repo
What Prowler Provider does
The Prowler Provider skill allows developers to create new cloud providers or add services to existing ones within the Prowler framework. This skill is particularly useful for those who are looking to extend the capabilities of Prowler by integrating additional cloud platforms or enhancing the functionality of current providers. By following the established provider architecture pattern, users can ensure that their implementations are consistent and maintainable.
To get started, users will need to adhere to the specific directory structure outlined in the skill documentation. Each provider must include essential files such as the main provider class, configuration settings, and service definitions. The skill also emphasizes the importance of handling sensitive information securely, recommending the use of environment variables over direct CLI arguments for sensitive data like API keys and passwords.
For developers familiar with Python, the provided templates for provider and service classes streamline the process of integration. These templates include methods for session management, region retrieval, and resource fetching, allowing for a quick setup while ensuring best practices are followed. Additionally, the skill supports a variety of cloud providers, including AWS, Azure, GCP, and more, making it a versatile tool for cloud integration tasks.
In summary, the Prowler Provider skill is designed for developers who need to enhance Prowler's functionality by adding new cloud providers or services. Its structured approach and focus on security make it a valuable addition for those working in cloud environments.
When to use it
Use this skill when you need to extend Prowler by integrating new cloud providers or enhancing existing ones.
When not to use it
This skill is not suitable for users who do not require custom cloud provider integration or those unfamiliar with Python programming.
What you can build with it
Integrating AWS as a New Provider
Use the Prowler Provider skill to add AWS as a new cloud provider, allowing your Prowler setup to utilize AWS resources.
Enhancing Existing Azure Services
Extend the functionality of Azure within Prowler by adding new services tailored to your cloud security needs.
Creating a Custom Provider for MongoDB Atlas
Develop a custom provider for MongoDB Atlas, integrating it into Prowler to manage database security checks.
How to install Prowler Provider
View source1. Install with the skills CLI
npx skills add prowler-cloud/prowler/prowler-provider --agent claude-code2. Or install it manually
Download the skill folder and drop it into ~/.claude/skills/ for all projects, or .claude/skills/ to scope it to one repo. Restart Claude Code so it picks up the new skill.
Anthropic's agentic coding CLI, and the reference implementation of Agent Skills. Drop a skill folder into ~/.claude/skills and Claude Code loads it automatically whenever a task matches the skill's description. Claude Code docs
Inside SKILL.md
Written by prowler-cloudWhen to Use
Use this skill when:
- Adding a new cloud provider to Prowler
- Adding a new service to an existing provider
- Understanding the provider architecture pattern
Provider Architecture Pattern
Every provider MUST follow this structure:
prowler/providers/{provider}/
├── __init__.py
├── {provider}_provider.py # Main provider class
├── models.py # Provider-specific models
├── config.py # Provider configuration
├── exceptions/ # Provider-specific exceptions
├── lib/
│ ├── service/ # Base service class
│ ├── arguments/ # CLI arguments parser
│ └── mutelist/ # Mutelist functionality
└── services/
└── {service}/
├── {service}_service.py # Resource fetcher
├── {service}_client.py # Python singleton instance
└── {check_name}/ # Individual checks
├── {check_name}.py
└── {check_name}.metadata.json
Sensitive CLI Arguments
Flags that accept secrets (tokens, passwords, API keys) MUST follow these rules:
- Use
nargs="?"withdefault=None— the flag accepts an optional value for backward compatibility; the recommended path is environment variables. - Set
metavarto the environment variable name users should use (e.g.,metavar="GITHUB_PERSONAL_ACCESS_TOKEN"). - Add the flag to the
SENSITIVE_ARGUMENTSfrozenset at the top of the provider'sarguments.py. This set is used to redact values in HTML output and warn users who pass secrets directly. - Do not add new arguments that require passing secrets as CLI values — secrets should come from environment variables. The flag accepts a value for backward compatibility, but CLI warns users to prefer env vars.
Pattern
# prowler/providers/{provider}/lib/arguments/arguments.py
SENSITIVE_ARGUMENTS = frozenset({"--my-api-key", "--my-password"})
def init_parser(self):
auth_subparser = parser.add_argument_group("Authentication Modes")
auth_subparser.add_argument(
"--my-api-key",
nargs="?",
default=None,
metavar="MY_API_KEY",
help="API key for authentication. Use MY_API_KEY env var instead of passing directly.",
)
Provider Class Template
from prowler.providers.common.provider import Provider
class {Provider}Provider(Provider):
"""Provider class for {Provider} cloud platform."""
def __init__(self, arguments):
super().__init__(arguments)
self.session = self._setup_session(arguments)
self.regions = self._get_regions()
def _setup_session(self, arguments):
"""Provider-specific authentication."""
# Implement credential handling
pass
def _get_regions(self):
"""Get available regions for provider."""
# Return list of regions
pass
Service Class Template
from prowler.providers.{provider}.lib.service.service import {Provider}Service
class {Service}({Provider}Service):
"""Service class for {service} resources."""
def __init__(self, provider):
super().__init__(provider)
self.{resources} = []
self._fetch_{resources}()
def _fetch_{resources}(self):
"""Fetch {resource} data from API."""
try:
response = self.client.list_{resources}()
for item in response:
self.{resources}.append(
{Resource}(
id=item["id"],
name=item["name"],
region=item.get("region"),
)
)
except Exception as e:
logger.error(f"Error fetching {resources}: {e}")
Service Client Template
from prowler.providers.{provider}.services.{service}.{service}_service import {Service}
{service}_client = {Service}
Supported Providers
Current providers:
- AWS (Amazon Web Services)
- Azure (Microsoft Azure)
- GCP (Google Cloud Platform)
- Kubernetes
- GitHub
- M365 (Microsoft 365)
- OracleCloud (Oracle Cloud Infrastructure)
- AlibabaCloud
- Cloudflare
- MongoDB Atlas
- NHN (NHN Cloud)
- LLM (Language Model providers)
- IaC (Infrastructure as Code)
Commands
# Run provider
uv run python prowler-cli.py {provider}
# List services for provider
uv run python prowler-cli.py {provider} --list-services
# List checks for provider
uv run python prowler-cli.py {provider} --list-checks
# Run specific service
uv run python prowler-cli.py {provider} --services {service}
# Debug mode
uv run python prowler-cli.py {provider} --log-level DEBUG
Resources
- Templates: See assets/ for Provider, Service, and Client singleton templates
- Documentation: See references/provider-docs.md for official Prowler Developer Guide links
Frequently asked questions about Prowler Provider
Similar skills
WinMD API Search
Easily find and explore Windows desktop APIs.
WebMCPify
Transform any web app into an agent-ready platform.
Phoenix Tracing
Instrument LLM applications with OpenInference tracing.
Foundry Hosted Agent CopilotKit
Guidance for developing agentic web apps on Azure.
Power Automate Foundation
Connect AI agents to Power Automate seamlessly.
Power Automate Flow Builder
Efficiently build and deploy Power Automate flows programmatically.
