关于 prowler-provider
prowler-provider 是面向 Prowler 开发者的技能,指导为现有云提供商新增服务或接入提供商,并说明架构模板与敏感凭据参数规范。
主要功能
- 01提供商与服务架构模板
- 02敏感 CLI 参数处理规范
- 03列出现有提供商
- 04提供运行及检查项命令参考
适用场景
- 01为 Prowler 添加云提供商
- 02为现有提供商新增服务
- 03了解提供商架构及凭据处理方式
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ prowler-cloud/ prowler --skill prowler-provider安装后在 Claude Code 中输入/prowler-provider确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
assets/client.pyprovider.pyservice.pyreferences/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 密钥)的标志必须遵循以下规则:
- 使用
nargs="?"和default=None— 标志接受可选值,以保持向后兼容;推荐通过环境变量提供值。 - 将
metavar设为用户应使用的环境变量名称(例如metavar="GITHUB_PERSONAL_ACCESS_TOKEN")。 - 将标志添加到服务提供商的
arguments.py顶部的SENSITIVE_ARGUMENTSfrozenset 中。此集合用于在 HTML 输出中隐藏值,并向直接传递机密信息的用户发出警告。 - 不要添加需要通过命令行参数传递机密信息的新参数 — 机密信息应通过环境变量提供。为保持向后兼容,标志仍接受传入值,但命令行会警告用户优先使用环境变量。
模式
# 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