★ 2階建てゼロトラスト (Two-Tier ZTNA) & ログアウト時自動降格・CLI ロック
企業の Windows や macOS 端末において、テレワーク環境で最も問題となるのが「Active Directory (AD) への初回ログオン・パスワード同期問題」、「退勤・離席時の端末からの不正アクセス」、そして「社員による勝手なVPN切断・設定改ざん(裏抜け)」です。
AegisMesh は、OS起動直後とログオン後で通信権限を動的に切り替える 「2階建てゼロトラスト(Two-Tier ZTNA)」 に加え、最新アップデートにより 「OSログアウト時のマシントンネル自動降格 & ALLグループ動的マスク」、および OSカーネル権限で設定を固定する 「エンタープライズ CLI ロック(Tamper Protection)」 を完備しています。
1. 2階建てゼロトラスト (Two-Tier ZTNA) の全体像
sequenceDiagram
autonumber
participant OS as クライアント端末 (PC)
participant Engine as AegisMesh デーモン (SYSTEM/root)
participant Mgmt as AegisMesh 管理サーバー
participant DC as 社内 AD / DNS サーバー
participant App as 社内業務システム / 機密DB
rect rgb(20, 30, 45)
Note over OS,App: 【第1階層: マシントンネル】(PC起動直後・ログオン前)
OS->>Engine: OSブート時にバックグラウンド自動起動
Engine->>Mgmt: Setup Key で端末認証 (ゼロダウンタイム自動更新)
Mgmt-->>Engine: マシントンネル確立 (※ALLグループは動的マスク除外)
OS->>DC: Active Directory へのログオン認証 (ポート 88, 389, 445, 53)
OS--xApp: 業務システム・社内イントラへの通信は 100% 遮断
end
rect rgb(15, 35, 25)
Note over OS,App: 【第2階層: ユーザートンネル】(OSログオン後・SSO対話認証)
OS->>Engine: 社員がトレイGUIから IdP SSO (Entra ID / Google) を実行
Engine->>Mgmt: ユーザーIDトークン検証 (ドメインセーフガード検証)
Mgmt-->>Engine: 部署グループ (sales / dev) への動的権限昇格 & 部署専用UserIP割り当て
OS->>App: 許可された業務リソースへのセキュア通信開始
end
rect rgb(35, 20, 25)
Note over OS,App: 【退勤・離席時: 自動降格ライフサイクル】(OSログアウト / サインアウト)
OS->>Engine: ユーザーがWindows/Macからログアウト (サインアウト検知)
Engine->>Mgmt: ユーザーセッション即時破棄通知
Mgmt-->>Engine: 第1階層マシントンネルへ自動フォールバック (ALLグループ再マスク)
OS--xApp: 業務リソースへの通信は即時遮断 (離席時の不正操作を完全防御)
OS->>DC: バックグラウンドでのグループポリシー (GPO) 更新・監視のみ継続
end
2. 従来型 VPN との比較マトリクス(提案・稟議用)
情シス部門のセキュリティ監査や経営層への稟議書でそのまま活用できる機能比較です。
| 比較項目 | 従来型 SSL-VPN / IPsec | 一般的なクラウド型 SASE | AegisMesh 2階建て ZTNA |
|---|---|---|---|
| 起動前 AD ログオン | ❌ 不可(ログオン後に手動接続が必要) | △ 一部高額エディションのみ対応 | ✅ 標準対応(OS起動時にマシントンネル自動確立) |
| Active Directory パスワード更新 | ❌ キャッシュ切れで在宅時にログイン不能リスク | △ 設定が極めて煩雑 | ✅ 完全対応(PC起動画面で社内ADと即時同期) |
| 離席・ログアウト時の挙動 | ❌ 接続が維持され社内へ侵入されるリスク | △ タイムアウトまでセッション放置 | ✅ 即時自動降格(マシントンネルへフォールバック) |
| マシントンネル時の横展開防止 | ❌ 全社セグメントへ通信可能 | △ IP制御が困難 | ✅ ALLグループ動的マスク(AD/DNSのみに完全限定) |
| 社員による切断防止 | ❌ タスクトレイから自由に切断可能 | △ 別途MDMエージェントが必要 | ✅ エンタープライズ CLI ロック(カーネル権限で固定) |
| 部署ごとの固定 IP 採番 | ❌ DHCPプールからランダム採番 | ❌ 端末IPは変動 | ✅ プライマリグループ別 Sticky IP |
3. 第1階層: マシントンネルと「ALLグループ動的マスク」
動作の仕組み
- 起動タイミング: PC の電源投入直後、Windows の「Ctrl + Alt + Delete」ログオン画面が表示された段階で自動確立。
- 実行権限: Windows サービス(
SYSTEM権限)または macOSLaunchDaemon(root権限)。 - 動的マスキング技術 (Dynamic ALL-Group Masking):
- NetBird 本家オープンソースでは、すべてのピアが暗黙的に
Allグループに所属するため、マシントンネル状態でもAll宛てのアクセスポリシーが開放されてしまう重大なセキュリティ課題がありました。 - AegisMesh 独自拡張: マシントンネル稼働中は、サーバー側で
Allグループのメンバーシップを**動的に一時除外(マスク)**します。 - これにより、Setup Key に明示的に指定されたマシントンネル専用グループ(例:
corporate-machines)のアクセスポリシー(ドメインコントローラーや社内 DNS 宛て)のみが厳格に適用されます。
- NetBird 本家オープンソースでは、すべてのピアが暗黙的に
【マシントンネル時のグループ所属状態】所属中: corporate-machines (AD/DNS 認証ポリシーのみ適用)マスク: All (業務Web・ファイルサーバー宛てポリシーは完全無効化)4. 第2階層: ユーザートンネル(SSO 昇格と部署専用 IP)
社員が PC にログオン後、AegisMesh トレイアプリから社用 IdP(Microsoft Entra ID, Google Workspace, LINE WORKS)で認証します。
- ドメインセーフガード検証: 認可トークン内のメールアドレスが、組織ポリシー(
allowedSSODomains)に合致するか厳格に検証(私用アカウントの遮断)。 - 部署グループへの動的昇格: ユーザーの主所属部署(Primary Group、例:
sales-dept)および兼務グループが有効化。 - 部署専用 UserIP への昇格: グループ予約 CIDR(例:
100.77.10.0/24)から社員専用の仮想 IP アドレスが割り当てられ、社内 UTM の Web フィルタや機密サーバーへの通信が開始されます。
5. ★ 退勤・離席時の自動降格ライフサイクル (Automatic Fallback)
本機能は、社員が退勤時や昼休み等で Windows から「サインアウト(ログアウト)」した瞬間、自動的に動作します。
社員が Windows で「サインアウト」をクリック ↓AegisMesh デーモンが OS セッション終了イベント (WTSSESSION_LOGOFF / Darwin console session change) を検知 ↓AegisMesh 管理サーバーへセッション失効通知を送信 ↓ユーザー権限(Tier 2)を瞬時に破棄し、マシントンネル(Tier 1)へ自動フォールバック ↓業務リソース(ファイルサーバー・機密DB)へのアクセスが即座に完全遮断 ↓ドメインコントローラー(GPO更新や資産管理ツールの死活監視)のバックグラウンド通信のみ維持[!IMPORTANT] 離席端末からの不正アクセス・情報漏洩の防止 万が一、社員の私用端末や支給PCが第三者に物理操作された場合でも、Windows / macOS のログオンパスワードを突破し、さらに本人の SSO / MFA(Authenticator / Passkey)を通過しない限り、社内ネットワークへのパケットは 1 パケットたりとも通過しません。
6. エンタープライズ CLI ロック (Tamper Protection)
社員がセキュリティ監視や UTM Web フィルタを嫌って、勝手に VPN を切断(aegismesh down)したり設定を変更したりする「裏抜け行為」を OS カーネル権限で徹底防止します。
$ aegismesh downError: permission denied: administrative CLI controls are locked by enterprise MDM policy.操作権限マトリクス
| コマンド | 一般社員 (制限ユーザー) | 管理者 (情シス / MDM) | 制御の目的 |
|---|---|---|---|
aegismesh up / login | ✅ 許可 | ✅ 許可 | ユーザー SSO ログイン操作は日常業務として許可 |
aegismesh status | ✅ 許可 | ✅ 許可 | 自身の接続状態・IPアドレスの確認 |
aegismesh down | ❌ 拒絶 | ✅ 許可 | VPN切断による UTM/セキュリティ監視の回避を阻止 |
aegismesh logout | ❌ 拒絶 | ✅ 許可 | 端末の登録抹消・キッティング解除を阻止 |
aegismesh login --setup-key | ❌ 拒絶 | ✅ 許可 | 登録済み Setup Key の勝手な上書きを阻止 |
aegismesh networks select | ❌ 拒絶 | ✅ 許可 | 強制 Exit Node やサブルートの手動解除を阻止 |
7. MDM / GPO によるポリシー配信手順
Windows レジストリ(HKLM)または macOS 構成プロファイル(.mobileconfig)を用いて全社端末へ一括適用します。
ポリシー設定項目一覧表
| ポリシー項目 | Windows レジストリキー (HKLM\SOFTWARE\Policies\AegisMesh) | macOS 構成プロファイル (io.aegismesh.client) | 型 / 推奨値 | 説明 |
|---|---|---|---|---|
| CLI ロック | LockAdminControls | LockAdminControls | DWORD (1) / Boolean (true) | 切断やログアウトなど社員による設定解除を全面遮断 |
| SSO 許可ドメイン制限 | allowedSSODomains | allowedSSODomains | 文字列 (kusa-cloud.com) / Array | 指定ドメイン以外(私用 Gmail 等)のサインインを遮断 |
Windows Intune / PowerShell 配信用スクリプト
# 管理者権限で実行New-Item -Path "HKLM:\SOFTWARE\Policies\AegisMesh" -Force -ErrorAction SilentlyContinue
# 1. CLIロックを有効化 (一般ユーザーの切断・設定変更を禁止)Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\AegisMesh" -Name "LockAdminControls" -Value 1 -Type DWord
# 2. SSO許可ドメインを自社ドメインに固定 (サブドメイン含む)Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\AegisMesh" -Name "allowedSSODomains" -Value "kusa-cloud.com" -Type String
Write-Output "AegisMesh Enterprise Client Policy applied successfully."macOS Jamf / 構成プロファイル設定 (XML)
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"><plist version="1.0"><dict> <key>PayloadContent</key> <array> <dict> <key>PayloadType</key> <string>io.aegismesh.client</string> <key>PayloadVersion</key> <integer>1</integer> <key>PayloadIdentifier</key> <string>io.aegismesh.client.policy</string> <key>PayloadUUID</key> <string>B4E12C84-9A2E-4F3D-8C1B-55A7E2019A44</string> <key>PayloadEnabled</key> <true/> <!-- CLI ロック有効化 --> <key>LockAdminControls</key> <true/> <!-- SSO 許可ドメイン固定 --> <key>allowedSSODomains</key> <array> <string>kusa-cloud.com</string> </array> </dict> </array></dict></plist>