prowler-provider
Provides architectural patterns and structure for adding new providers or services to Prowler.
Install
mkdir -p .claude/skills/prowler-provider && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/6822" && unzip -o skill.zip -d .claude/skills/prowler-provider && rm skill.zipInstalls to .claude/skills/prowler-provider
Activation
This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.
Creates new Prowler cloud providers or adds services to existing providers. Trigger: When extending Prowler SDK provider architecture (adding a new provider or a new service to an existing provider).Key capabilities
- →Scaffold file structures for new cloud service integrations
- →Enforce standardized service fetcher and client patterns
- →Validate sensitive CLI argument flags for secret redaction
- →Register new resource models and exception handling classes
How it works
It injects standard boilerplate code and file structures into the prowler/providers directory according to established internal patterns.
Inputs & outputs
When to use prowler-provider
- →Adding a new cloud provider
- →Integrating a new service into an existing provider
- →Configuring provider-specific models and exceptions
About this skill
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:
- 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
When not to use it
- →Simple bug fixes within existing checks
- →Non-Prowler related cloud provider script creation
Limitations
- →Does not automate the actual resource fetching logic
- →Manual updates required for specific service API client implementations
How it compares
It standardizes provider integration rather than just writing raw logic, ensuring compatibility with the Prowler core.
Compared to similar skills
prowler-provider side by side with the closest alternatives in the catalog.
| Skill | Installs | Updated | Safety | Difficulty |
|---|---|---|---|---|
| prowler-provider (this skill) | 1 | 2mo | Review | Intermediate |
| cursor-prod-checklist | 4 | 27d | Review | Intermediate |
| senior-security | 31 | 7mo | Review | Advanced |
| telnetshell | 1 | 2mo | Caution | Advanced |
Try saying
Example prompts that trigger this skill in your AI assistant.
More by prowler-cloud
View all by prowler-cloud →You might also like
cursor-prod-checklist
jeremylongshore
Execute production readiness checklist for Cursor IDE setup. Triggers on "cursor production", "cursor ready", "cursor checklist", "optimize cursor setup". Use when working with cursor prod checklist functionality. Trigger with phrases like "cursor prod checklist", "cursor checklist", "cursor".
senior-security
davila7
Comprehensive security engineering skill for application security, penetration testing, security architecture, and compliance auditing. Includes security assessment tools, threat modeling, crypto implementation, and security automation. Use when designing security architecture, conducting penetration tests, implementing cryptography, or performing security audits.
telnetshell
BrownFineSecurity
Use telnet to interact with IoT device shells for pentesting operations including device enumeration, vulnerability discovery, credential testing, and post-exploitation. Use when the user needs to interact with network-accessible shells, IoT devices, or telnet services.
prowler-sdk-check
prowler-cloud
Creates Prowler security checks following SDK architecture patterns. Trigger: When creating or updating a Prowler SDK security check (implementation + metadata) for any provider (AWS, Azure, GCP, K8s, GitHub, etc.).
building-automated-malware-submission-pipeline
26zl
Builds an automated malware submission and analysis pipeline that collects
telegram-bot-builder
davila7
Expert in building Telegram bots that solve real problems - from simple automation to complex AI-powered bots. Covers bot architecture, the Telegram Bot API, user experience, monetization strategies, and scaling bots to thousands of users. Use when: telegram bot, bot api, telegram automation, chat bot telegram, tg bot.