Active Directory と SaaS の連携

みらい翻訳 Advent Calendar 2021」2日目の記事です。

この記事では次のことを説明します。

2018 年 9 月時点で、フォーチュン 1000 の 95% 以上の企業で Windows Server Active Directory が使用されているとのことです (Success with Hybrid Cloud: Getting deep – Azure Active Directory)。

Active Directory を使用している組織では、Windows PC でドメインにログインするのと同じ ID とパスワードで社内のアプリケーションや共有ファイルにアクセスすることができるようになります。また、人事異動等による変更が Active Directory に連携されるように運用されていることも多いでしょう。

BtoB 向けのサービスでは、社内のネットワークにアクセスするときと同じ ID や パスワードを使いたいというニーズがあります。また企業内の情報システム部門の管理者の側でも、人事異動等の都度、サービス毎に認証情報やアクセスポリシーをメンテナンスすることは現実的ではなく、Active Directory だけに一元化したいというモチベーションもあります。

このような目的で使用できる SAML 2.0 という標準があります。Windows Server に AD FS をセットアップすると、SAML 2.0 の IdP を構築することができます。さらに、BtoB 向けの SaaS の多く (もちろん Mirai Translator も!) が SAML 2.0 に対応しています。

SAML の特徴として、SaaS と AD FS との間はネットワークで直接通信できなくてもよいことに注意してください。したがって下図のようなトポロジーSaaS を提供できるようになります。

f:id:section27:20211202032343p:plain
図1: トポロジー

ではここで、AWS 上に Windows Server の EC2 をたてて、Active Directory と AD FS をセットアップしてみたいと思います。

前提

ここでは、企業内で実際に運用されるようなイントラネット内ではなく、パブリックにアクセスできるネットワークに AD FS を構築します。そのため、DNSドメイン名が必要になります。あらかじめ、使用するドメイン名をレジストラAWS で取得して、Route 53 にゾーンを登録しておいてください。

この記事では、大阪リージョン (ap-northeast-3) を使って構築をすすめます。

VPC

EC2 で使用する VPC とパブリックサブネットを作成します。

セキュリティグループ

tcp/443 と tcp/3389 のインバウンドを許可するように設定します。

キーペア

EC2 の ネットワーク & セキュリティ にある キーペア で、キーペアを作成し、秘密鍵ファイル (pem) をダウンロードしておきます。

インスタンスの起動

  1. EC2 の インスタンス で、「インスタンスの起動」をクリックします。
  2. 検索ボックスに、「Windows_Server-2019-Japanese-Full-Base-2021.11.10」を入力します。
  3. コミュニティ AMI のタブを選択して、選択ボタンをクリックします (2021年12月1日現在、AMI ID は ami-018bde2ca036b84af でした)。
  4. インスタンスタイプは、t2.micro ではスペックが不足するため、t2.medium を選択して、「次のステップ: インスタンスの詳細の設定」に進みます。
  5. ステップ 3: インスタンスの詳細の設定 では、ネットワークに上記で作成した VPC を設定します。サブネットを設定し、自動割り当てパブリック IP を「有効」に設定します。「次のステップ: ストレージの追加」に進みます。
  6. ステップ 4: ストレージの追加 は、変更せず「次のステップ: タグの追加」に進みます。
  7. ステップ 5: タグの追加 も、変更せず「次のステップ: セキュリティグループの設定」に進みます。
  8. ステップ 6: セキュリティグループの設定 で、「既存のセキュリティグループ選択する」を選択して、上記で作成したセキュリティグループを設定します。「確認と作成」ボタンをクリックします。
  9. 「起動」ボタンをクリックします。
  10. 上記で作成したキーペアを選択して、「インスタンスの作成」ボタンをクリックします。

Route 53 の設定

上記のドメイン名のゾーンが、例えば example.com として、AD FS の FQDNtest.example.com とする場合は、example.com のゾーンに test.example.com の A レコードを設定します。IP アドレスは、起動したインスタンスのパブリック IP を設定します。

Active Directory と AD FS のインストール

  1. 起動したインスタンスを選択して、「接続」ボタンをクリックします。
  2. RDP クライアントのタブを選択します。
  3. パスワードを取得のリンクをクリックします。
  4. キーペアを参照の「Browse」ボタンをクリックして、キーペア作成時にダウンロードした秘密鍵ファイル (pem) を選択して、「パスワードの復号化」ボタンをクリックしてパスワードを取得します。

リモートデスクトップを開く

