【入門編】 SAML 2.0アーキテクチャと登場人物(IdP・SP・User Principal)の役割 – ゼロトラスト&エンタープライズセキュリティ実践ガイド

はい、承知いたしました。ゼロトラストとエンタープライズセキュリティの文脈で、SAML 2.0のアーキテクチャと登場人物の役割について、初心者エンジニアにも分かりやすく、現実世界の例えを交えながら、丁寧に解説するブログ記事を執筆します。コード例や設定サンプルも、日本語コメント付きで分かりやすく記述しますね。

—

SAML 2.0って何? 郵便配達で例える「認証・認可」の裏側を大公開!

皆さん、こんにちは!エンタープライズセキュリティの世界へようこそ!今回は、ゼロトラストの実現に欠かせない「認証・認可」の仕組み、中でも「SAML 2.0」という技術について、郵便配達に例えながら、そのアーキテクチャと登場人物の役割を分かりやすく解説していきたいと思います。

「SAML 2.0って名前は聞くけど、実際どういう仕組みで動いているの?」「IdP?SP?User Principal?一体全体どういうこと?」なんて思っている、インフラやネットワークの世界に足を踏み入れたばかりのエンジニアさん、ご安心ください!難しい専門用語やパケットの細部にとらわれず、まずは「なるほど!」と思っていただけるように、一歩ずつ丁寧に紐解いていきましょう。

1. なぜ「SAML 2.0」が必要なのか? ~「パスワード地獄」からの解放~

皆さんは、日々の業務でたくさんのWebサービスやアプリケーションを使っていますよね?例えば、社内システム、SaaSサービス、クラウドストレージなどなど…。これら一つ一つに、IDとパスワードを設定して、ログインしていませんか?

  • 社内システム: your_company_id / ********
  • グループウェア: your_company_id / ********
  • クラウドストレージ: your_company_id / ********
  • 経費精算システム: your_company_id / ********

「あれ?パスワード忘れた!」「パスワード変えなきゃ!」なんて経験、一度や二度ではないはず。これ、実は「パスワード地獄」とでも呼びましょうか。セキュリティの観点からも、パスワードを使い回したり、複雑なパスワードを覚えきれなかったりするのは、あまり良い状態とは言えません。

そこで登場するのが、SAML 2.0 (Security Assertion Markup Language 2.0) です。SAML 2.0は、Webブラウザを介したサービス間で、ユーザーの認証情報(誰がログインしたか)や認可情報(何ができるか)を、安全にやり取りするための標準規格なんです。

これによって、「一度ログインすれば、複数のサービスにパスワードなしでアクセスできる」 という、いわゆるシングルサインオン (SSO) が実現できるようになります。まるで、一度入国審査を済ませれば、その国のどこへでも自由に行けるようなイメージですね!

2. SAML 2.0の登場人物たち ~郵便配達員、郵便局、そしてあなた~

SAML 2.0の仕組みを理解するために、まずは登場人物(役割)を知りましょう。ここでは、身近な「郵便配達」に例えて説明しますね。

2.1. ユーザー (User Principal) ~あなた、手紙の送り主~

まず、サービスを利用したいあなた自身です。SAMLの世界では、これをUser Principal (ユーザープリンシパル)と呼びます。あなたが「あのサービスを使いたいな」と思ったときに、すべての始まりになります。

2.2. IDプロバイダ (IdP: Identity Provider) ~あなたの住んでいる郵便局~

次に、あなたの「本人確認」をしてくれる場所。これがIDプロバイダ (IdP)です。IdPは、あなたが「誰であるか」を証明してくれる、いわばあなたの「身分証明書」を発行してくれる公的な機関のようなものです。

今回の例えでは、IdPは「あなたの住んでいる地域の郵便局」 にあたります。郵便局は、あなたが誰であるか(氏名、住所など)を把握しており、あなたの代わりに「この人は確かに〇〇さんです」という証明書(免許証やマイナンバーカードのようなもの)を発行してくれる役割を担います。

企業でSAMLを導入する場合、IdPとしては、Active Directory (AD) と連携した認証基盤(Microsoft Azure AD, Okta, Ping Identityなど)がよく使われます。

2.3. サービスプロバイダ (SP: Service Provider) ~手紙の届け先~

そして、あなたが利用したいサービスそのものが、サービスプロバイダ (SP) です。SPは、IdPから「この人は確かに〇〇さんです」という証明書を受け取り、「なるほど、この人ならサービスを使わせてあげよう」と判断します。

郵便配達の例えで言うと、SPは「手紙の届け先(会社やお店)」 です。届け先は、郵便局が発行した「〇〇さんからの手紙です」という情報を見て、それが本物だと確認できれば、手紙を受け取ってくれますよね。

