mcpField
P
prowler-provider

prowler-provider

github.com/prowler-cloud開発15.1k64 回インストール今日更新
リポジトリ

prowler-provider について

prowler-providerは、Prowlerの開発者向けスキルです。クラウドプロバイダーやサービスの追加に使う構成テンプレートと、機密性の高いCLI引数の扱い方を示します。

主な機能

  1. 01プロバイダーとサービスのテンプレート
  2. 02機密性の高いCLI引数の規約
  3. 03対応プロバイダーの一覧
  4. 04実行・チェック用コマンド例

活用シーン

  1. 01Prowlerにクラウドプロバイダーを追加
  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

機密性の高い CLI 引数

シークレット(トークン、パスワード、API キー)を受け取るフラグは、必ず次のルールに従う必要があります:

  1. nargs="?" と default=None を使用します — 下位互換性のためにフラグは値を省略可能にします。推奨される方法は環境変数です。
  2. metavar に、ユーザーが使用する環境変数名を設定します(例:metavar="GITHUB_PERSONAL_ACCESS_TOKEN")。
  3. プロバイダーの arguments.py の先頭にある SENSITIVE_ARGUMENTS frozenset にフラグを追加します。このセットは、HTML 出力内の値のマスキングと、シークレットを直接渡すユーザーへの警告に使用されます。
  4. シークレットを 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 を参照してください。

コメント