New to Claude Skills? Learn how to install them →

prowler-cloud on GitHub

Prowler Provider

Free

Extend Prowler with new cloud providers and services.

Get this skill

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 source

1. Install with the skills CLI

npx skills add prowler-cloud/prowler/prowler-provider --agent claude-code

2. 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-cloud

When 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:

  1. Use nargs="?" with default=None — the flag accepts an optional value for backward compatibility; the recommended path is environment variables.
  2. Set metavar to the environment variable name users should use (e.g., metavar="GITHUB_PERSONAL_ACCESS_TOKEN").
  3. Add the flag to the SENSITIVE_ARGUMENTS frozenset at the top of the provider's arguments.py. This set is used to redact values in HTML output and warn users who pass secrets directly.
  4. 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

Frequently asked questions about Prowler Provider

Similar skills