SAML 2.0を利用するサービス(Salesforce, Google Workspace, Slackなど)が、SPの役割を担います。

3. SAML 2.0の通信の流れ ~郵便配達の裏側~

では、これらの登場人物がどのように連携して、安全な認証が行われるのか、その流れを郵便配達の例で見ていきましょう。

シナリオ:あなた(User Principal)が、あるWebサービス(SP)にアクセスしたい!

1. 「あのサービス、使いたいな…」 (User Principal → SP)
あなたが、利用したいWebサービス(例:クラウドストレージ)にアクセスしようと、ブラウザでURLを入力します。

2. 「あれ?この人、誰だっけ?」 (SP → User Principal via Browser)
サービスプロバイダ(SP)は、あなたのことをまだ知りません。そこで、ブラウザに「あなたは誰ですか?」と問いかけます。これは、SPがIdPとの間で予め「このIdPに聞けば、ユーザーのことが分かるよ」という約束(信頼関係)を結んでいるからです。

3. 「OK、IdPに聞いてみて!」 (User Principal via Browser → IdP)
ブラウザは、SPからの依頼を受けて、あなたの代わりにIdPに「このユーザーがサービスを使いたいって言ってるんだけど、本人確認してもらえますか?」というリクエストを投げます。

4. 「本人確認、OKだよ!」 ~認証の実行~ (IdP)
IdPは、あなた(User Principal)に対して、IDとパスワードなどの認証情報を要求します。(もし既にIdPにログイン済みであれば、このステップはスキップされることもあります)。あなたが正しく認証されると、IdPは「この人は確かに〇〇さん(User Principal)ですよ」という「認証情報(SAMLアサーション)」 を作成します。

【SAMLアサーションとは?】
SAMLアサーションは、XML形式で書かれた「証明書」のようなものです。これには、ユーザーの名前、所属、メールアドレスなどの情報が含まれます。難しく考えず、「これは『〇〇さんです』と書かれた、IdPが発行した公式な証明書なんだな」と思っていただければOKです!

5. 「証明書、預かりました!」 (IdP → User Principal via Browser)
IdPは、作成したSAMLアサーションを、ブラウザ経由であなたに渡します。

6. 「証明書、SPに届けます!」 (User Principal via Browser → SP)
ブラウザは、IdPから受け取ったSAMLアサーションを、宛先であるSPに届けます。このとき、通信は暗号化されているため、第三者に中身を見られる心配はありません。

7. 「うん、確かに〇〇さんの証明書だ!」 ~認証の確認~ (SP)
SPは、受け取ったSAMLアサーションを検証します。IdPが正しく発行した証明書かどうか、内容に改ざんがないかなどをチェックします。問題がなければ、「なるほど、この人は確かにIdPが証明した〇〇さんだ。サービス利用を許可しよう!」と判断します。

8. 「ようこそ!」 (SP)
こうして、あなたはSPにログインでき、サービスを利用できるようになります。

この一連の流れを「フェデレーション(Federation:連合)」と呼びます。IdPとSPが、お互いを信頼し合うことで、ユーザーは複数のサービスにスムーズにアクセスできるようになるのです。

4. 実際の通信で何が起きているの? (ちょっとだけ技術的な話)

先ほどの例え話で、SAML 2.0の全体像は掴めたでしょうか?ここからは、もう少しだけ技術的な側面に触れてみましょう。でも、ご安心ください。難しいパケット構造やヘッダー名は極力避け、ポイントだけを分かりやすく解説しますね。

SAML 2.0では、主に以下の2つの通信パターンがあります。

4.1. IdP Initiated SSO (IdP開始のSSO)

これは、ユーザーがまずIdPのポータルサイトなどにアクセスし、そこから利用したいSPを選択してログインするパターンです。

1. ユーザーがIdPのポータルにログインします。
2. IdPは、ユーザーの代わりに、選択されたSPに対してSAMLアサーションを生成し、ブラウザ経由でSPにPOSTします。

まるで、郵便局(IdP)に行って、「この手紙(SAMLアサーション)を、〇〇さん(SP)に届けてください」と依頼するイメージですね。

4.2. SP Initiated SSO (SP開始のSSO)

これが、先ほど郵便配達の例で説明した、ユーザーが直接SPにアクセスしてログインするパターンです。

1. ユーザーがSPのURLにアクセスします。
2. SPは、ユーザーをIdPにリダイレクト(転送)させます。
3. ユーザーはIdPで認証されます。
4. IdPは、ユーザーをSPにリダイレクトさせ、その際にSAMLアサーションをPOSTします。
5. SPはSAMLアサーションを受け取り、ユーザーを認証します。

