cybozu.com の SAML 認証のための AD FS 2.0 導入

こんにちは。社内インフラ担当の川上です。

今回はサイボウズ社内から cybozu.com の SAML 認証を利用するために、社内に AD FS 2.0 を導入した事例について紹介します。

SAML 認証とは

Security Assertion Markup Language (SAML) とは、異なるセキュリティドメイン間で認証情報を連携するための、XML ベースの標準仕様です。

この定義だけではおそらく意味がよくわからないと思いますので、SAML 認証を説明する際によく使われる例を挙げます。

パスポートによる入国のシナリオ:

  1. アメリカ合衆国は、日本国を信頼している (前提条件)。
  2. 日本人の A さんは、日本国が発行したパスポートを持っている (= 日本国により本人確認済み)。
  3. A さんが、アメリカ合衆国に対して入国許可を求める。
  4. アメリカ合衆国は、A さんのパスポートを確認し、入国を許可する。

passport

つまり、A さんはアメリカ合衆国から直接本人確認される代わりに、発行元が信頼されたパスポートによって入国を許可されるというわけですね。

このような「身分証明証を利用した間接的な本人確認の仕組み」を技術的に応用したものが、SAML 認証です。

AD FS 2.0 とは

Active Directory Federation Services (AD FS) 2.0 とは、AD で SAML 認証を実現するためのサービスです。SAML 認証の用語では、Identity Provider (IdP) に相当します。

Office 365 で SSO を実現するために組織内に AD FS 2.0 を導入するのが、最もポピュラーな使われ方だと思います。

AD FS 2.0 社内導入の経緯

サイボウズでは、社員が日々の業務を行なう上で自社製品を使い倒しています。正式リリース前のバージョンも必ず自社の本番環境に先行導入し、使い勝手を評価したりバグ報告することにより、品質向上に繋げています。いわゆる Dogfooding ですね。

cybozu.com が SAML 認証に対応したときも、SAML 認証を自分達で利用することは当然の流れでした。社内導入の際の要件で IdP は AD FS 2.0 が指定され、AD 周り全般に関しては私にお鉢が回ってきました。

なお、開発に関しては SAML 認証ができるまで をご覧ください。

AD 環境の設計方針

サイボウズ社内には数年前に導入された AD 環境が存在し今も使われていますが、目的や構成が AD FS 2.0 を想定したものではありません。

そこで、今回は既存 AD 環境はそのままにしておき、別途新規に AD 環境を構築することにしました。設計方針は下記の通りです。

  • シンプルに 1 フォレスト 1 ドメイン構成。
  • フォレスト間の信頼関係は結ばない。

AD 環境の構成

サーバーは合計 4 台用意しました。

各サーバーに共通の構成情報です。

  • マシン
    • ESXi の VM
  • OS
    • Windows Server 2008 R2 Enterprise

各サーバーの主な役割およびその他の役割です。

  • ドメインコントローラ (フォレストルートドメイン)
    • グローバルカタログ
    • DNS
  • ドメインコントローラ
    • グローバルカタログ
    • DNS
  • 証明書サービス (ルート CA、エンタープライズ CA)
    • ドメインコントローラ
  • AD FS 2.0
    • ドメインコントローラ

AD FS 2.0 に関する情報源

そもそも私自身 AD FS 2.0 に触れるのは今回が初めてでしたので、まずは基礎的な概念を把握するところから始めました。その後、テスト環境を構築し検証する過程でこちらの意図した動作にならないことが何度かあり、トラブルシューティングの事例を参考にするなどしてその都度解決していきました。

今回お世話になった情報源をいくつか挙げておきます。

AD FS 2.0 と cybozu.com の連携

SAML 認証を使用したシングルサインオンを設定する に従って、AD FS 2.0 と cybozu.com を SAML 認証で連携するよう設定しました。この段階で何らかのエラーが発生した際は、SAML 認証のトラブルシューティング を参考にしました。

AD ユーザーの一括作成

「Active Directory ユーザーとコンピューター」を使って全ユーザーを手作業でちまちま作成するのは時間と労力の無駄なので、機械的に一括作成することにしました。

その際、dsadd コマンドを使ってもよかったのですが、個人的に PowerShell の方がわかりやすく管理しやすいので、make-ad-user.ps1 という PowerShell スクリプトを書きました。ユーザー情報を記述した CSV ファイルを読み込んで、ユーザーの作成と初期パスワードの設定を行なうスクリプトです。

make-ad-user.ps1

$userlist = Import-CSV $args[0]

foreach ($line in $userlist) {
    $name     = $line.Name
    $password = $line.Password
    $upn      = $name + "@example.com"
    $path     = "OU=Employees,DC=example,DC=com"

    New-ADUser `
        -Name $name `
        -DisplayName $name `
        -UserPrincipalName $upn `
        -Path $path `
        -ChangePasswordAtLogon $false `
        -PasswordNeverExpires $true `
        -AccountPassword (ConvertTo-SecureString -AsPlainText $password -Force) `
        -Enabled $true
}

CSV ファイルの書式は下記の例の通りです。実際のファイルでは、cybozu.com 共通管理からエクスポートしたユーザー名と、Linux の mkpasswd コマンドで自動生成したパスワードを組合せました。

user-list.csv

Name,Password
alice,duv9sj2c
bob,tgcxh47v
carol,c6qumsr3

まとめ

この記事では、cybozu.com の SAML 認証を目的とした AD FS 2.0 導入について、サイボウズ社内の事例を元に簡単に紹介しました。SAML 認証や AD FS 2.0 に興味のある方や導入を検討されている方の参考になれば幸いです。