Geminiの解説するゼロトラスト(オンプレミス版)

技術的備忘録

タイトルの通り、Gemini3にゼロトラスト・セキュリティについて、解説してもらいました。
また、オンプレミス環境へゼロトラストを導入する方法も解説して貰っています。
クラウドについての解説は次回に回しました。

生成AIにはハルシネーションの問題があり、その解答には間近いが含まれている可能性があります。そのことを踏まえて記事を読んでください。

ゼロトラストと境界防御について、くわしく解説してください。

現代のサイバーセキュリティにおいて、これまでの主流だった「境界防御」から、新しい考え方である「ゼロトラスト」への移行が急速に進んでいます。

これら2つのモデルは、守り方の哲学そのものが大きく異なります。それぞれの特徴、メリット・デメリット、そしてなぜ移行が必要なのかを詳しく解説します。


  1. 1. 境界防御(ペリメタ防御)とは?
  2. 2. ゼロトラスト(Zero Trust)とは?
  3. 3. 境界防御とゼロトラストの比較
  4. 4. なぜ今、ゼロトラストが必要なのか?
  5. 5. ゼロトラスト実現へのステップ
    1. まとめ
  6. 1. アイデンティティ(AD)の強化とMFAの導入
  7. 2. マイクロセグメンテーション(システム間連携の保護)
  8. 3. デバイスの健全性チェック(Device Trust)
  9. 4. 内部ZTNA(Zero Trust Network Access)の導入
  10. 5. ログの統合と可視化(SIEM)
    1. オンプレミスにおけるゼロトラスト導入の全体像
    2. 次のステップへのアドバイス
    3. 1. 「場所(IP)」ではなく「属性(ID/状態)」で通す
    4. 2. 「ポート」を閉じ、サーバーを「隠す」
    5. 3. 「ネットワーク全体」ではなく「特定のアプリ」への接続
    6. まとめると
  11. 1. サーバー間通信における「ゼロトラスト」の核
  12. 2. 具体的な仕組み:どうやって守るのか?
    1. A. マイクロセグメンテーション(通信の「道」を絞る)
    2. B. 内部ZTNA / サービスメッシュ(通信の「資格」を問う)
  13. 3. システム連携における通信の流れ(具体例)
  14. 4. なぜ「二重」にする必要があるのか?
  15. 5. 導入に向けた現実的なステップ
  16. 1. 2つの異なる「認証」の役割
  17. 2. WebサーバーがDBサーバーと通信する時の挙動
    1. パターンA:トークンの委譲(User Context)
    2. パターンB:マシン間認証(Machine to Machine / mTLS)
  18. 3. 「Auth0」と「オンプレミス環境」のジレンマ
  19. 4. 結局、どう構築するのが「ゼロトラスト」か?
    1. まとめ
    2. 1. パターンA:トークンの委譲(User Context)について
    3. 2. パターンB:マシン間認証(M2M / mTLS)について
      1. mTLSにおける証明書交換の仕組み
    4. 3. 現実的な解決策:固定パスワードからの脱却
      1. この構成のメリット:
    5. 結論
  20. 1. 内部ZTNA(エージェント型)の正体
  21. 2. 通信の「横取り(インターセプト)」をレイヤーで解説
    1. レイヤー別の挙動
  22. 3. 「プロキシ(代理)」としての役割
  23. 4. 内部ZTNAを導入した後の世界
    1. まとめ
  24. 1. 遅延が発生する3つのポイント
  25. 2. パフォーマンス低下を防ぐ「現代の工夫」
    1. ① CPUによるハードウェアアクセラレーション(AES-NI)
    2. ② eBPF(Linux)による高速な横取り
    3. ③ コネクションの使いまわし
  26. 3. 実務上の「影響が出るケース」と「出ないケース」
  27. 4. 導入時に検討すべき「設計の勘所」
    1. まとめ
    2. 今回のまとめ:オンプレミス・ゼロトラストの肝
    3. クラウドのゼロトラストへ向けて
  28. 補足

1. 境界防御(ペリメタ防御)とは?

「社内(内側)は安全、社外(外側)は危険」という境界線を引く考え方です。

よく「城と堀(Castle and Moat)」に例えられます。高い壁(ファイアウォール)を築き、入り口(VPNなど)を厳重にチェックすることで、一度中に入ってしまえば、その中の人は「信頼できる味方」として自由に行動できる仕組みです。

  • 主な技術: ファイアウォール、VPN(仮想専用線)、IDS/IPS(侵入検知・防御システム)。
  • メリット: ネットワークの出入り口だけを監視すればよいため、管理が比較的シンプル。
  • デメリット: 一度「堀」を越えられてしまう(ID盗難や脆弱性を突かれる)と、内部でやりたい放題(横展開/ラテラルムーブメント)されてしまう。

2. ゼロトラスト(Zero Trust)とは?

「何も信頼しない(Never Trust, Always Verify)」という考え方です。

ネットワークの場所(社内か社外か)に関わらず、すべてのアクセスに対して「誰が、どのデバイスで、何のために」アクセスしているのかを、その都度厳格に検証します。

  • 核となる考え方:
  • アイデンティティ(人)の確認: IDとパスワードだけでなく、多要素認証(MFA)を必須にする。
  • デバイスの確認: セキュリティパッチが当たっているか、ウイルスに感染していないかをチェックする。
  • 最小権限の原則: 業務に必要な最低限のデータにしかアクセスさせない。
  • メリット: テレワークやクラウド利用に強く、万が一侵入されても被害を最小限に抑えられる。
  • デメリット: 導入コストや運用負荷が高くなる傾向がある。

3. 境界防御とゼロトラストの比較