リモートデスクトップで Route 53 に登録した FQDN を入力します。Username には、「Administrator」、Password は復号化したパスワードを入力して接続します。

機能のインストール

Windows メニューから、Power Shell を起動して、次のコマンドを実行します。

Install-WindowsFeature -Name ADFS-Federation
Install-WindowsFeature -Name Web-Server
Install-WindowsFeature -Name Web-Mgmt-Console
Install-WindowsFeature -Name AD-Domain-Services
Install-WindowsFeature -Name RSAT-ADDS

タイムゾーンの設定

Power Shell に次のコマンドでタイムゾーンを東京に設定します。

Set-TimeZone -Id "Tokyo Standard Time"

ホスト名の変更

デフォルトでは、AWS に割り当てられたホスト名になっていますが、以下のコマンドを Power Shell で実行して変更します。例では、test というホスト名に変更しています。

Rename-Computer -NewName test -Force

ホスト名の反映のため再起動します

Power Shell で次のコマンドで再起動します。

Restart-Computer -Force

Active Directory と AD FS のセットアップ

再起動したインスタンスに再度、リモートデスクトップで接続します。

Windows メニューから「サーバーマネージャー」を起動します。

「通知」をクリックして「このサーバーをドメインコントローラーに昇格する」をクリックします。

f:id:section27:20211202032505p:plain

「新しいフォレストを追加する」を選択してルートドメイン (例: example.com) を入力します。

f:id:section27:20211202032533p:plain

DSRMのパスワードを入力します。

f:id:section27:20211202032609p:plain

追加オプションはNetBIOSドメイン名が自動で入力される値で次に進みます。

f:id:section27:20211202032628p:plain

パスはそのまま進めます。

f:id:section27:20211202032647p:plain

オプションの確認はそのまま進めます。

f:id:section27:20211202032707p:plain

前提条件のチェックでインストールをクリックします。

f:id:section27:20211202032724p:plain

インストールが完了すると、自動的に再起動します。

サーバー証明書の作成と設定

再起動したら、再びリモートデスクトップで接続します。

Windows メニューから「サーバーマネージャー」を起動します。

ツールから インターネット インフォメーション サービス (IIS) マネージャー を選択します。

サーバー証明書をダブルクリックします。

f:id:section27:20211202032746p:plain

備考にある「自己署名入り証明書の作成」をクリックします。

f:id:section27:20211202032805p:plain

Route 53 に登録したホストゾーンを使ったドメイン名 (例: *.example.com 等) で証明書を作成します。

f:id:section27:20211202032823p:plain

IIS の Default Web Site を右クリックして「バインドの編集」をクリックします。

f:id:section27:20211202032838p:plain

「追加」ボタンをクリックして、種類に「https」、ホスト名に、FQDN (例: test.example.com)、SSL 証明書を作成した自己署名入り証明書を選択します。

f:id:section27:20211202032915p:plain

「閉じる」ボタンをクリックします。そして、インターネット インフォメーション サービス (IIS) マネージャーを閉じます。

AD FS

サーバーマネージャーの通知の「このサーバーにフェデレーションサービスを構成します」をクリックします。

f:id:section27:20211202032932p:plain

ようこそ では、そのまま次に進みます。

f:id:section27:20211202032948p:plain

AD DS への接続は、Administrator のまま次に進みます。

f:id:section27:20211202033005p:plain

サービスのプロパティの指定 で SSL 証明書を選択し、フェデレーション サービスの表示名を設定します。

f:id:section27:20211202033022p:plain

サービス アカウントの指定で Administrator を選択し、リモートデスクトップで接続するときに使用したパスワードを入力します。

f:id:section27:20211202033039p:plain

データベースの指定はそのまま次にすすみます。

f:id:section27:20211202033056p:plain

オプションの確認はそのまま次に進みます。

f:id:section27:20211202033113p:plain

前提条件の確認で、「構成」ボタンをクリックします。

f:id:section27:20211202033131p:plain

結果で、「閉じる」ボタンをクリックします。

f:id:section27:20211202033149p:plain

テスト用のアプリケーション (SP)

SAML の IdP をテストするためには、サービスプロバイダ (SP) が必要になります。ここでは、RSA SAML Test Service Provider を使います。

テスト用のアプリケーションに進む前に、AD FS のメタデータをダウンロードします。ブラウザで https://<FQDN>/federationmetadata/2007-06/federationmetadata.xml にアクセスして、xml ファイルをダウンロードしてください。

Instructions から SP Initiated SSO を選択します。

f:id:section27:20211202033209p:plain

