ADFS 3.0を使ってActive DirectoryのアカウントでAWSにログインする

記事タイトルとURLをコピーする

技術2課の鎌田です。

Active Directoryは、別にサーバーを用意するとSaaSのサービスにもActive Direcroyのアカウントを使うことができるようになります。 今回は、Active DirectoryのアカウントでAWSにログインする方法をご紹介します。

目次はこちら。

  1. Active Directoryアカウントを外部連携する時の構成とバージョン
  2. ADのアカウントでログインした時のIAMのポリシー
  3. 実際に構成してみる
    • ADアカウントとセキュリティグループの準備
    • ADFSのインストール
    • ADFSの構成
    • AWS側の設定
    • ADFS側の設定
    • 要求規則の編集
  4. いよいよADのアカウントでAWSにアクセスしてみる
  5. おわりに

Active Directoryアカウントを外部連携する時の構成とバージョン

Active Directory(以下、AD)のアカウントは、社内などの閉じたネットワークで使うものなので、外部のSaaSなどと連携させるには、他にもサーバーが必要になります。 ADでは、ADFS(Active Directory Federation Service)サーバーを利用します。 さらに、このADFSサーバーはプライベートネットワークに配置するので、インターネットから直接利用出来るようにするため、プロキシサーバーが必要です。 通常であれば、WAP(Web Application Proxy)と呼ばれるサーバーを構築するのですが、私はELBを使って構成しました。 検証した時の構成図はこちらです。

ADFS構成図

このブログではELBを作るところまでは説明していませんが、ADFSを構成できたらELBを設置しDNS登録するのみですので、比較的に容易に構成は可能かと思います。

バージョンに関しては、こちらのバージョンで構成しています。

  • Windows Server 2012 R2
  • Active Directory Federation Service 3.0

ADのアカウントでログインした時のIAMのポリシー

ADのアカウントでAWSにログインした時の権限ですが、ADのセキュリティグループとAWSのIAMロールが1:1の関係になるように、ADFSで設定をしています。 このため、ADのアカウントにどの権限を持たせるかは、IAMロールでの制御になります。

AWSのIAMユーザーにADアカウントと同じアカウントが作られるのではない点に、注意してください。

 

実際に構成してみる

予備知識が分かったところで、実際に構成してみましょう。 AWSにADのアカウントでログインする時のやり方ですが、ADFSを使った構成方法が AWSのユーザーガイドでも紹介されています。

http://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/id_roles_providers_saml_3rd-party.html

こちらのURLにある、「Microsoft Active Directory フェデレーションサービス(AD FS)」の項を参考に進めました。

このブログでは、ADサーバーが構成済みで、かつADFSサーバー用のWindowsサーバーがドメイン参加まで済んでいる前提で、以下の説明を進めています。

ADアカウントとセキュリティグループの準備

まず、セキュリティグループ「AWS-Dev」を作成します。後ほど、同じ名前のIAMロールを後ほどAWS上に作成します。 その後、AWSのログインに使いたいユーザーアカウントを、先に作成したグループ「AWS-Dev」に追加してください。 なお、既にAWSログインに使いたいADアカウントがあれば、新しく作る必要はありません。 既にあるADアカウントに、グループを追加してください。

ADFSのインストール

ADFS用のサーバーに、ADFSの役割をインストールします。 作業する時のアカウントは、ドメイン管理者での実施がお勧めです。

ADFSをチェック入れる以外は、「次へ」で進めて、インストールをクリックできるようになったらインストールをクリックで、問題ありません。

adfs-1004

インストールが終わると、ADFSの構成が可能になります。 ウィンドウを閉じる前に、「このサーバーにフェデレーションサービスを構成します。」をクリックしましょう。

adfs-1011-1

 

ADFSの構成

ADFSの構成ウィザードが起動すると、 「最初のフェデレーションサーバー」か「フェデレーションサーバーの追加」を選ぶことになります。 1台目を作るので、「最初のフェデレーションサーバー」を選択しましょう。

adfs-1012-1

 

次に、ADFSがADのドメインコントローラーに接続するためのアカウントを確認されます。ドメインの管理者権限を持ったアカウントを指定しましょう。 ドメイン管理者のアカウントで構成ウィザードを起動している場合、ログインしているアカウントが指定されているので、そのまま「次へ」で進めて構いません

 

次はADFSが443でリッスンする時の証明書とFQDNの指定です。