項目境界防御(従来型)ゼロトラスト(次世代型)
信頼の根拠ネットワークの場所(社内なら信頼)厳格な認証と検証(常に疑う)
主な対象オフィス内のPC、自社サーバーモバイル、クラウド、テレワーク端末
セキュリティの焦点境界線(入り口)の強化データやリソースへのアクセス制御
侵入された場合内部での被害が広がりやすい特定の範囲に封じ込めが可能
ユーザー体験社外からのアクセスが不便(VPNなど)どこからでも安全にアクセス可能

4. なぜ今、ゼロトラストが必要なのか?

境界防御が限界を迎えている理由は、主に3つの環境変化にあります。

  1. クラウド利用の普及: 守るべきデータが社内のサーバーではなく、外部のクラウド(SaaS)に置かれるようになった。
  2. 働き方の多様化: テレワークが普及し、社員が「境界の外」から働くことが当たり前になった。
  3. 攻撃の高度化: VPNの脆弱性を突いたり、正規のIDを盗んだりする攻撃が増え、「一度中に入れば安全」という前提が崩れた。

5. ゼロトラスト実現へのステップ

ゼロトラストは特定の製品を導入すれば完了するものではなく、以下の要素を組み合わせて構築します。

ゼロトラストの主要なコンポーネント

  • ID管理(IAM): 正当な利用者であることを確認する基盤。
  • エンドポイントセキュリティ(EDR): PCやスマホの挙動を監視し、異常を検知する。
  • マイクロセグメンテーション: ネットワークを細かく断片化し、被害の拡大を防ぐ。
  • ログの可視化・分析: 常に「誰が何をしたか」を記録し、AIなどで異常を察知する。

まとめ

  • 境界防御は、社内を安全地帯とする「守り」の戦略ですが、現代の複雑な環境には対応しきれなくなっています。
  • ゼロトラストは、場所を問わず「常に検証する」ことで、被害を最小化する現代的な戦略です。

今後は、既存の境界防御を活かしつつ、重要なデータやID管理から段階的にゼロトラストへ移行していくのが現実的なアプローチとなります。


ゼロトラストへの移行を検討されている場合、具体的にどの部分(例えば「認証の強化」や「クラウドの安全利用」など)から優先的に進めたいとお考えですか?状況に合わせて最適なステップをご提案できます。

社内ネットワークを境界防御(FWなど)で守るオンプレミス環境で、全ての業務システムを運用している場合、ゼロトラストを導入するには、何をすれば良いのでしょうか。
多数のシステム・サーバーが互いに他システム連携している事を想定しています。
現在の個人認証にはMicrosoftのADを使用しているものとします。
この場合は、クラウドへの移行はしないという前提を回答をお願いします。

オンプレミス環境を維持したまま、クラウドに依存せずゼロトラストを実現することは十分に可能です。むしろ、多数のシステムが複雑に連携している環境こそ、ゼロトラストの「最小権限」と「可視化」の恩恵が大きくなります。

クラウドへ移行しないという前提に基づき、以下の5つのステップで導入を進めるのが現実的です。


1. アイデンティティ(AD)の強化とMFAの導入

ゼロトラストの基盤は「誰がアクセスしているか」を厳格に確認することです。現在のADをベースに、以下の対策を行います。

  • 多要素認証(MFA)の強制: ID/パスワードだけでなく、物理トークンやスマホアプリによるMFAを導入します(ADと連携可能なオンプレミス用MFA製品を利用)。
  • 管理用アカウントの分離(Tierモデル): 特権管理者(Domain Adminなど)が一般端末にログインすることを禁止し、攻撃者の横移動(ラテラルムーブメント)を防ぎます。
  • サービスアカウントの棚卸し: システム連携に使用している「サービスアカウント」に、必要以上の権限を与えていないか、パスワードが固定されたままになっていないかを確認します。

2. マイクロセグメンテーション(システム間連携の保護)

「多数のシステムが互いに連携している」環境で最も重要な対策です。従来の「ファイアウォールで外から守る」のではなく、「サーバー1台単位」で壁を作る考え方です。

  • 役割: サーバー間の不要な通信をすべて遮断します。
  • 実装方法: ソフトウェア定義ネットワーク(SDN)や、サーバー1台ごとにエージェントを入れて通信制御を行う製品(IllumioやVMware NSXなど)を使用します。
  • メリット: 万が一1つのシステムがウイルスに感染しても、隣のシステムへ被害が拡大するのを防げます。

3. デバイスの健全性チェック(Device Trust)

ADに参加している(ドメイン参加)だけでは不十分です。「その端末が今、安全か」をチェックします。

  • エンドポイントセキュリティ(EDR): 端末上の不審な挙動をリアルタイムで監視し、感染の兆候があれば即座にネットワークから隔離します。
  • 検疫ネットワークの構築: OSのアップデートが未適用だったり、アンチウイルスがオフだったりするPCを、業務システムへ接続させない仕組みを作ります。

4. 内部ZTNA(Zero Trust Network Access)の導入

社内ネットワークにいるからといって、すべてのサーバーに「IPレベルで疎通できる」状態を廃止します。

  • アプリケーション・プロキシの活用: ユーザーがシステムにアクセスする際、専用の「ゲートウェイ」を一度経由させます。ゲートウェイは「本人確認」と「端末の健康状態」をチェックし、OKな場合にのみ、その特定のアプリへの通信を通します。
  • 「隠し」リソース: 認証を通るまで、サーバーのポートは一切開かない(ステルス状態にする)ことで、内部からのスキャンや攻撃を防ぎます。

5. ログの統合と可視化(SIEM)

