PostgreSQLデータベースおよびJiraプロジェクト内の個人識別情報(PII)を発見するための内部セキュリティツール
AI PII Scannerは、アプリケーションセキュリティおよびプライバシーチーム向けに設計された、PIIを発見・カタログ化するための包括的なセキュリティ重視のツールです。2つのスキャン対象をサポートしています:
検出には3層のパイプラインを使用します:
@mentions および社内メールアドレス重要: このツールは、安全で管理された環境内での内部利用のみを目的としています。
| セキュリティ制御 | 実装 |
|---|---|
| データ持ち出し防止 | サードパーティAPI呼び出しなし; LLMエンドポイントはセルフホスト必須 |
| 最小権限アクセス | アプリケーションデータへの書き込み権限を持たない読み取り専用データベースロール |
| PII最小化 | 検出結果はメタデータと厳重にマスキングされたサンプルのみを保存 |
| 監査証跡 | すべてのスキャンを誰が/何を/いつ/どのようにの詳細とともに記録 |
| セキュアなログ | PIIフィールドを自動マスキングする構造化ログ |
| 暗号化された通信 | すべてのデータベース接続にSSL/TLSを必須 |
| Webhook検証 | 受信するJiraイベントに対するHMAC-SHA256署名検証 |
PostgreSQLデータベースのカラム全体でPIIをスキャンしたい場合は、こちらを使用してください。
# Clone the repository
cd PIIHunter
# Create virtual environment
python3 -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
# Install dependencies
pip install -r requirements.txt
# Download spaCy NER model (~800MB)
python -m spacy download en_core_web_lg
PostgreSQLのスーパーユーザーとしてこれを実行します:
CREATE ROLE pii_scanner_readonly WITH LOGIN PASSWORD 'your_secure_password';
GRANT CONNECT ON DATABASE your_database TO pii_scanner_readonly;
GRANT USAGE ON SCHEMA public, app_data TO pii_scanner_readonly;
GRANT SELECT ON ALL TABLES IN SCHEMA public, app_data TO pii_scanner_readonly;
cp .env.example .env
# Fill in DB_HOST, DB_PORT, DB_NAME, DB_USER, DB_PASSWORD
スキャン結果が保存される security_pii スキーマを作成します。一度だけ実行します:
python -m pii_scanner.cli init-schema
# Preview candidate columns (no data read)
python -m pii_scanner.cli discover
# Run PII detection
python -m pii_scanner.cli scan --sample-size 1000
# View results
python -m pii_scanner.cli report
python -m pii_scanner.cli test-connection
Jira の課題とコメントをスキャンして、偶発的な PII の露出を検出したい場合は、こちらを使用してください。
まず基本インストール(上記のステップ 1)が必要です。Jira スキャンのみを行いたい場合、データベースのセットアップ(ステップ 2~4)は不要です。
過去 N 時間のアクティビティについて、オンデマンドで Jira をポーリングします。サーバーは不要です。
ステップ 1 — 基本インストール(まだ行っていない場合)
cd PIIHunter
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
python -m spacy download en_core_web_lg
ステップ2 — Jira APIトークンを生成する
https://id.atlassian.com → Security → API tokens に移動しますステップ3 — 環境を設定する
cp .env.example .env
.env を編集し、Jira の詳細を入力してください:
JIRA_URL=https://yourcompany.atlassian.net
[email protected]
JIRA_API_TOKEN=your_api_token_here
# Optional — leave empty to scan all projects
# JIRA_PROJECT_KEYS=ENG,OPS,SUPPORT
# Emails from these domains will NOT be flagged as PII
COMPANY_EMAIL_DOMAINS=yourcompany.com
ステップ4 — 接続をテストする
認証情報を検証し、アクセス可能なプロジェクトを一覧表示し、最近のイシューのサンプルを取得します:
python -m pii_scanner.cli jira test
Expected output:
Testing connection to https://yourcompany.atlassian.net...
Auth ✓ logged in as Jane Smith ([email protected])
Projects ✓ 3 accessible: ENG, OPS, SUPPORT
Project ENG ✓ accessible
Recent issues (no time filter):
ENG-101 Fix login timeout on mobile
ENG-100 Update password policy
失敗した場合は、APIトークンと、JIRA_EMAILがトークンを生成したアカウントと一致していることを確認してください。
ステップ5 — スキャンを実行する
# Scan last 24 hours
python -m pii_scanner.cli jira scan
# Custom lookback window
python -m pii_scanner.cli jira scan --hours 48
Jira イベントを受信し、到着した瞬間にスキャンする HTTP サーバーを起動します。公開アクセス可能なエンドポイントが必要です。
ステップ 1 — 基本インストール + REST API セットアップ (先にサブセクション A のステップ 1〜4 を完了してください)
ステップ 2 — Webhook 依存関係のインストール
pip install fastapi uvicorn
ステップ3 — .env に webhook 設定を追加する
# Secret used to verify requests genuinely come from Jira
JIRA_WEBHOOK_SECRET=your_webhook_secret
JIRA_WEBHOOK_PORT=8080
ステップ4 — Webhookサーバーを起動する
python -m pii_scanner.cli jira webhook
# Custom port
python -m pii_scanner.cli jira webhook --port 9090
ステップ 5 — Jira で Webhook を登録する
http://yourserver:8080/webhook に設定しますIssue → createdComment → created.env 内の JIRA_WEBHOOK_SECRET と一致するように設定しますこれで Jira は新しい課題とコメントごとにサーバーへ POST を送信します。スキャナーはそれぞれを即座に処理します。
利用可能なエンドポイント:
| エンドポイント | 目的 |
|---|---|
POST /webhook | Jira イベントを受信します |
GET /health | サーバーが稼働していることを確認します |
本番環境での注意: uvicorn をインターネットに直接公開しないでください。詳細トピックの 本番環境 Webhook セットアップ セクションを参照してください。
すべての設定は .env 内の環境変数で管理されます。開始するには .env.example をコピーしてください。
DB_HOST=localhost
DB_PORT=5432
DB_NAME=your_database
DB_USER=pii_scanner_readonly
DB_PASSWORD=your_secure_password
DB_SSLMODE=require
# Schemas to scan (comma-separated)
SCHEMAS_TO_SCAN=public,app_data,customer_data
# Schemas to exclude (comma-separated)
SCHEMAS_TO_EXCLUDE=pg_catalog,information_schema,pg_toast
# Rows to sample per column
SAMPLE_SIZE=1000
# Batch size for streaming
BATCH_SIZE=500
# Minimum confidence threshold (0.0-1.0)
CONFIDENCE_THRESHOLD=0.5
# Enable/disable detection layers
ENABLE_REGEX_DETECTION=true
ENABLE_NER_DETECTION=true
ENABLE_LLM_DETECTION=false # Only with self-hosted LLM
セルフホスト型エンドポイントでのみ使用してください。公開APIを指定しないでください。
LLM_ENDPOINT=http://your-internal-llm.company.local:8000/v1
LLM_API_KEY=your_private_key
LLM_MODEL=llama-2-7b
# Jira connection
JIRA_URL=https://yourcompany.atlassian.net
[email protected]
JIRA_API_TOKEN=your_jira_api_token # generate at id.atlassian.com
# Projects to watch — leave empty to scan ALL accessible projects
# JIRA_PROJECT_KEYS=ENG,OPS,SUPPORT
# Emails from these domains are NOT flagged as PII (your internal addresses)
COMPANY_EMAIL_DOMAINS=yourcompany.com,internal.yourcompany.com
# Webhook server settings (only needed for real-time mode)
# JIRA_WEBHOOK_SECRET=your_webhook_secret
JIRA_WEBHOOK_PORT=8080
LOG_LEVEL=INFO # DEBUG, INFO, WARNING, ERROR
LOG_FORMAT=json # json or console
security_pii メタデータスキーマを作成します。初回セットアップ時に一度実行してください:
python -m pii_scanner.cli init-schema