この証明書は最終的に外部公開されますので、公的なサーバー証明を利用しましょう。 ※検証のみであれば、自己署名証明書でも問題ありません。 フェデレーションサービス名は、ADの認証ページのFQDNになります。 この指定がページにどう反映されるかを図示したので、ご参考に。

adfs-9002

 

次はADFSのサービスを起動する時のアカウントの指定です。 既存のADアカウントも使えますが、「グループ管理サービスアカウント」を使いましょう。名前を入力し、「次へ」をクリックします。

adfs-1020

次はデータベースの指定です。ADFSでは、構成情報をデータベースに保存しています。 SQL Serverを使うこともできますが、構成情報を保持しているのみであり、SQL Serverを使う必要はまずありません。 ADFSがデフォルトで指定している「Windows Internal Database」を選択して、「次へ」をクリックします。

オプションの確認の画面は、何もせず「次へ」をクリックして進めてください。 前提条件の確認の画面で、「構成」をクリックしましょう。 必要なインストール作業と構成が実施されます。

 

構成が完了すると、「このサーバーは正常に構成されました」と表示されます。 なお以下の図は警告が表示されていますが、ADFSのサービスを起動するアカウントのパスワード生成に使われるKDSルートキーの同期に10時間必要、という内容のものです。 無視しても問題ありませんので、「閉じる」をクリックして作業を完了してください。

adfs-1028

まだADFSの設定が必要ですが、ADFSサーバーへのリモートアクセスは切断せずにそのままで、ADサーバーの作業に移ります。

 

ADサーバーでSPNの登録

ADサーバーで、SPN(Service Principal Name)の登録作業を行います。 Service Princial Nameとは、サービスのためにADに登録されたIDのことで、登録しておくことでサービスそのものの認証をADで行えるようになります。

PowerShellを起動し、以下のコマンドを順に実行します。

setspn -a host/adfsserv ドメイン名fsgmsa
setspn -a HTTP/ADFSサーバーのFQDN ドメイン名fsgmsa
setspn -a HTTP/フェデレーションサービス名 ドメイン名fsgmsa

この後、AWSコンソールの作業に移ります。

AWS側の設定

IDプロバイダの設定

ADFS側の情報をxmlファイルを使って伝えることになります。 事前準備として、以下のURLでダウンロード出来るので、作業端末に保存しておいてください。 https://(ADFSサーバーのFQDN)/FederationMetadata/2007-06/FederationMetadata.xml

AWSコンソールにログインし、IAMのページで、「Identity Providers」をクリックします。 右ペインの「Create Provider」をクリックします。

Provide Typeに「SAML」、Provider Nameに任意の名前、Metadata Documentで先ほどダウンロードしたFederationMetadata.xmlを指定し、「Next Step」をクリックします。

QS_20160502-145800

Verify Provider Informationのページで、「Create」をクリックします。

You have finished creating a SAML provider. と表示されればOKです。

 

IAMロールの作成

次に、AD上で作成したグループ名と同じIAMロールを作成します。 IAMのroleの画面で「Create New Role」をクリックします。

名前は「AWS-Dev」で作成します。ADサーバーで作成したグループを変えている場合は、ADサーバーで作成したものと同じ名前を指定してください。

Roleは、「Grant Web Single Sign-On (WebSSO) access to SAML providers」を選択してください。

adfs-9003

SAML providerは、先ほど作成したProvider Nameを選択してください。

Policy Documentはそのまま「Next Step」をクリック。

 

Attach Policyで、ロールにアタッチするポリシーを決めます。 ここで、ドメインでアクセスしてきたユーザーが、AWSでどの権限を持っているかが決まる訳ですね。 適切なポリシーを選択します。

QS_20160502-222151

確認画面で「Create Role」をクリックすると、ロールが作成されます。

ADFS側の設定

ADFSサーバーに戻って、ADFSの設定を進めます。

サーバーマネージャーのダッシュボードから、「AD FSの管理」をクリックします。

起動したら、ADFS → 信頼関係 → 証明書利用者信頼と進んで右ペインの「証明書利用者信頼の追加」をクリックします。

adfs-1030-1

 

ウィザードが起動したら、「開始」をクリックします。

データソースの選択画面で、「オンラインまたはローカルネットワークで公開されている証明書利用者についてのデータをインポートする」を選択し、以下のURLを入力します。 https://signin.aws.amazon.com/static/saml-metadata.xml