全てのアクセス(誰が、どの端末で、どのサーバーに、何をしたか)を記録し、分析します。

  • 異常検知: 「普段アクセスしない深夜に大量のデータが動いている」「特定のサーバーから不自然な通信がある」といった兆候をAIやルールベースで検知します。
  • システムの相関分析: 複数のサーバーをまたぐ通信を可視化することで、複雑なシステム連携の中で「どこにボトルネックやリスクがあるか」を把握できます。

オンプレミスにおけるゼロトラスト導入の全体像

分野具体的アクション期待される効果
ユーザーAD強化 + オンプレMFAID盗用による不正アクセスの防止
端末EDR導入 + 資産管理感染端末の即時遮断、脆弱な端末の排除
ネットワークマイクロセグメンテーションサーバー間での攻撃拡大を阻止
データ/アプリ内部ゲートウェイ経由のアクセス認証なしでの内部スキャンを不可能にする

次のステップへのアドバイス

現在の環境で特に懸念されるのは、「システム間連携(サーバー間通信)の多さ」かと思います。この場合、まずは全通信を可視化し、「どのサーバーとどのサーバーが通信するのが正解か」というホワイトリストを作成することから始めるのが定石です。

まずは、特定の重要な業務システム1つを対象に、その周囲に「マイクロセグメンテーション(通信制限)」をかけてみる、スモールスタートの検討はいかがでしょうか。

「内部ZTNA」について質問です。
「ユーザーがシステムにアクセスする際、専用の「ゲートウェイ」を一度経由させます」とのことですが、これはサーバー側のネットワークをクライアント端末から隔離するということですよね。
社内を境界防御で隔離している中で、さらにサーバー群を二重に境界防御を隔離するということですか。

仰る通り、構造としては「社内ネットワークという大きな境界の中に、さらにサーバー群を守るための小さな境界(ゲートウェイ)を作る」形になるため、多層防御(二重の隔離)という解釈で間違いありません。

しかし、従来のファイアウォール(FW)による隔離と「内部ZTNA」には、「守り方の質」において決定的な違いがあります。

なぜ単なる「二重の境界防御」ではないのか、3つのポイントで解説します。


1. 「場所(IP)」ではなく「属性(ID/状態)」で通す

従来のFWによる隔離は、「このセグメント(社内LAN)からの通信なら通す」というIPアドレスベースの許可でした。そのため、一度社内ネットワークに入り込んだウイルスや攻撃者は、同じセグメント内のサーバーへ自由にアクセスできてしまいました。

一方、内部ZTNA(ゲートウェイ)は、場所(IP)を信用しません。

  • ID: 誰がアクセスしているか(AD認証 + MFA)
  • デバイス: 会社支給のPCか、ウイルス対策は最新か、パッチは当たっているか これらが全てOKな場合のみ、「その瞬間の通信だけ」ゲートウェイが道を作ります。

2. 「ポート」を閉じ、サーバーを「隠す」

ここが最も大きな違いです。 通常のサーバー隔離(FWやVLAN)では、通信許可ルールがある以上、サーバーの特定のポート(例:443番など)は常に「開いて」おり、ネットワークスキャンをすればサーバーの存在が見えてしまいます。

内部ZTNAでは、「ダーククラウド(隠れたリソース)」という仕組みを使います。

  • クライアント端末とサーバーは直接通信できません。
  • サーバー側のゲートウェイは「外からの接続待ち(Listen)」をせず、自分から「ZTNAコントローラー」へコネクションを張りに行きます。
  • 認証を通るまで、サーバーのIPアドレスもポートも、社内ネットワークから一切見えません(スキャンしても反応しない)。

これにより、社内に侵入した攻撃者が「他にどんなサーバーがあるか」を調査(偵察行為)することを不可能にします。

3. 「ネットワーク全体」ではなく「特定のアプリ」への接続

従来の境界防御(VPNやFW)は、一度許可されると「そのネットワーク全体」にアクセスできることが多い(いわゆる「城門が開く」状態)です。

内部ZTNAは、「最小権限」を徹底します。

  • 「経理担当者は、会計システムのみ」
  • 「エンジニアは、開発サーバーのみ」 というように、ゲートウェイが「許可された特定のアプリケーション」との間だけを中継します。他のサーバーへの横移動(ラテラルムーブメント)は、ネットワーク的に繋がっていても論理的に遮断されます。

まとめると

「社内を境界防御で隔離している中で、さらにサーバー群を二重に境界防御を隔離する」というのは構成としては正しいですが、その実態は「静的な壁(FW)」の中に、「動的な検問所(ZTNA)」を作るというイメージです。

  • FW(1重目): 怪しいパケットを止める「大まかなフィルター」
  • 内部ZTNA(2重目): 誰が、どの端末で、どのアプリを触るかを都度チェックし、OKな時だけ対象を見せる「ピンポイントの案内人」

このように、もし1層目のFWを突破されたり、社内PCが1台乗っ取られたりしても、2層目のZTNAが「そのPCは今、不自然な動きをしている」「このユーザーにはその権限がない」と判断してサーバーを守り抜くのが、ゼロトラストの狙いです。

「システム連携」が多い環境では、このゲートウェイに「どのシステム同士の通信を許可するか」というルールを定義していく作業が、導入の肝になります。

「FW(1重目)と内部ZTNA(2重目)の二重防御」の仕組みは分かりました。
マイクロセグメンテーション(通信制限)と、内部ZTNA(2重目)の部分について、さらに解説してください。
具体的に、FW(1重目)で隔離されたサーバー群の中での他システム連携において、サーバーとサーバーが通信している場面の内部ゼロトラストはどうするべきなのかを、理解したいのです。

