prowler-provider について
prowler-providerは、Prowlerの開発者向けスキルです。クラウドプロバイダーやサービスの追加に使う構成テンプレートと、機密性の高いCLI引数の扱い方を示します。
主な機能
- 01プロバイダーとサービスのテンプレート
- 02機密性の高いCLI引数の規約
- 03対応プロバイダーの一覧
- 04実行・チェック用コマンド例
活用シーン
- 01Prowlerにクラウドプロバイダーを追加
- 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
機密性の高い CLI 引数
シークレット(トークン、パスワード、API キー)を受け取るフラグは、必ず次のルールに従う必要があります:
nargs="?"とdefault=Noneを使用します — 下位互換性のためにフラグは値を省略可能にします。推奨される方法は環境変数です。metavarに、ユーザーが使用する環境変数名を設定します(例:metavar="GITHUB_PERSONAL_ACCESS_TOKEN")。- プロバイダーの
arguments.pyの先頭にあるSENSITIVE_ARGUMENTSfrozenset にフラグを追加します。このセットは、HTML 出力内の値のマスキングと、シークレットを直接渡すユーザーへの警告に使用されます。 - シークレットを CLI の値として渡す必要がある新しい引数は追加しないでください — シークレットは環境変数から渡してください。下位互換性のためにフラグは値を受け取りますが、CLI は環境変数の使用を推奨する警告を表示します。
パターン
# 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(Infrastructure as Code)
コマンド
# 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
リソース
- テンプレート:Provider、Service、Client のシングルトンテンプレートについては、assets/ を参照してください。
- ドキュメント:Prowler Developer Guide の公式リンクについては、references/provider-docs.md を参照してください。
コメント
Markdown 対応