adfs-1062

 

表示名の指定はデフォルトで入るので、そのまま「次へ」をクリックします。

多要素認証は構成しないので、「次へ」をクリックします。

発行承認規則の選択では、「全てのユーザーに対してこの証明書利用者へのアクセスを許可する」を選択し、「次へ」をクリックします。 なお、特定のユーザーのみ拒否したり、特定のグループのみ許可したり、といったことがADと連携して行うことも可能です。

信頼の追加の準備完了の画面では、何もせずそのまま「次へ」をクリックします。

「ウィザードの終了時にこの証明書利用者信頼の[要求規則の編集]ダイアログを開く」にチェックを入れた状態で、「閉じる」をクリックします。

 

要求規則の編集

ここでは、ADFSサーバーからAWSに渡すデータを加工したり、アクセスの拒否や許可の設定が出来ます。 AWSと連携させる場合には、設定の追加が必要です。

まず、「発行変換規則」のタブで、「規則の追加」をクリックします。 追加ウィザードが起動するので、要求規則テンプレートを「入力方向の要求を変換」を選択し、「次へ」をクリックします

adfs-1047

 

1つ目の規則を入力します。以下の画像を参考に、指定をしてください。

adfs-1053

 

2つ目の規則です。「発行変換規則」のタブで、「規則の追加」をクリックします。 追加ウィザードが起動するので、要求規則テンプレートを「LDAP属性を要求として送信」を選択し、「次へ」をクリックします 2つ目の規則を入力します。以下の画像を参考にしてください。 出力方向の要求の種類で入力しているURLはこちらになります。 https://aws.amazon.com/SAML/Attributes/RoleSessionName

adfs-1055

 

3つ目の規則です。「発行変換規則」のタブで、「規則の追加」をクリックします。 追加ウィザードが起動するので、要求規則テンプレートを「カスタム規則を使用して要求を送信」を選択し、「次へ」をクリックします 3つ目の規則を入力します。以下の内容をそのまま入力してください。

c:[Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname", Issuer == "AD AUTHORITY"] => add(store = "Active Directory", types = ("http://temp/variable"), query = ";tokenGroups;{0}", param = c.Value);

 

4つ目の規則です。「発行変換規則」のタブで、「規則の追加」をクリックします。 追加ウィザードが起動するので、要求規則テンプレートを「カスタム規則を使用して要求を送信」を選択し、「次へ」をクリックします 4つ目の規則を入力します。以下の情報をコピーし、arnについては次のリストを参考に書き換えてください。

  • 1つ目のarn:AWSのIAMで作成したIdentity ProvidersのSummary画面に表示されるProvider ARN
  • 2つ目のarn:AWSのIAMで作成したロールのRole ARN の"-"まで
c:[Type == "http://temp/variable", Value =~ "(?i)^AWS-"] => issue(Type = "https://aws.amazon.com/SAML/Attributes/Role", Value = RegExReplace(c.Value, "AWS-", "arn:aws:iam::123456789012:saml-provider/ADFS,arn:aws:iam::123456789012:role/AWS-"));

2つめのarnを"-"で止めているのは、複数のロールにヒットさせるためです。

長くなりましたが、これで下準備が整いました!

いよいよADのアカウントでAWSにアクセスしてみる

ブラウザを起動し、以下のURLにアクセスしてください。 ADの認証ページ

サインインするサイトをまずは選択します。ADFSで指定した表示名を選んで、サインインをクリックします。

QS_20160502-214637

 

アカウント情報を入力して、サインインをクリックすると・・・

QS_20160502-214650

 

AWSのコンソールが表示されました!

QS_20160502-214659

これで、Active DirectoryのアカウントでAWSにログインする環境が構築できました。

おわりに

今回、AWSにActive Directoryのアカウントでログインするまでの流れを見てきました。 ちょっと手順は多いのですが、Active Directoryの一括管理にしておくことで、 Active Directoryのアカウントさえ作成/削除してしまえば、他のサービスのアカウントを作成/削除せずに済む、という管理上の利点があります。

この記事ではAWSを扱いましたが、SalesForceなど、他のSaaSサービスでも同様に、Active Directoryのアカウントを連携させることが可能です。 アカウント連携でお悩みのことなどありましたら、是非弊社にご相談ください。

次回は、AWSにログインできるまでの連携の仕組みを、具体的に見ていきたいと思います。