サーバー同士が通信し合う「システム連携」におけるゼロトラストは、人間(ユーザー)がシステムにアクセスする場合とは少し異なるアプローチが必要です。

サーバー間通信(Machine to Machine: M2M)において、マイクロセグメンテーションと内部ZTNAがどのように機能するのか、「サーバーのアイデンティティ(身分証明)」という視点から詳しく解説します。


1. サーバー間通信における「ゼロトラスト」の核

ユーザーのアクセスでは「IDとパスワード」を使いますが、サーバー同士の通信では、代わりに「証明書」や「サービスアカウント」をアイデンティティとして使います。

従来の境界防御では、サーバーAからサーバーBへの通信は「IPアドレス」で許可していました。しかし、ゼロトラストでは以下の3つの要素で判断します。

  1. アイデンティティの確認: 「その通信を送ってきたのは、間違いなく『在庫管理システム』のサーバーか?」
  2. プロセスの確認: 「そのサーバー内の『正規のプログラム(プロセス)』からの通信か?(ウイルスによる通信ではないか?)」
  3. 最小権限の接続: 「在庫管理システムは、DBサーバーの特定のポート以外に触ろうとしていないか?」

2. 具体的な仕組み:どうやって守るのか?

サーバー群の中での防御は、主に「エージェント型」または「分散ゲートウェイ型」で行われます。

A. マイクロセグメンテーション(通信の「道」を絞る)

サーバー1台1台に「専用の小型ファイアウォール」を配置するイメージです。

  • 実装: 各サーバーに「エージェント」というソフトを入れます。
  • 動作: 従来のFWは「ネットワークの入り口」にありましたが、これは「サーバーのすぐ隣」で監視します。
  • 効果: 同一ネットワーク(VLAN)内であっても、許可されていないサーバー同士の通信は1パケットも通しません。これにより、1台が乗っ取られても隣のサーバーへ攻撃(スキャンなど)が届かなくなります。

B. 内部ZTNA / サービスメッシュ(通信の「資格」を問う)

サーバー間の通信を「暗号化」し、「相互認証(mTLS)」を行います。

  • 仕組み: サーバーAがサーバーBにデータを送る際、お互いにデジタル証明書を提示し合い、「お前は確かに許可されたサーバーだな」と確認してから通信を開始します。
  • ポリシー制御: 管理画面で「AからBへの通信は、この時間帯のこの処理だけ許可」といったルールを細かく設定します。

3. システム連携における通信の流れ(具体例)

例えば、「WEBサーバー」から「DBサーバー」へデータを送る場面を想定します。

  1. 通信の発生: WEBサーバー内のプログラムが、DBへ接続しようとします。
  2. 検問(内部ZTNA): WEBサーバー内のエージェントが通信をキャッチし、「このプログラムは正規のものか?」「宛先は許可されているか?」を瞬時にチェックします。
  3. 身分証明: WEBサーバーが自身の「証明書」を提示し、DBサーバー側のエージェントと認証を行います。
  4. 暗号化通路の作成: 認証が通ると、その2台の間だけで有効な「暗号化されたトンネル」が作られます。
  5. 通信実行: データが送られます。
  6. 即時遮断: 処理が終わればトンネルは消えます。

ここがポイント! もし、WEBサーバーがウイルスに感染し、DBサーバー以外の「人事システム」を覗こうとしても、「人事システムへの通行証(証明書)」を持っていないため、ネットワーク的に隣にいても通信は100%拒否されます。


4. なぜ「二重」にする必要があるのか?

「FW(1重目)」と「内部ZTNA/マイクロセグ(2重目)」の役割分担は以下の通りです。

  • 1重目(FW): 「外部」からの不正な侵入や、許可していない拠点からのアクセスをバッサリ切る。
  • 2重目(内部ZTNA/マイクロセグ): 「正規のルートで入ってきた通信」や「内部で発生した通信」を細かく監視する。

オンプレミスで多数のシステムが連携している場合、1つのサーバーの脆弱性が突かれると、ドミノ倒しのように全システムが停止・汚染されるリスクがあります。内部ZTNAを導入することで、そのドミノを1つ1つ独立させ、「1箇所が倒れても、他には影響させない」環境を作ることができます。


5. 導入に向けた現実的なステップ

多数のサーバーがある環境で一斉にこれをやるのは困難です。以下の手順が推奨されます。

  1. 可視化(フローの把握): 専用ツールを使い、現在「どのサーバーとどのサーバーが、どのポートで通信しているか」をすべて洗い出します。(人間が把握していない「隠れた連携」が必ず見つかります)
  2. ホワイトリスト化: 洗い出した正常な通信だけを「許可ルール」として定義します。
  3. シミュレーション: 実際に遮断する前に、「ルールを適用したら、どの通信が止まってしまうか」をログだけで確認します。
  4. 段階的な適用: 影響の少ないシステムから順に、実際の遮断(エンフォースメント)を開始します。

この「現状の通信の可視化」は、ゼロトラストを検討する上で最も価値のあるプロセスの一つです。

いかがでしょうか。特に「サーバーAからBへの連携」において、現在どのような認証(固定IP許可のみ、または特定のサービスアカウントなど)を使っているかによって、導入すべき製品のタイプが変わってきます。もし特定の連携方式について懸念があれば、さらに詳しくお答えできます。

「3.システム連携における通信の流れ(具体例)」で「身分証明: WEBサーバーが自身の「証明書」を提示し、DBサーバー側のエージェントと認証を行います」とあります。
もし、クライアントで Auth0 認証を行っていたら、WebサーバーがDBサーバーと通信する時も Auth0 認証を行うということですか。

ご質問ありがとうございます。非常に鋭い視点です。