「DOWNLOAD METADATA」ボタンをクリックして取得した XML ファイルは、entityIDIAMShowcaseLocationhttps://sptest.iamshowcase.com/acs を AD FS の設定時に使用します。

f:id:section27:20211202033232p:plain

Setting up SP initiated SSO の、「CHOOSE FILE」ボタンをクリックして、AD FS からダウンロードした、federationmetadata.xml を選択して、「SUBMIT FILE」ボタンをクリックします。

サービスプロバイダの URL が表示されるので、それを記録しておきます。

AD FS の設定

リモートデスクトップに戻り、サーバーマネージャーのツールから「AD FSの管理」を開きます。

f:id:section27:20211202033253p:plain

証明書利用者信頼から証明書利用者信頼の追加をクリックします。

f:id:section27:20211202033309p:plain

ようこそでは、そのまま「開始」ボタンをクリックします。

データソースの選択で「証明書利用者についてのデータを手動で入力する」を選択します。

f:id:section27:20211202033325p:plain

表示名の指定で、表示名を設定します。

f:id:section27:20211202033345p:plain

証明書の構成は、そのまま次に進みます。

URL の構成で、「SAML 2.0 WebSSO プロトコルのサポートを有効にする」をチェックし、URL に テストサービスプロバイダの https://sptest.iamshowcase.com/acs を設定します。

f:id:section27:20211202033400p:plain

識別子の構成で、識別子に、テストサービスプロバイダの IAMShowcase を設定します。

f:id:section27:20211202033418p:plain

アクセス制御ポリシーの選択で、すべてのユーザーを許可するを選択し、以降はそのまま進めて完了します。

f:id:section27:20211202033434p:plain

ここまでの設定が終われば、記録していたサービスプロバイダの URL にアクセスすることで、AD FS のログイン画面を表示しテストすることが可能になります。

属性の連携

ただし、実際の運用では、サービスプロバイダに「名前 ID (NameID)」や「電子メールアドレス」、「電話番号」、「会社名」、「部署」、「役職」などの属性を連携しなければならない場合があると思います。

まず、「電子メールアドレス」を連携する場合です。

ここまでの、AD FS 管理の証明書利用者信頼の「要求発行ポリシーの編集」をクリックします。規則の追加ボタンをクリックします。

f:id:section27:20211202033454p:plain

規則の種類の選択で、「LDAP 属性を要求として送信」を選択して、次に進みます。

f:id:section27:20211202033509p:plain

要求規則の構成で、要求規則名「Email」、属性ストア「Active Directory」、LDAP 属性「E-Mail-Addresses」、出力方向の要求の種類「電子メールアドレス」を設定して「完了」ボタンをクリックします。

f:id:section27:20211202033525p:plain

「名前 ID (NameID)」を必要とする SaaS が多くあります。名前 ID を UPN (User-Principal-Name) で連携する例です。

先程の同様の「要求発行ポリシーの編集」の規則の種類の選択で、「入力方向の要求を変換」を選択して、次に進みます。

f:id:section27:20211202033544p:plain

要求規則の構成で、要求規則名「NameID」、入力方向の要求の種類「UPN」、出力方向の要求の種類「名前 ID」、出力方向の名前 ID の形式「UPN」を設定して「完了」ボタンをクリックします。

f:id:section27:20211202033601p:plain

以上のように、「要求発行ポリシーの編集」により、Active Directory の属性をサービスプロバイダに連携できるようになります。

Active DirectoryLDAP 属性

Active Directory のユーザ属性を SAML 2.0 等で連携したい場合の LDAP 属性名は、部署は「Department」、役職は「Title」ですが、UI では設定できない項目、たとえば EmployeeNumber 等の項目もあります。

UI にない項目については、PowerShell を使い ActiveDirectory モジュールを使用するとできます。

例えば、ユーザの属性を変更する場合は、Set-ADUser を使用します。

PS > Set-ADUser Administrator -EmployeeNumber 12345
PS > Get-ADUser Administrator -Properties *

...
EmployeeID                           :
EmployeeNumber                       : 12345
Enabled                              : True
...

Amazon Cognito などとの連携

Amazon Cognito などの OpenID Connect に準拠した認証認可システムでは、認証情報は署名が付与された改ざんを検出できるトークン (Json Web Tokens) が払い出されます。

Amazon Cognito では、ID Token に SAML フェデレーションで連携された属性を ID Token のカスタム属性として含めることもできます。これは、Amazon Cognito だけの機能ではなく、他の IDaaS でも同様と思います。

参考