
Azureのセキュリティ態勢、RBAC、NSGs、ストレージ、アイデンティティ、暗号化を監査するCLIツール
軽量で本番運用を想定したCLIツールです。Azureのセキュリティ設定を監査し、Microsoft Defender for Cloud が内部的にチェックしている内容を反映した、よくある設定ミスを可視化します。
| ID | カテゴリ | チェック内容 | 重大度 |
|---|---|---|---|
| AZ-001 | RBAC | サブスクリプションスコープで Owner / Contributor が割り当てられている | CRITICAL |
| AZ-002 | RBAC | リソースグループスコープで Owner / Contributor が割り当てられている | HIGH |
| AZ-003 | ネットワーク | 0.0.0.0/0 の受信許可ルールを持つ NSG | HIGH |
| AZ-004 | ストレージ | パブリックBLOBアクセスが有効なストレージアカウント | HIGH |
| AZ-005 | ID | MFA が登録されていない Entra ID ユーザー | HIGH |
| AZ-006 | ID | Owner / Contributor 権限を持つサービスプリンシパル | HIGH |
| AZ-007 | 暗号化 | 明示的な暗号化構成がないマネージドディスク | MEDIUM |
| AZ-008 | 暗号化 | ファイアウォール制限なしでパブリックネットワークに公開されている Key Vault | HIGH |
| AZ-009 | 監視 | アクティビティログの保持期間が90日未満 | MEDIUM |
| AZ-010 | 監視 | 主要なリソースタイプで Microsoft Defender for Cloud が有効になっていない | HIGH |
| AZ-011 | 監視 | 診断ログが有効になっていない Key Vault | MEDIUM |
| AZ-012 | コンピューティング | パブリックIPが直接接続されている仮想マシン | MEDIUM |
| AZ-013 | コンピューティング | エンドポイント保護拡張機能がない仮想マシン | MEDIUM |
| AZ-014 | コンピューティング | Azure Disk Encryption (ADE) がない仮想マシンのOSディスク | MEDIUM |
| AZ-015 | ネットワーク | NSG 経由で RDP ポート 3389 がインターネットに公開されている | CRITICAL |
| AZ-016 | ネットワーク | NSG 経由で SSH ポート 22 がインターネットに公開されている | CRITICAL |
| AZ-017 | ストレージ | HTTPS 以外のトラフィックを許可しているストレージアカウント | HIGH |
| AZ-018 | ストレージ | レガシー TLS バージョン(1.2 未満)を許可しているストレージアカウント | MEDIUM |
| AZ-019 | ID | Entra ID テナントにゲストユーザーアカウントが存在する | LOW |
| AZ-020 | 暗号化 | 論理的な削除または消去保護がない Key Vault | MEDIUM |
az login (Azure CLI)AZURE_CLIENT_ID、AZURE_CLIENT_SECRET、AZURE_TENANT_IDReaderUserAuthenticationMethod.Read.AllApplication.Read.AllID チェック (AZ-005、AZ-019) は、Graph API 権限が利用できない場合はグレースフルにスキップされます — 残りの監査は影響を受けずに実行されます。
pip install -e .
# フル監査 — すべてのチェック、すべての重大度
azure-auditor
# 特定のサブスクリプションを対象にする
azure-auditor --subscription <subscription-id>
# HIGH と CRITICAL の検出結果のみ表示
azure-auditor --severity HIGH
# JSON レポートを特定のディレクトリに保存
azure-auditor --output-dir ./reports
# ターミナル出力のみ
azure-auditor --no-json
# 詳細ログ
azure-auditor --verbose
または、インストールせずに:
PYTHONPATH=src python -m azure_security_auditor.cli --subscription <id>
ターミナル — Rich フォーマットのテーブル。重大度順(CRITICAL が先頭)に並びます:
╭──────────────────────────────────────────────────────────────────╮
│ Azure Security Posture Audit │
│ Subscription: My Production Subscription │
│ ID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx │
│ Run at: 2026-07-12T10:00:00Z │
│ Findings: 12 total (2 CRITICAL 6 HIGH 4 MEDIUM 0 LOW) │
╰──────────────────────────────────────────────────────────────────╯
Severity Check ID Check Resource Detail
✖ CRITICAL AZ-015 RDP Port 3389 Exposed to Internet... /subscriptions/. ...
✖ CRITICAL AZ-001 Owner Role Assigned at Subscription... <principal-id> ...
■ HIGH AZ-010 Defender for Cloud Not Enabled — VMs /subscriptions/. ...
...
JSON — reports/azure_audit_<subscription>_<timestamp>.json に書き出されます。
src/
azure_security_auditor/
cli.py # argparse entrypoint
engine.py # ThreadPoolExecutor orchestrator
models.py # Finding, AuditResult, Severity
checks/
rbac.py # AZ-001, AZ-002
network.py # AZ-003, AZ-015, AZ-016
storage.py # AZ-004, AZ-017, AZ-018
identity.py # AZ-005, AZ-019
service_principals.py # AZ-006
encryption.py # AZ-007, AZ-008, AZ-020
monitoring.py # AZ-009, AZ-010, AZ-011
compute.py # AZ-012, AZ-013, AZ-014
reporters/
terminal.py # Rich table output
json_reporter.py # JSON file output
DefaultAzureCredential を使用 — 次の順序で試行します:
AZURE_CLIENT_ID、AZURE_CLIENT_SECRET、AZURE_TENANT_ID)az login)export AZURE_CLIENT_ID="<app-id>"
export AZURE_CLIENT_SECRET="<secret>"
export AZURE_TENANT_ID="<tenant-id>"
azure-auditor --subscription <subscription-id>