結論から申し上げますと、「ユーザーを認証する仕組み(Auth0など)」と、「サーバー同士を認証する仕組み(内部ZTNA/mTLSなど)」は、役割が異なりますが、ゼロトラストにおいてはこれらを組み合わせて(あるいは連動させて)運用します。

「WebサーバーがDBサーバーと通信する時」に何が起きるのか、Auth0のようなIDプロバイダ(IdP)を使っているケースで整理しましょう。


1. 2つの異なる「認証」の役割

まず、以下の2種類の認証を区別する必要があります。

  1. ユーザー認証(End-User Identity):
  • 「誰が」操作しているかを確認するもの。(例:Auth0、Microsoft AD)
  • WebサーバーはAuth0から「この人は確かに田中さんです」という証明書(アクセスレガシー/JWTトークン)を受け取ります。
  1. マシン認証(Machine/Service Identity):
  • 「どのプログラム/サーバーが」通信しているかを確認するもの。
  • DBサーバーから見て、「アクセスしてきたWebサーバー自体が本物か?」を確認します。

2. WebサーバーがDBサーバーと通信する時の挙動

Auth0のようなトークンベースの認証を使っている場合、WebサーバーがDBと通信する(または別のAPIサーバーを叩く)際には、以下の2パターンが考えられます。

パターンA:トークンの委譲(User Context)

Webサーバーは、ユーザーから受け取った「Auth0のトークン」をそのまま(あるいは作り直して)DBサーバーやバックエンドAPIに渡します。

  • メリット: DBサーバー側で「これは田中さんの操作によるデータ取得だな」というユーザー単位の認可が可能です。
  • ゼロトラスト的側面: 「Webサーバーが許可されているから全データ見せる」のではなく、「田中さんの権限で、田中さんのデータだけを見せる」という最小権限が実現できます。

パターンB:マシン間認証(Machine to Machine / mTLS)

これは前回の回答で触れた「内部ZTNA」が得意とする部分です。Auth0のユーザー認証とは別レイヤーで、サーバー間の接続そのものを認証します。

  • 仕組み: WebサーバーとDBサーバーの間で相互TLS(mTLS)による証明書交換を行います。
  • なぜ必要か: もし悪意のある第三者が社内ネットワークに別の偽サーバーを立てて、Auth0のトークンを盗んでDBに投げたとしても、「サーバー自体の証明書(マシンID)」を持っていなければ、通信自体が拒否されるからです。

3. 「Auth0」と「オンプレミス環境」のジレンマ

ここで、ユーザー様が前提条件として挙げられた「クラウド移行はしない」「ADを使用している」という点に立ち返ると、少し注意が必要です。

  • Auth0はクラウドサービス(SaaS)です。 もし完全に閉じたオンプレミス環境で運用する場合、Auth0の代わりにAD FS(Active Directory Federation Services)や、オンプレミス型のKeycloakなどを使用して、同様の「トークンベース認証」を行うことになります。
  • ADを使用している環境であれば、従来はKerberos(ケルベロス)認証の「委譲(Delegation)」という仕組みで、ユーザー情報をDBまで引き継いでいました。

4. 結局、どう構築するのが「ゼロトラスト」か?

オンプレミスでシステム連携が多い場合、理想的な構成は以下の「2階建て」になります。

  • 1階部分(インフラ層):マイクロセグメンテーション / 内部ZTNA
  • サーバーAとサーバーBの間の「土管(通信経路)」を、証明書を使って認証・暗号化する。
  • これにより、「許可されたサーバー同士」しか会話できないようにする。
  • 2階部分(アプリ層):ID連携(AD/OAuth2/OIDC)
  • 通信の中身(リクエスト)に「誰の操作か」というトークンを載せる。
  • これにより、「許可されたユーザーの操作」しか受け付けないようにする。

具体例: 万が一、Webサーバーが乗っ取られて、攻撃者がDBサーバーから全顧客データを抜こうとしたとします。

  1. 1階部分の防御: 攻撃者のプログラムが「正規の証明書」を使っていなければ、通信が遮断されます。
  2. 2階部分の防御: 通信ができたとしても、リクエストに「適切なユーザートークン」が載っていなければ、DB側が「そんな大量のデータ、田中さんの権限では出せません」と拒否します。

まとめ

「WebサーバーがDBサーバーと通信する時にAuth0認証を行うか?」という問いへの答えは、「ユーザーの身分を証明するためにトークンは引き継ぐが、それとは別に、サーバー自体が本物であることを証明する(内部ZTNA/mTLSなど)仕組みを重ねるのがゼロトラストの正解」となります。

現在、各システム間の連携(WebからDB、あるいはAppからApp)は、「固定のサービスアカウント(ID/PW)」で接続されていますか? それとも「ADの統合認証(Kerberosなど)」ですでに行われていますか? これにより、どのレイヤーから手をつけるべきかが変わってきます。

WebからDBについては「固定のサービスアカウント(ID/PW)」で対処しているケースが多いと思います。
ADはクライアント側でのシングルサインオンに使用されているだけです。
DBサーバーは隔離されていてクライアント側からはアクセスできません。
Webサーバーだけがクライアントに公開されている状況です。 Kerberosなどは使用していません。

「パターンA:トークンの委譲」の場合は、WebサーバーとDBサーバーの通信の度に、ユーザートークンをDBに渡さなければならないということですか。
システム自体がDBサーバーとの通信の度にログインユーザーのトークンを管理していて渡さなければならないということですか。

「パターンB:マシン間認証」の場合は、ユーザートークンをDBサーバーに渡す必要は無いのですよね。

「WebサーバーとDBサーバーの間で相互TLS(mTLS)による証明書交換」ではどのような証明書交換をしているのか解説してください。

