mcpField
P
prowler-provider

prowler-provider

github.com/prowler-cloud开发15.1k64 次安装今天更新
代码仓库

关于 prowler-provider

prowler-provider 是面向 Prowler 开发者的技能,指导为现有云提供商新增服务或接入提供商,并说明架构模板与敏感凭据参数规范。

主要功能

  1. 01提供商与服务架构模板
  2. 02敏感 CLI 参数处理规范
  3. 03列出现有提供商
  4. 04提供运行及检查项命令参考

适用场景

  1. 01为 Prowler 添加云提供商
  2. 02为现有提供商新增服务
  3. 03了解提供商架构及凭据处理方式

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/prowler-cloud/prowler --skill prowler-provider

安装后在 Claude Code 中输入/prowler-provider确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

assets/
client.py
provider.py
service.py
references/
provider-docs.md

详细介绍

适用场景

在以下情况下使用此技能:

  • 向 Prowler 添加新的云服务提供商
  • 向现有服务提供商添加新服务
  • 了解服务提供商的架构模式

服务提供商架构模式

每个服务提供商都必须遵循以下结构:

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

敏感命令行参数

接受机密信息(令牌、密码、API 密钥)的标志必须遵循以下规则:

  1. 使用 nargs="?" 和 default=None — 标志接受可选值,以保持向后兼容;推荐通过环境变量提供值。
  2. 将 metavar 设为用户应使用的环境变量名称(例如 metavar="GITHUB_PERSONAL_ACCESS_TOKEN")。
  3. 将标志添加到服务提供商的 arguments.py 顶部的 SENSITIVE_ARGUMENTS frozenset 中。此集合用于在 HTML 输出中隐藏值,并向直接传递机密信息的用户发出警告。
  4. 不要添加需要通过命令行参数传递机密信息的新参数 — 机密信息应通过环境变量提供。为保持向后兼容,标志仍接受传入值,但命令行会警告用户优先使用环境变量。
模式
# 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.",
    )

服务提供商类模板

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

服务类模板

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

服务客户端模板

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

{service}_client = {Service}

支持的服务提供商

当前支持的服务提供商:

  • 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(基础设施即代码)

命令

# 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

资源

  • 模板:查看 assets/,获取服务提供商、服务和客户端单例模板
  • 文档:查看 references/provider-docs.md,获取 Prowler 官方开发者指南链接

评论

支持 Markdown