「みらい翻訳 Advent Calendar 2021」2日目の記事です。
この記事では次のことを説明します。
- Active Directory と ADFS による SAML 2.0 について
- EC2 上に Active Directory と ADFS を構築する手順
- SAML 2.0 の IdP をテストする手順
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 を提供できるようになります。
ではここで、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) をダウンロードしておきます。
インスタンスの起動
- EC2 の インスタンス で、「インスタンスの起動」をクリックします。
- 検索ボックスに、「Windows_Server-2019-Japanese-Full-Base-2021.11.10」を入力します。
- コミュニティ AMI のタブを選択して、選択ボタンをクリックします (2021年12月1日現在、AMI ID は
ami-018bde2ca036b84af
でした)。 - インスタンスタイプは、
t2.micro
ではスペックが不足するため、t2.medium
を選択して、「次のステップ: インスタンスの詳細の設定」に進みます。 - ステップ 3: インスタンスの詳細の設定 では、ネットワークに上記で作成した VPC を設定します。サブネットを設定し、自動割り当てパブリック IP を「有効」に設定します。「次のステップ: ストレージの追加」に進みます。
- ステップ 4: ストレージの追加 は、変更せず「次のステップ: タグの追加」に進みます。
- ステップ 5: タグの追加 も、変更せず「次のステップ: セキュリティグループの設定」に進みます。
- ステップ 6: セキュリティグループの設定 で、「既存のセキュリティグループ選択する」を選択して、上記で作成したセキュリティグループを設定します。「確認と作成」ボタンをクリックします。
- 「起動」ボタンをクリックします。
- 上記で作成したキーペアを選択して、「インスタンスの作成」ボタンをクリックします。
Route 53 の設定
上記のドメイン名のゾーンが、例えば example.com
として、AD FS の FQDN を test.example.com
とする場合は、example.com
のゾーンに test.example.com
の A レコードを設定します。IP アドレスは、起動したインスタンスのパブリック IP を設定します。
Active Directory と AD FS のインストール
- 起動したインスタンスを選択して、「接続」ボタンをクリックします。
- RDP クライアントのタブを選択します。
- パスワードを取得のリンクをクリックします。
- キーペアを参照の「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 メニューから「サーバーマネージャー」を起動します。
「通知」をクリックして「このサーバーをドメインコントローラーに昇格する」をクリックします。
「新しいフォレストを追加する」を選択してルートドメイン (例: example.com
) を入力します。
DSRMのパスワードを入力します。
追加オプションはNetBIOSドメイン名が自動で入力される値で次に進みます。
パスはそのまま進めます。
オプションの確認はそのまま進めます。
前提条件のチェックでインストールをクリックします。
インストールが完了すると、自動的に再起動します。
サーバー証明書の作成と設定
再起動したら、再びリモートデスクトップで接続します。
Windows メニューから「サーバーマネージャー」を起動します。
ツールから インターネット インフォメーション サービス (IIS) マネージャー を選択します。
サーバー証明書をダブルクリックします。
備考にある「自己署名入り証明書の作成」をクリックします。
Route 53 に登録したホストゾーンを使ったドメイン名 (例: *.example.com
等) で証明書を作成します。
IIS の Default Web Site を右クリックして「バインドの編集」をクリックします。
「追加」ボタンをクリックして、種類に「https」、ホスト名に、FQDN (例: test.example.com
)、SSL 証明書を作成した自己署名入り証明書を選択します。
「閉じる」ボタンをクリックします。そして、インターネット インフォメーション サービス (IIS) マネージャーを閉じます。
AD FS
サーバーマネージャーの通知の「このサーバーにフェデレーションサービスを構成します」をクリックします。
ようこそ では、そのまま次に進みます。
AD DS への接続は、Administrator のまま次に進みます。
サービスのプロパティの指定 で SSL 証明書を選択し、フェデレーション サービスの表示名を設定します。
サービス アカウントの指定で Administrator を選択し、リモートデスクトップで接続するときに使用したパスワードを入力します。
データベースの指定はそのまま次にすすみます。
オプションの確認はそのまま次に進みます。
前提条件の確認で、「構成」ボタンをクリックします。
結果で、「閉じる」ボタンをクリックします。
テスト用のアプリケーション (SP)
SAML の IdP をテストするためには、サービスプロバイダ (SP) が必要になります。ここでは、RSA SAML Test Service Provider を使います。
テスト用のアプリケーションに進む前に、AD FS のメタデータをダウンロードします。ブラウザで https://<FQDN>/federationmetadata/2007-06/federationmetadata.xml
にアクセスして、xml ファイルをダウンロードしてください。
Instructions から SP Initiated SSO を選択します。
「DOWNLOAD METADATA」ボタンをクリックして取得した XML ファイルは、entityID
の IAMShowcase
と Location
の https://sptest.iamshowcase.com/acs
を AD FS の設定時に使用します。
Setting up SP initiated SSO の、「CHOOSE FILE」ボタンをクリックして、AD FS からダウンロードした、federationmetadata.xml
を選択して、「SUBMIT FILE」ボタンをクリックします。
サービスプロバイダの URL が表示されるので、それを記録しておきます。
AD FS の設定
リモートデスクトップに戻り、サーバーマネージャーのツールから「AD FSの管理」を開きます。
証明書利用者信頼から証明書利用者信頼の追加をクリックします。
ようこそでは、そのまま「開始」ボタンをクリックします。
データソースの選択で「証明書利用者についてのデータを手動で入力する」を選択します。
表示名の指定で、表示名を設定します。
証明書の構成は、そのまま次に進みます。
URL の構成で、「SAML 2.0 WebSSO プロトコルのサポートを有効にする」をチェックし、URL に テストサービスプロバイダの https://sptest.iamshowcase.com/acs
を設定します。
識別子の構成で、識別子に、テストサービスプロバイダの IAMShowcase
を設定します。
アクセス制御ポリシーの選択で、すべてのユーザーを許可するを選択し、以降はそのまま進めて完了します。
ここまでの設定が終われば、記録していたサービスプロバイダの URL にアクセスすることで、AD FS のログイン画面を表示しテストすることが可能になります。
属性の連携
ただし、実際の運用では、サービスプロバイダに「名前 ID (NameID)」や「電子メールアドレス」、「電話番号」、「会社名」、「部署」、「役職」などの属性を連携しなければならない場合があると思います。
まず、「電子メールアドレス」を連携する場合です。
ここまでの、AD FS 管理の証明書利用者信頼の「要求発行ポリシーの編集」をクリックします。規則の追加ボタンをクリックします。
規則の種類の選択で、「LDAP 属性を要求として送信」を選択して、次に進みます。
要求規則の構成で、要求規則名「Email」、属性ストア「Active Directory」、LDAP 属性「E-Mail-Addresses」、出力方向の要求の種類「電子メールアドレス」を設定して「完了」ボタンをクリックします。
「名前 ID (NameID)」を必要とする SaaS が多くあります。名前 ID を UPN (User-Principal-Name) で連携する例です。
先程の同様の「要求発行ポリシーの編集」の規則の種類の選択で、「入力方向の要求を変換」を選択して、次に進みます。
要求規則の構成で、要求規則名「NameID」、入力方向の要求の種類「UPN」、出力方向の要求の種類「名前 ID」、出力方向の名前 ID の形式「UPN」を設定して「完了」ボタンをクリックします。
以上のように、「要求発行ポリシーの編集」により、Active Directory の属性をサービスプロバイダに連携できるようになります。
Active Directory と LDAP 属性
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 でも同様と思います。