HN 日本語サマリー

← 一覧へ戻る
セキュリティ

Show HN: Argus - エージェント型攻撃から保護するオープンソースセキュリティプラットフォーム

Show HN: Argus- open source security platform to protect against agentic attacks (github.com)

16 pointsby thomasunise4 コメント

要約

Argusは、AIエージェントが証拠を分析するものの、実際のシステムには一切変更を加えないセルフホスト型のマルチテナントセキュリティオペレーションプラットフォームです。クラウド、ID、コード、エンドポイント、ネットワーク、Kubernetesアセットを収集し、検出エンジンがイベントを評価、テストハーネスがセキュリティツールを実行、そしてガバナンスされたエージェントが読み取り専用ツールで調査・分析を行います。変更は、承認プロセスを経るアクションブローカーのみが許可されます。

全文翻訳

[画像: Test](https://github.com/thomasunise/argus/actions/workflows/test.yml) [画像: License: MIT](https://github.com/thomasunise/argus/blob/main/LICENSE)

Argusは、AIエージェントが証拠を分析するものの、実際のシステムには一切変更を加えないセルフホスト型のマルチテナントセキュリティオペレーションプラットフォームです。コレクターはクラウド、ID、コード、エンドポイント、ネットワーク、Kubernetesアセットを証拠グラフに収集します。検出エンジンはイベントをスウォーム、ID、クラウド、コード、カナリアシグナルについて評価します。スコープが制限されたテストハーネスは、承認されたセキュリティツールを実行します。ガバナンスされたエージェントは、読み取り専用ツールでトリアージ、調査、ハンティングを行います。そして、独立したアクションブローカー(型指定されたアクション、ポリシー、承認、ドライラン、ロールバック、キルスイッチ)のみが、あらゆる変更を許可される唯一のコンポーネントです。

[画像: Argus overview](https://github.com/thomasunise/argus/blob/main/docs/screenshots/overview-light.png)

このREADMEは、リポジトリに現在含まれているものについて説明します。docs/ARCHITECTURE.mdは設計について、docs/ROADMAP.mdは実装済みと計画中の項目について説明しています。

プロジェクトステータス

Argusはオープンソースの基盤であり、フォークして拡張されることを意図しています。プラットフォームコア(テナンシー、認証、RBAC、監査チェーン、キュー、ポリシー、承認)は、CIでSQLiteおよびPostgreSQL上でエンドツーエンドでテストされています。コレクターと検出ルールをあなたの環境に合わせて調整し、アクションを有効にする前に、監視専用モード(docs/GO-LIVE.md)で開始してください。これは認定製品ではありません。Argusが証拠として何を提供できるか、またはできないかについては、docs/COMPLIANCE.mdを参照してください。

アーキテクチャ

  ブラウザ / SDK / センサー
          |
          v  HTTPS (Caddy, ALB, Front Door またはあなたのインフラ)
  +-------------------------------------------------------------+
  |  API  (FastAPI)  認証: セッション / OIDC+PKCE / TOTP / APIキー |
  |  RBAC (viewer < analyst < operator < admin < owner), CSRF,   |
  |  プリンシパルごとのレート制限、リクエストID、セキュリティヘッダー    |
  +------+------------------+------------------+----------------+
         |
   PostgreSQL           Redisキュー        監査チェーン
   (全テーブルに        (リース、リトライ、   (テナントごとにハッシュリンク、
    tenant_id)          python -m          HMAC、JSONL / S3オブジェクト
                        app.worker)        ロック / Azure不変)
         |
  +------+------------------+------------------+------------------+----------------------------------+
  |  WorkerプロセスはAPIと同じハンドラーを実行します:
  |   collectors.run   detections.run / baselines
  |   graph.recompute  testing.run   agents.run
  +------------------------------------------------------------+
         |
         v  エージェントは propose_action のみを呼び出す -> ActionRequest(pending)
  アクションブローカー (独立したポリシー、承認、ドライラン、ロールバック、キルスイッチ)

信頼境界(各1文で、詳細はdocs/THREAT-MODEL.mdに記載):

  1. エージェントは何も実行できません。唯一の書き込み可能なツールは、保留中のリクエストを作成します。
  2. エージェントが読み取るすべてのものは、信頼されていないデータとしてラップされ、プロンプトにその旨が記載されます。
  3. アクティブなテストは、記録された承認とスコープ内でのみ実行され、実行時に再確認されます。
  4. すべてのドメインテーブルにはtenant_idが含まれており、クエリはスコープ付きヘルパーを経由し、テストでアサートされます。
  5. 監査チェーンはハッシュリンクされ、HMAC署名(本番環境では必須)され、オプションでWORM(Write Once, Read Many)シンクにミラーリングされます。

このチェックアウトに含まれるもの

エリアステータス場所
アプリケーションファクトリ、設定、DB、RBAC、認証(ローカル、OIDC、TOTP、APIキー)、CSRF、レート制限実装済み、テスト済みapp/core/, app/api/auth.py, app/api/deps.py
監査チェーン(JSONL / S3オブジェクトロック / Azure不変ブロブシンク付き)実装済みapp/core/audit.py
ジョブキュー(インメモリおよびRedis、リース、リトライ、キャンセル、リパー)とスタンドアロンワーカー実装済みapp/core/queue.py, app/worker.py
Prometheusメトリクス、JSONロギング、オプションのOpenTelemetryトレーシング実装済みapp/core/telemetry.py
証拠グラフ:ノード、エッジ、攻撃パス、露出スコアリング実装済みapp/graph/, app/api/graph.py
検出:12ルール(スウォームx4、IDx2、クラウド、k8s、コード、カナリア、異常、エージェント型)、ベースライン、カナリア実装済みapp/detections/, app/api/detections.py, app/api/canaries.py
コレクター:AWS、Azure、GCP、Kubernetes、GitHub、Okta、Entra、osquery、netflowフィクスチャ付きで実装済み;クラウドSDKはオプションapp/collectors/, app/api/collectors.py
テストハーネス:スコープポリシー、レート制限、Webベースライン、trivy、nuclei、zap、prowler、caldera、semgrep、gitleaks用アダプター実装済み;ツールは別途インストールが必要app/testing/, app/api/tests.py, app/api/scans.py
エージェントランタイム、プロバイダー(Anthropic、OpenAI、Ollama、なし)、読み取り専用ツール、7つのスペシャリスト、評価スイート実装済みapp/agents/, app/api/agents.py, app/api/evals.py
アクションブローカー:25種類のアクション(AWS、Azure、GCP、Kubernetes、GitHub、Okta、Entra、Cloudflare、Argus内部)、ポリシー、承認、ドライラン、実行、ロールバック、キルスイッチ実装済みapp/actions/, app/api/actions.py
インテグレーション:POST /api/v1/ingest/{source}の背後にある13のインバウンドパーサー、6つのアウトバウンドチャネル(Webhook、Slack、Jira、ServiceNow、PagerDuty、メール)と配信・リトライ、Wazuhインデクサープル実装済みapp/integrations/, app/api/ingest.py, app/api/integrations.py
管理、アセット、検出結果、イベント、調査、承認、監査、レポートルーター実装済みapp/api/
Alembicマイグレーション(初期リビジョン)とscripts/migrate.py実装済みalembic/, docs/MIGRATIONS.md
コンテナ、Compose、Helm、Terraform(AWS、Azure)、CI、オブザーバビリティ、ドキュメント実装済みDockerfile, compose*.yaml, infra/, .github/, docs/

ルーターは自動的に検出されます。完全なv1サーフェスはdocs/API.mdにあります。

クイックスタート(開発、SQLite、Dockerなし)

要件:Python 3.11または3.12。

python -m venv .venv && . .venv/bin/activate        # Windows: .venv\Scripts\activate
pip install -r requirements.txt -r requirements-dev.txt
cp .env.example .env
python scripts/generate_secrets.py --write          # REPLACE_ 値3つ、および空の場合はAUDIT_SIGNING_KEYとDATA_ENCRYPTION_KEYを埋めます
uvicorn app.main:app --host 127.0.0.1 --port 8080

http://127.0.0.1:8080を開き、.envからADMIN_EMAIL / ADMIN_PASSWORDでサインインします。REDIS_URLが空の場合、ジョブはAPIプロセス内で実行されます(WORKERS_INPROCESS=true)。DB_AUTO_CREATE=true(デフォルト)の場合、テーブルは起動時に作成されます。Alembic管理スキーマの場合はfalseに設定し、python scripts/migrate.pyを実行します(docs/MIGRATIONS.mdを参照)。

独立したテナント内の合成デモデータ(ネットワークに一切触れません):

python scripts/seed_demo.py

これはdemoテナントのログインを出力し、DEMOラベル付きのアセット、承認、cloud.public_exposure_changeおよびswarm.machine_speed_sequenceをトリガーするイベント、検出結果、カナリア、エージェント実行レコードを作成します。APP_ENV=productionでは実行を拒否します。

テスト:

python -m pytest -q

パイロット(Docker Compose:API、ワーカー、PostgreSQL、Redis)

cp .env.example .env && python scripts/generate_secrets.py --write
docker compose up --build -d
docker compose logs -f api

compose.yamlはAPIを127.0.0.1:8080にのみバインドし、APIとワーカーを1つのイメージから読み取り専用のルートファイルシステム、ケーパビリティなし、Dockerソケットなしで実行し、./targetsを読み取り専用でマウントし、API起動時にスキーマを適用します(RUN_MIGRATIONS=true)。オブザーバビリティ(OpenTelemetryコレクター、Prometheus(/metricsをスクレイピング)、Grafana(infra/grafana/argus.jsonのダッシュボード付き))を追加するには--profile observabilityを使用します。

単一ホストのTLS終端:

# .env: APP_ENV=production COOKIE_SECURE=true BASE_URL=https://host ARGUS_DOMAIN=host ACME_EMAIL=ops@example.com
docker compose -f compose.yaml -f compose.prod.yaml up -d

本番環境

Kubernetes:infra/helm/argus(API + ワーカーデプロイメント、HPA、PDB、デフォルト拒否NetworkPolicy、TLS付きインバウンド、オプションのServiceMonitor)。AWS:infra/terraform(ECS Fargate、RDS、ElastiCache、S3オブジェクトロック監査バケット、Secrets Manager、ALB + WAF)。Azure:infra/terraform-azure(Container Apps、Flexible Postgres、Azure Cache、不変ブロブコンテナ、Key Vault、Front Door + WAF)。

本番環境チェックリストはdocs/DEPLOYMENT.mdにあります。短縮版(起動時のassert_safe_config()によって一部強制されます):

  • APP_ENV=productionは、PostgreSQL、REDIS_URL、COOKIE_SECURE=true、https://のBASE_URL、DATA_ENCRYPTION_KEY(S)、AUDIT_SIGNING_KEY(S)、外部監査シンク、およびOIDCまたはTOTP_REQUIRED=trueなしでは起動を拒否します。
  • 専用ワーカー(WORKERS_INPROCESS=false、python -m app.worker)。
  • オブジェクトロック監査シンク(S3オブジェクトロックまたはAzure不変ブロブ)を使用します(JSONLのみではありません)。
  • /metricsはエッジでブロックされ、ワーカーのEgressフィルタリング、シークレットはシークレットマネージャーに格納されます。
  • イメージはダイジェストでピン留めされ、cosign(.github/workflows/release.yml)で検証されます。

ロール

ロールは累積的です(app/core/rbac.py):

ロール追加される権限
viewerテナント内のすべてを読み取る
analyst検出結果と検出ルールを編集する、エージェントと評価を実行する、カナリアを管理する、承認を記録する
operatorアセットを管理・承認する、テスト、スキャン、コレクターを実行する、アクションをリクエスト、承認、実行、ロールバックする、検出を実行する
adminユーザー、APIキー、設定、コレクターとインテグレーションの設定、アクションキルスイッチ、テストスコープ
ownerテナント設定、重要なアクションの承認

APIキーはロールとオプションのスコープ(例:ingest)を持ち、これによってさらに制限されます。systemプリンシパルはキューハンドラー内でのみ使用されます。

エージェント、テスト、アクションのガバナンス方法

エージェント(app/agents/runtime.py)。スペシャリストは、システムプロンプト、ツール名のリスト、出力スキーマ、および予算(AGENT_MAX_STEPS、AGENT_MAX_TOKENS、AGENT_MAX_SECONDS、AGENT_COST_CEILING_USD、組み込みのClaude価格表外のモデルにはAGENT_MODEL_PRICES)を持つAgentSpecです。ツールはArgusデータへの読み取り専用ビューであり、唯一のproposeツールはブローカーを通じて保留中のActionRequestを作成します。すべてのツール結果は赤字で表示され、切り詰められ、<untrusted_data source=...>としてラップされます。ガードレールプロンプトは、証拠内の指示がインジェクションの兆候であることをモデルに伝えます。各モデルとツールステップは、入力ハッシュ、トークン、レイテンシとともに永続化されます(agent_steps)。AI_PROVIDER=noneの場合、スペシャリストは決定論的なフォールバックを実行します。プロンプトインジェクションと精度評価スイートはapp/agents/evals/suites/にあります。

テスト(app/testing/)。TestScopeは、アセット、許可されるティア(パッシブ、アクティブ、侵入的)、環境、UTCウィンドウ、レート制限、および同時実行制限(max_concurrencyを超えた実行はキューで待機)をリストします。実行は、アセットが現在のAssetAuthorizationを持ち、そのフラグがティアを許可し、スコープがそれを許可し、ウィンドウが開いており、ターゲットがポリシー検証に合格した場合にのみ許可されます。scope.check()はリクエスト時に実行され、ワーカー内で再度実行されます。侵入的ティアは、ステージングおよびラボ環境に限定されます。外部ツールは、固定されたargv、タイムアウト、制限された出力、および最小限の環境を持つrun_tool()を通じて実行されます。

アクション(app/actions/)。型指定されたアクションは、リスク、可逆性、およびパラメータスキーマを宣言し、dry_run、execute、rollbackを実装します。リクエスト(オペレーターまたはエージェントのpropose_actionから)は、ポリシー(app/actions/policy.py:キルスイッチ、テナントactions_enabled、拒否リスト、メンテナンスウィンドウ、低リスクで可逆的なアクションのみの自動承認(ACTIONS_AUTO_APPROVE_LOWの場合))、承認(承認者はリクエスターと異なる。高リスクは2名必要(ACTIONS_REQUIRE_TWO_FOR_HIGHの場合)。クリティカルはさらにactions:approve_criticalを持つプリンシパルが必要)、ブラスト半径を持つドライラン、保存されたロールバックペイロードを持つactions.executeキューのジョブとしての実行、および各遷移での監査エントリを経由します。ACTIONS_KILL_SWITCH=true(グローバル、環境)またはPOST /api/v1/actions/kill-switch(テナントごと、actions_enabled=falseを設定)は、すべてのアクションリクエストと実行を拒否します。

ドキュメント

ドキュメント内容
docs/ARCHITECTURE.md設計:パッケージ、インターフェース、データモデル、APIテーブル
docs/API.mdステータス付きv1ルート概要
docs/DEPLOYMENT.md開発、Compose、Kubernetes、AWS、Azure;本番環境チェックリスト
docs/GO-LIVE.md監視専用モードでの段階的な本番環境ロールアウト
docs/SECURITY.md実装されたセキュリティモデル、報告
docs/THREAT-MODEL.mdSTRIDE(信頼境界ごと)、プロンプトインジェクション、SSRF、テナンシー、認証情報、ブローカーの悪用、サプライチェーン
docs/RUNBOOKS.mdインシデント手順
docs/COMPLIANCE.mdSOC 2 / NIST 800-171 / ISO 27001コントロールマッピング(認定ではなく、証拠サポート)
docs/ROADMAP.md実装済み対次期計画
CONTRIBUTING.md貢献ガイド

セキュリティ

脆弱性は、公開されたイシューではなく、GitHubのプライベート脆弱性報告(Securityタブ)を通じてプライベートに報告してください。詳細はdocs/SECURITY.mdにあります。

ライセンス

このリポジトリはMITライセンスです。サードパーティツール(nuclei、ZAP、Prowler、CALDERA、Semgrep、Gitleaks、Trivy)、クラウドSDK、モデルプロバイダーは、それぞれのライセンスと規約に従います。