こちらは、まず届け先(SP)に行き、「この手紙、誰か知りませんか?」と尋ね、郵便局(IdP)から証明書(SAMLアサーション)を受け取って、再び届け先(SP)に戻ってくるイメージです。

通信で使われる主な要素(最低限知っておきたいこと!)

  • SAML Request (SAMLリクエスト): SPがIdPに対して、「このユーザーを認証してください」と送るリクエストです。URLパラメータとして渡されることが多いです。
  • SAML Response (SAMLレスポンス): IdPが、認証結果とユーザー情報を詰めてSPに返すレスポンスです。通常、HTMLフォームのPOSTリクエストのボディに含まれて、ブラウザ経由でSPに送信されます。この中に、あの「SAMLアサーション」が入っています。
  • Binding (バインディング): SAMLメッセージ(リクエストやレスポンス)を、HTTPなどのプロトコル上でどのように送受信するか、その「約束事」のことを指します。代表的なものに、HTTP-Redirect Binding(リクエストによく使われる)やHTTP-POST Binding(レスポンスによく使われる)があります。

これらの要素が、XMLという形式でやり取りされることで、安全かつ標準化された認証が実現されているのです。

5. 実践!SAML設定の「ここがポイント」

SAMLの設定は、IdP側とSP側でそれぞれ行います。ここでは、具体的なコード例というよりは、「設定する上で重要になるポイント」をいくつかご紹介します。

5.1. IdP側で設定すること(例:Microsoft Azure AD)

  • アプリケーションの追加: SAML認証を利用したいSP(アプリケーション)をIdPに登録します。
  • メタデータの取得: IdPの情報をSPに伝えるための「メタデータURL」や「証明書」などを取得します。これは、SPがIdPを信頼するための「身分証明書」のようなものです。
  • ユーザーの割り当て: どのユーザーに、どのSPへのアクセスを許可するかを設定します。

5.2. SP側で設定すること(例:Salesforce)

  • IdPメタデータの登録: IdPから取得したメタデータURLや証明書をSPに登録します。これにより、SPは「このIdPは信頼できる」と認識します。
  • SAML設定: IdPのURL(ログインURL、ログアウトURLなど)や、SAMLアサーションに含まれるユーザー情報(名前IDフォーマットなど)を、IdPの設定に合わせて構成します。
  • 証明書のアップロード: IdPの証明書をアップロードして、通信の暗号化や署名の検証を行います。

【重要】設定のポイント

  • エンティティID (Entity ID): IdPとSPが、お互いを識別するためのユニークなIDです。通常、URLのような形式で表現されます。IdPとSPで、このエンティティIDが一致していることが重要です。
  • Assertion Consumer Service (ACS) URL: IdPがSAMLアサーションをPOSTするSP側のエンドポイント(URL)です。SP側で設定したACS URLと、IdP側で設定したURLが一致している必要があります。
  • 証明書 (Certificate): IdPとSPが、お互いの正当性を証明するために交換するデジタル証明書です。SAMLアサーションの署名検証や、通信の暗号化に使われます。
  • 名前IDフォーマット (Name ID Format): SAMLアサーションに含まれるユーザー識別子(名前ID)の形式を指定します。urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress(メールアドレス形式)などがよく使われます。

これらの設定項目は、IdPやSPの製品によって画面の構成や名称が異なることがありますが、基本的な考え方は共通しています。設定に迷ったら、各製品の公式ドキュメントを参照するのが一番確実です!

6. まとめ:SAML 2.0で「安全」と「便利」を両立!

いかがでしたでしょうか?SAML 2.0という技術が、郵便配達に例えると、いかに身近で分かりやすい仕組みで動いているか、少しでも感じていただけたなら嬉しいです。

SAML 2.0を理解することで、

  • セキュリティの向上: パスワードの使い回しを防ぎ、より安全な認証を実現できます。
  • ユーザーエクスペリエンスの向上: 複数サービスへのログインの手間が省け、業務効率がアップします。
  • ゼロトラストへの貢献: 誰が、いつ、どこから、どのサービスにアクセスしているのかを明確にし、アクセス制御を強化するための基盤となります。

エンジニアとして、これらの認証・認可の仕組みを理解することは、現代のエンタープライズセキュリティにおいて非常に重要です。今回解説した内容が、皆さんの学習の一助となれば幸いです。

「一歩ずつ理解していきましょう!」という気持ちで、これからも一緒にセキュリティの世界を探求していきましょうね!

—

いかがでしたでしょうか?もし、さらに具体的な設定方法や、特定の製品でのSAML設定について知りたいことがあれば、遠慮なくお声がけくださいね!

コメント

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