みなさんこんにちは!ネットワークの海を日々パケットと一緒に泳いでいる、セキュリティスペシャリストの私です。
社内のネットワークを守るために、これまで長年使われてきた「社内なら安全、社外なら危険」という境界型防御(いわゆる城壁モデル)。オフィスの外からアクセスする社員にはVPNという名の「専用トンネル」を用意していましたが、クラウドサービスの普及やリモートワークの常態化によって、その城壁はもうボロボロになってきていますよね。
そこで今、世界中のエンジニアが熱い視線を注いでいるのが「ゼロトラスト」、そしてその中心にある「ZTNA(ゼロトラストネットワークアクセス)」です。
「何も信頼せず、すべてを検証する」が合言葉のZTNAですが、その入り口で最も重要な役割を果たしているのが「SAML 2.0アサーションを用いたシングルサインオン(SSO)」です。
「なんだか英語ばかりで難しそう……」と思いましたか? 大丈夫です! 一歩ずつ、身近な例えを交えながら優しく紐解いていきましょう!
—
1. なぜZTNAにシングルサインオン(SSO)が必要なの?
これまでのVPNや古いシステムでは、社内システムにアクセスするたびにパスワードを求められたり、あちこちにバラバラのIDとパスワードが存在していましたよね。これでは、社員がメモにパスワードを書いて机に貼るような「セキュリティ事故の温床」になってしまいます。
そこで登場するのが、企業の「身分証明を一手に引き受けるお墨付きの機関」、エンタープライズIdP(アイデンティティプロバイダ:Microsoft Entra IDやOktaなど)です。
ZTNAの考え方では、社内リソース(業務アプリなど)にアクセスする前に、「あなたは本当にその会社の一員ですか?」「多要素認証(スマホの通知確認など)は済ませましたか?」を厳格にチェックします。この身元確認を毎回バラバラのアプリで行うのではなく、IdPに一度だけログイン(SSO)して、その「お墨付き(証明書)」を他のシステムにも使い回そう、というのが今回のテーマの核心です。
—
2. 郵便配達員で例える「SAML 2.0」の認証フロー
この「お墨付き」を安全にやり取りするための世界標準の仕組みがSAML 2.0(Security Assertion Markup Language)です。
仕組みをパケットの往来としてそのまま見ると頭がクラクラしてしまうので、身近な「書留郵便」に例えてみましょう。
あなたが会社の重要なお部屋(ZTNAで守られた社内アプリ)に入ろうとしています。入り口には厳重な警備員(ZTNAゲートウェイ)が立っています。
1. アクセス要求(「中に入りたいです」)
あなたが直接お部屋に行こうとすると、警備員が「おっと、身分証を見せてください」と止めます。
2. IdPへのお引渡し(「あの人のところに行って証明をもらってきて」)
警備員はあなたを、身分証明の専門家である「IdP(エンタープライズIdP)」の窓口へ案内します。
3. IdPでの本人確認(「パスワードとスマホの通知をどうぞ」)
IdPの窓口で、あなたはIDとパスワード、そしてスマホを使った多要素認証(MFA)をクリアします。
4. SAMLレスポンス(アサーション)の発行(「封筒に入った証明書を渡します」)
無事に本人確認が取れると、IdPは「この人は間違いなく我が社の〇〇部員の山田さんです」というお墨付きの書類(これがSAMLアサーションです)を作成します。そして、誰にも中身を書き換えられないように、IdPの「公印(デジタル署名)」をしっかりと押して封をします。
5. アサーション消費プロセス(「開封の儀」)
あなたは、その封筒を抱えて再びZTNAゲートウェイの警備員のもとへ戻ります。警備員は封筒の「公印」を確認し、「なるほど、IdP様が本物だと言っているな。よし、中に入りなさい!」と扉を開けてくれます。
この一連の流れが、Webブラウザの裏側でコンマ数秒のうちに行われています。
—
3. ZTNAゲートウェイで行われる「検証」の裏側
警備員(ZTNAゲートウェイ)が受け取る封筒(SAMLレスポンス)の中身を、もう少しエンジニアの視点で覗いてみましょう。ここには、安全性を担保するための重要な技術が詰まっています。
① 署名アルゴリズムのチェック
IdPが押した「公印」が偽物ではないか、改ざんされていないかを検証します。近年では、より安全性の高い RSA-SHA256 や ECDSA といった暗号署名アルゴリズムが使われます。もし途中で悪意ある第三者がパケットを覗き見して中身を書き換えようものなら、この署名チェックで一発レッドカード(アクセス拒否)になります。
② 有効期限と対象の確認(アサーション消費)
SAMLアサーションには、「いつ発行され、いつまで有効か」というタイムスタンプ(NotOnOrAfter など)が必ず含まれています。古い使い回しの証明書ではないかをゲートウェイが厳しくチェックします。これを専門用語で「アサーション消費(Assertion Consumption)」と呼びます。
—
4. 実務で役立つ!IdPとZTNAゲートウェイの設定サンプル
では、実際に企業のシステムを構築する際、どのような設定が行われているのでしょうか。ここでは、概念を理解しやすいように、SAML連携を行う際の設定ファイルのイメージ(メタデータの概念)をコードブロックでご紹介します。
以下の設定は、IdPから受け取った情報をZTNA側がどのように信頼するかの定義例です。
<!-- ZTNAゲートウェイ側で読み込ませるIdPメタデータの概念設定例 -->
<EntityDescriptor ID="EnterpriseIdP_Gateway" entityID="https://idp.example.com/oauth2/default">
<!-- IdPの証明書情報(署名を検証するための公開鍵) -->
<SPSSODescriptor AuthnRequestsSigned="true" WantAssertionsSigned="true">
<KeyDescriptor use="signing">
<KeyInfo>
<X509Data>
<!-- ここにIdP固有の信頼できる証明書(PEM形式)の文字列が入ります -->
<X509Certificate>MIIDDTCCAfWgAwIBAgIJAJ... (中略) ...Q==</X509Certificate>
</X509Data>
</KeyInfo>
</KeyDescriptor>
<!-- 認証成功後にSAMLレスポンスをPOSTで受け取る宛先URL (ACS URL) -->
<AssertionConsumerService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST"
Location="https://ztna-gateway.example.com/sso/callback"
index="1"/>
</SPSSODescriptor>
</EntityDescriptor>
💡 現場でよくあるトラブルシューティングのコツ
もしSAML認証のテスト中に「ログインループになってしまう」「Invalid Signature(無効な署名)と言われる」といったトラブルに遭遇したら、以下のポイントを真っ先に疑ってみてください。
1. 時刻のズレ(NTPの不一致)
IdPサーバーとZTNAゲートウェイの時計が数秒でもズレていると、SAMLアサーションの有効期限チェック(NotBefore / NotOnOrAfter)で弾かれてしまいます。必ず両方のサーバーでNTP(時刻同期)が正しく動いているか確認しましょう。
2. 証明書の有効期限切れや更新漏れ
IdP側で署名用証明書がローテーション(更新)されたにもかかわらず、ZTNAゲートウェイ側のトラストストア(信頼する証明書のリスト)が古いままになっているケースは、現場あるあるの定番トラブルです。
—
5. おわりに:境界型防御からゼロトラストの扉を開こう
いかがでしたでしょうか?
「SAML 2.0アサーションを用いたZTNAのSSO認証フロー」と聞くと、アルファベットの羅列で頭が痛くなりそうですが、「会社が認めた身分証明の専門家(IdP)から、改ざん防止の公印付きの封筒(アサーション)をもらい、それを入り口の警備員(ZTNAゲートウェイ)に見せて中に入る」という仕組みの本質は、私たちの現実世界のセキュリティとまったく同じです。
初学者のうちは、パケットの細かいXMLタグやバイナリの構造をすべて暗記する必要はありません。まずは「データがどこを通り、誰が誰の身元をどうやって保証しているのか」という全体のストーリー(ライフサイクル)をイメージできるようになることが、凄腕エンジニアへの一番の近道です。
さあ、古い境界型防御の殻を脱ぎ捨てて、安全でスマートなゼロトラストの世界へ一歩を踏み出してみませんか?
次回の記事では、認証を通過したあとに動く「マイクロセグメンテーションとポリシー制御のリアル」について深掘りしていきたいと思います。お楽しみに!
コメント