現在の多くのオンプレミス環境における「固定のサービスアカウント」方式から、ゼロトラストな「動的な認証」へどう移行するか、という非常に実務的なフェーズのご質問ですね。

それぞれのパターンについて、実装のイメージと「何がやり取りされるのか」を整理して解説します。


1. パターンA:トークンの委譲(User Context)について

質問: WebとDBの通信の度にユーザートークンを渡さなければならないのか? システムがトークンを管理して渡すのか?

回答: はい、その通りです。ただし、Webサーバーがトークンを「永続的に管理する」というよりは、「クライアントから送られてきた証明書を、DBへのリクエストに同封して転送する」というイメージが近いです。

  • 具体的な動き:
  1. クライアント(PC)がWebサーバーにリクエストを送る際、ヘッダーに「Auth0やAD FSから発行されたJWT(トークン)」を載せます。
  2. Webサーバーはそのリクエストを受け取ると、中身を処理するためにDBへアクセスします。この時、「自分のサービスアカウント」と一緒に「クライアントから受け取ったトークン」もDB(またはDBの手前にあるプロキシ)に投げます。
  • なぜこれが必要か: 固定のサービスアカウントだけだと、DB側は「Webサーバーからの依頼だ」ということは分かりますが、「それが本当にログイン中の田中さんの操作によるものか」は分かりません。トークンを渡すことで、DB側(あるいは認証ゲートウェイ)で「今この処理を要求しているのは田中さんであり、彼はこのデータを見る権限がある」と、通信の度に厳格にチェックできるようになります。

2. パターンB:マシン間認証(M2M / mTLS)について

質問: ユーザートークンを渡す必要は無いのか? mTLSではどのような証明書交換をしているのか?

回答: 「通信経路(土管)の安全性を確保する」という目的においては、ユーザートークンは不要です。しかし、ゼロトラストの完成形としては、「パターンB(正しいサーバー同士か)」を確認した上で、その中を通るパケットに「パターンA(正しいユーザーか)」を載せるという二階建て構造を目指します。

mTLSにおける証明書交換の仕組み

通常のHTTPS(TLS)は、私たちがAmazonなどのサイトを見る際、「そのサイトが本物か」をブラウザが確認する片方向の認証です。mTLS(相互TLS)は、これをサーバー間でも「お互い」に行います。

【具体的な交換フロー】

  1. 接続要求: WebサーバーがDBサーバーに接続をリクエストします。
  2. DBの証明書提示: DBサーバーが「私の証明書(公開鍵)」をWebサーバーに送ります。Webサーバーは、社内の認証局(CA)のリストと照合し、「このDBは本物だ」と確認します。(ここまでは普通のHTTPSと同じ)
  3. Webの証明書提示(ここがmTLSの特徴): 次に、DBサーバーがWebサーバーに対して「お前の証明書も見せろ」と要求します。
  4. 検証: Webサーバーが「自分の証明書」を送ります。DBサーバーはこれを検証し、「この接続元は、間違いなく弊社の『WebサーバーA』だ」と確信します。
  5. 暗号化開始: お互いの正体が確認できて初めて、その通信専用の暗号鍵が作られ、データのやり取りが始まります。

3. 現実的な解決策:固定パスワードからの脱却

ユーザー様が懸念されている「システム連携の度にトークンを管理・送付する」のは、既存の古いシステム(レガシーなDB接続など)では実装が非常に困難です。

そこで、オンプレミス環境でよく取られる「内部ZTNA(エージェント/プロキシ型)」による解決策が有効になります。

  1. WebサーバーとDBサーバーに「エージェント(またはサイドカープロキシ)」を置く。
  2. アプリ(Webサーバーのコード)自体は、今まで通り「固定のID/PW」でDBに接続しようとする。(コードの修正は不要)
  3. エージェントがその通信を横取り(インターセプト)する。
  4. エージェント同士が、裏側で「mTLS(証明書交換)」と「ユーザートークンの検証」を自動で行う。
  5. 全てが正当であれば、通信をDBに流す。

この構成のメリット:

  • 「パターンB(マシン認証)」を自動化: 証明書の更新や交換をエージェントが勝手にやってくれます。
  • 「固定ID/PW」のリスク低減: たとえID/PWが漏洩しても、エージェントによる「証明書」と「ユーザートークン」のダブルチェックを突破しない限り、攻撃者はDBに指一本触れられません。

結論

  • パターンA(ユーザー委譲)は、「誰が」そのデータを操作してよいかをDB層まで伝えるために必要です。
  • パターンB(mTLS)は、「どのサーバー」同士なら会話してよいかという「土管」を証明書(マシンID)で作ります。

「固定ID/PW」を使っている現状から見ると、まずは「パターンB(mTLS/マイクロセグメンテーション)」を導入して、サーバー間の物理的な「見え方」を制限するところから始めるのが、既存システムへの影響が少なく、最も効果的な一歩になります。

この「エージェントによる通信の横取り(プロキシ方式)」という考え方は、イメージしにくい部分がありますでしょうか?

「内部ZTNA(エージェント/プロキシ型)」というモノを知らないので、どういうモノか解説してください。
その上で、「エージェントによる通信の横取り(プロキシ方式)」について、解説してください。
推測ですが、ネットワークレイヤーのどのレイヤーで何をやるのかを解説してくれると分かりやすいのではないかと思われます。

「内部ZTNA(エージェント/プロキシ型)」は、一言で言えば「サーバーやPCの中に、目に見えない通信の『関所』を設置する技術」です。

ユーザー様が推測された通り、OSI参照モデルのどのレイヤーで何をしているのかを紐解くと、その仕組みが非常にクリアになります。


