prowler-provider

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

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
在以下场景使用本技能:
  • 向Prowler添加新的云提供商
  • 向现有提供商添加新服务
  • 理解提供商架构模式

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
每个提供商必须遵循以下结构:
prowler/providers/{provider}/
├── __init__.py
├── {provider}_provider.py      # 主提供商类
├── models.py                   # 提供商专属模型
├── config.py                   # 提供商配置
├── exceptions/                 # 提供商专属异常
├── lib/
│   ├── service/               # 基础服务类
│   ├── arguments/             # CLI参数解析器
│   └── mutelist/              # 豁免列表功能
└── services/
    └── {service}/
        ├── {service}_service.py   # 资源获取器
        ├── {service}_client.py    # Python单例实例
        └── {check_name}/          # 独立检查项
            ├── {check_name}.py
            └── {check_name}.metadata.json

Provider Class Template

提供商类模板

python
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
python
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

服务类模板

python
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}")
python
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

服务客户端模板

python
from prowler.providers.{provider}.services.{service}.{service}_service import {Service}

{service}_client = {Service}
python
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)
当前支持的提供商:
  • 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 (语言模型提供商)
  • IaC (基础设施即代码)

Commands

命令

bash
undefined
bash
undefined

Run provider

运行提供商

poetry run python prowler-cli.py {provider}
poetry run python prowler-cli.py {provider}

List services for provider

列出提供商的服务

poetry run python prowler-cli.py {provider} --list-services
poetry run python prowler-cli.py {provider} --list-services

List checks for provider

列出提供商的检查项

poetry run python prowler-cli.py {provider} --list-checks
poetry run python prowler-cli.py {provider} --list-checks

Run specific service

运行特定服务

poetry run python prowler-cli.py {provider} --services {service}
poetry run python prowler-cli.py {provider} --services {service}

Debug mode

调试模式

poetry run python prowler-cli.py {provider} --log-level DEBUG
undefined
poetry run python prowler-cli.py {provider} --log-level DEBUG
undefined

Resources

资源

  • Templates: See assets/ for Provider, Service, and Client singleton templates
  • Documentation: See references/provider-docs.md for official Prowler Developer Guide links
  • 模板:查看assets/获取提供商、服务和客户端单例模板
  • 文档:查看references/provider-docs.md获取官方Prowler开发者指南链接