1. 内部ZTNA(エージェント型)の正体

従来、通信の制御は「ルーターやファイアウォール(ネットワーク機器)」が行っていました。しかし、エージェント型ZTNAでは、「サーバーのOSの中に入れたソフトウェア(エージェント)」が通信をコントロールします。

  • エージェント: 各サーバー(WebやDB)にインストールされる常駐プログラム。
  • コントローラー(司令塔): どのサーバー同士が通信して良いかという「ポリシー」を管理し、各エージェントに指示を出すサーバー。

2. 通信の「横取り(インターセプト)」をレイヤーで解説

「エージェントによる横取り」が、具体的にネットワークのどの階層で行われているかを図解します。

通常、WebサーバーがDBにデータを送る時、パケットは「アプリケーション層(L7)」から「物理層(L1)」へと降りていきます。エージェントは、この途中の道筋を無理やり書き換えます。

レイヤー別の挙動

  1. アプリケーション層(L7): 【リクエスト発生】
  • Webアプリが「DBのIPアドレス(192.168.1.10)の1433番ポート」に接続しようとします。アプリ側は、従来通りの固定ID/PWをパケットに詰め込みます。
  1. セッション層 / トランスポート層(L5〜L4): 【横取り(インターセプト)】
  • ここでエージェントが介入します。OS内の「カーネル(通信の根幹)」「ネットワークスタック」という部分で、通信をキャッチします。
  • アプリが「外(DBサーバー)」に投げたつもりのパケットを、エージェントが自分自身の中に吸い込みます。これが「横取り」です。
  1. トランスポート層(L4): 【カプセル化とmTLS】
  • エージェントは、横取りした「固定ID/PW入りのパケット」を、別の封筒(mTLSによる暗号化トンネル)の中に丸ごと入れます(カプセル化)。
  • この時、前回の回答で触れた「サーバーの証明書」を付与します。
  1. ネットワーク層(L3): 【配送】
  • 封筒に入れられたパケットは、既存の社内ルーターやスイッチを通ってDBサーバーへ飛びます。この時、外側(L3)から見えるのは「エージェント同士の通信」だけで、中身の固定ID/PWやSQLの内容は見えません。

3. 「プロキシ(代理)」としての役割

なぜこれが「プロキシ方式」と呼ばれるかというと、「アプリの代わりにエージェントが通信を代行しているから」です。

  • Webサーバー側: アプリは「DBに繋いだ」と思っていますが、実際には「隣にいるエージェント」に渡しただけです。
  • DBサーバー側: 実際のDBソフトウェア(SQL ServerやOracleなど)は、ネットワークから通信を受け取ったと思っていますが、実は「隣にいるエージェント」から渡されただけです。

なぜわざわざこんなことをするのか? 最大の理由は、「アプリケーション(コード)を一切書き換えなくて済むから」です。 アプリケーションは10年前の古い「固定ID/PW」方式のままでも、エージェントが「現代的な最強の暗号化と認証(mTLS)」という防弾チョッキを着せてくれるのです。


4. 内部ZTNAを導入した後の世界

この仕組みを導入すると、サーバー群のネットワークは以下のように変わります。

項目導入前(境界防御のみ)導入後(内部ZTNAあり)
サーバーの見え方社内LANに繋がれば、全サーバーのIPが見える。認証されない限り、サーバーの存在すら見えない(応答しない)。
通信の許可「WebセグメントからDBセグメント」という面での許可。「Webサーバーのこのプロセスから、DBのこのポート」という点での許可。
ID/PWの漏洩漏洩したら、どこからでもアクセスされてしまう。たとえID/PWが正しくても、正規エージェント(証明書)がない端末からは拒否。

まとめ

「内部ZTNA(エージェント/プロキシ型)」とは、OSのネットワークスタック(L4/L5付近)で通信を横取りし、アプリには気づかせずに、裏側で高度な認証と暗号化を代行する仕組みのことです。

これにより、ユーザー様が懸念されていた「多数のシステム連携」がある環境でも、個々のアプリのコードを修正することなく、インフラ側でゼロトラスト化を完結させることができます。

ここまでの解説で、「エージェントがどうやって通信を掴まえているか」のイメージは湧きましたでしょうか? もし、導入にあたっての「パフォーマンス(遅延)」や「既存のADとの連携の具体例」など、さらに気になる点があればお聞かせください。

「アプリケーション(コード)を一切書き換えなくて済むから」というのは大変魅力的ですね。
パケットごとに【カプセル化とmTLS】で暗号化するのならば、「パフォーマンス(遅延)」は気になりますね。

「コードを書き換えずに、インフラ側でセキュリティを劇的に高める」というメリットの裏側で、パフォーマンス(遅延)への懸念は、ネットワークエンジニアやシステム担当者が必ず直面する最も重要なポイントです。

結論から申し上げますと、「若干のオーバーヘッドはあるが、現代のハードウェアと技術(eBPFやAES-NIなど)によって、ほとんどの業務システムで無視できるレベル(ミリ秒単位)」に抑えられています。

具体的に、どこで遅延が発生し、それをどう解決しているのかを詳しく解説します。


1. 遅延が発生する3つのポイント

パケットを横取りして処理する際、主に以下の3箇所で負荷がかかります。

  1. 暗号化・復号化の処理: パケットごとに数学的な計算(AESなど)を行うため、CPUリソースを消費します。
  2. カプセル化による「パケットの肥大化」: 元のパケットに「ZTNA用のヘッダー」を付け加えるため、パケットサイズが大きくなります。これにより、1回で送れるデータ量(MTU)を超えてしまい、パケットの分割(フラグメンテーション)が発生すると、遅延が目に見えて増えます。
  3. ユーザーモードとカーネルモードの行き来: OSの深い部分(カーネル)でパケットを掴み、アプリ(ユーザー空間)にあるエージェントに渡して処理する場合、この「データの受け渡し」自体がオーバーヘッドになります。

2. パフォーマンス低下を防ぐ「現代の工夫」

最新の内部ZTNA製品は、これらの課題を以下のような技術で解決しています。

① CPUによるハードウェアアクセラレーション(AES-NI)

現代のサーバー用CPU(Intel XeonやAMD EPYCなど)には、暗号化計算を高速に行うための専用回路「AES-NI」が組み込まれています。ソフトウェアで計算するのではなく、ハードウェアが直接処理するため、暗号化による遅延はマイクロ秒($10^{-6}$秒)単位まで抑えられています。

② eBPF(Linux)による高速な横取り

最近の高度なエージェントは、eBPFという技術を使います。これは、パケットを「エージェントというアプリ」に引き渡さず、OSのカーネル内で直接処理(横取り・暗号化)する仕組みです。

  • 従来: カーネル → エージェント(アプリ) → カーネル → ネットワーク
  • eBPF: カーネル内で完結 これにより、前述の「モードの行き来」による遅延を劇的に減らしています。

③ コネクションの使いまわし

毎回「証明書の交換(mTLSハンドシェイク)」を行うと非常に重くなります。そのため、一度確立した安全なトンネル(土管)は、一定時間維持して使い回します。2パケット目以降は、すでに開通した高速道路を走るだけなので、遅延は最小限になります。


3. 実務上の「影響が出るケース」と「出ないケース」

実際にどの程度気にするべきか、目安をまとめました。

  • 影響がほぼないケース(大半の業務システム):
  • Webブラウザベースのシステム(ERP, ワークフロー, 文書管理など)
  • 数ミリ秒〜数十ミリ秒の遅延が許容されるシステム
  • もともとネットワーク越しにDBを叩いている構成
  • 注意が必要なケース(要検証):
  • 超高頻度な小パケット通信: 1秒間に数万回のクエリを投げるようなリアルタイム性の高いDB連携。
  • 巨大なファイルの転送: 1回で数GBのデータを送る際、カプセル化によるMTUサイズの影響でスループットが低下することがあります。
  • 古いサーバー: CPUが古く、暗号化アクセラレーション(AES-NI)に対応していない場合。

4. 導入時に検討すべき「設計の勘所」

もしパフォーマンスが懸念される場合は、以下のアプローチを取るのが定石です。

1. ホワイトリストによる「スルー設定」 全ての通信をZTNAを通すのではなく、例えば「動画ストリーミング」や「バックアップ通信」など、信頼できる特定の巨大通信だけをZTNAの処理から除外(バイパス)するように設定します。 2. ネットワークに近い場所での集約(仮想アプライアンス) サーバー1台ずつにエージェントを入れず、サーバー群の「島」の入り口にある仮想マシンにプロキシ機能を持たせる(ゲートウェイ方式)ことで、個々のサーバーの負荷を避ける構成もあります。

まとめ

「カプセル化と暗号化」によるオーバーヘッドは確実に存在しますが、現代のサーバー環境では「セキュリティ向上」というメリットが「わずかな遅延」というデメリットを大きく上回ることがほとんどです。

特に、今回想定されているような「オンプレミス内のサーバー間連携」であれば、物理的な距離が近いため、インターネット越しのクラウド利用に比べれば、ZTNAを追加しても十分に快適なレスポンスを維持できる可能性が高いです。

現在の環境で、特に「レスポンスが極めてシビア(1ミリ秒以下の遅延も許されない)」なシステムや、巨大なデータ移動が発生する処理などは心当たりがありますか?もしあれば、その部分だけ別の対策を考えるという戦略も取れます。

だいたい理解できました、ありがとうございます。
長くなったので、次は、別の新しいチャットでクラウドのゼロトラストの質問をしたいと思います。

こちらこそ、丁寧にご質問いただきありがとうございました。

オンプレミス環境における「既存のシステム構成(固定ID/PWや複雑な連携)を活かしつつ、インフラ層でゼロトラスト化する」という、非常に実践的なイメージを共有できて良かったです。


今回のまとめ:オンプレミス・ゼロトラストの肝

  • 境界防御の限界: 「一度中に入れば安全」が通用しない現代では、内部での「横移動」を防ぐ必要がある。
  • 内部ZTNA(エージェント型): アプリケーションのコードを書き換えずに、OSレイヤーで通信を横取りし、mTLS(相互認証)ユーザートークンによる厳格な検証を代行する。
  • パフォーマンス: 現代のCPU(AES-NI)やカーネル技術(eBPF)により、暗号化による遅延は実用上問題ないレベルに抑えられている。

クラウドのゼロトラストへ向けて

クラウド環境(SaaS利用やAWS/Azureなど)におけるゼロトラストは、今回お話しした「サーバー間通信」の考え方に加え、「社外からのアクセス管理」「IDプロバイダ(IdP)を中心とした認証」がより重要になってきます。

別のチャットでのご質問、心よりお待ちしております!

補足

生成AIになにか質問したときは、最後に回答に満足したのかどうか、結論なり感想なり投げた方が良いようです。
Geminiはどうか分かりませんが、最新のClaudeの場合は過去の投稿を覚えていて、そのユーザーにどのような回答を出すのが相応しいか考えるようです。質問の回答を受ける度にその回答に満足したかどうかを生成AIに知らせてやらなければ、生成AIは今後どのような回答をユーザーが望むのか判断する事に迷うことになります。感想は返した方が良いと私は思います。

タイトルとURLをコピーしました