技術2課の鎌田です。
Active Directoryは、別にサーバーを用意するとSaaSのサービスにもActive Direcroyのアカウントを使うことができるようになります。 今回は、Active DirectoryのアカウントでAWSにログインする方法をご紹介します。
目次はこちら。
- Active Directoryアカウントを外部連携する時の構成とバージョン
- ADのアカウントでログインした時のIAMのポリシー
-
実際に構成してみる
- ADアカウントとセキュリティグループの準備
- ADFSのインストール
- ADFSの構成
- AWS側の設定
- ADFS側の設定
- 要求規則の編集
- いよいよADのアカウントでAWSにアクセスしてみる
- おわりに
Active Directoryアカウントを外部連携する時の構成とバージョン
Active Directory(以下、AD)のアカウントは、社内などの閉じたネットワークで使うものなので、外部のSaaSなどと連携させるには、他にもサーバーが必要になります。 ADでは、ADFS(Active Directory Federation Service)サーバーを利用します。 さらに、このADFSサーバーはプライベートネットワークに配置するので、インターネットから直接利用出来るようにするため、プロキシサーバーが必要です。 通常であれば、WAP(Web Application Proxy)と呼ばれるサーバーを構築するのですが、私はELBを使って構成しました。 検証した時の構成図はこちらです。
このブログでは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の構成が可能になります。 ウィンドウを閉じる前に、「このサーバーにフェデレーションサービスを構成します。」をクリックしましょう。
ADFSの構成
ADFSの構成ウィザードが起動すると、 「最初のフェデレーションサーバー」か「フェデレーションサーバーの追加」を選ぶことになります。 1台目を作るので、「最初のフェデレーションサーバー」を選択しましょう。
次に、ADFSがADのドメインコントローラーに接続するためのアカウントを確認されます。ドメインの管理者権限を持ったアカウントを指定しましょう。 ドメイン管理者のアカウントで構成ウィザードを起動している場合、ログインしているアカウントが指定されているので、そのまま「次へ」で進めて構いません
次はADFSが443でリッスンする時の証明書とFQDNの指定です。
この証明書は最終的に外部公開されますので、公的なサーバー証明を利用しましょう。 ※検証のみであれば、自己署名証明書でも問題ありません。 フェデレーションサービス名は、ADの認証ページのFQDNになります。 この指定がページにどう反映されるかを図示したので、ご参考に。
次はADFSのサービスを起動する時のアカウントの指定です。 既存のADアカウントも使えますが、「グループ管理サービスアカウント」を使いましょう。名前を入力し、「次へ」をクリックします。
次はデータベースの指定です。ADFSでは、構成情報をデータベースに保存しています。 SQL Serverを使うこともできますが、構成情報を保持しているのみであり、SQL Serverを使う必要はまずありません。 ADFSがデフォルトで指定している「Windows Internal Database」を選択して、「次へ」をクリックします。
オプションの確認の画面は、何もせず「次へ」をクリックして進めてください。 前提条件の確認の画面で、「構成」をクリックしましょう。 必要なインストール作業と構成が実施されます。
構成が完了すると、「このサーバーは正常に構成されました」と表示されます。 なお以下の図は警告が表示されていますが、ADFSのサービスを起動するアカウントのパスワード生成に使われるKDSルートキーの同期に10時間必要、という内容のものです。 無視しても問題ありませんので、「閉じる」をクリックして作業を完了してください。
まだ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」をクリックします。
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」を選択してください。
SAML providerは、先ほど作成したProvider Nameを選択してください。
Policy Documentはそのまま「Next Step」をクリック。
Attach Policyで、ロールにアタッチするポリシーを決めます。 ここで、ドメインでアクセスしてきたユーザーが、AWSでどの権限を持っているかが決まる訳ですね。 適切なポリシーを選択します。
確認画面で「Create Role」をクリックすると、ロールが作成されます。
ADFS側の設定
ADFSサーバーに戻って、ADFSの設定を進めます。
サーバーマネージャーのダッシュボードから、「AD FSの管理」をクリックします。
起動したら、ADFS → 信頼関係 → 証明書利用者信頼と進んで右ペインの「証明書利用者信頼の追加」をクリックします。
ウィザードが起動したら、「開始」をクリックします。
データソースの選択画面で、「オンラインまたはローカルネットワークで公開されている証明書利用者についてのデータをインポートする」を選択し、以下のURLを入力します。 https://signin.aws.amazon.com/static/saml-metadata.xml
表示名の指定はデフォルトで入るので、そのまま「次へ」をクリックします。
多要素認証は構成しないので、「次へ」をクリックします。
発行承認規則の選択では、「全てのユーザーに対してこの証明書利用者へのアクセスを許可する」を選択し、「次へ」をクリックします。 なお、特定のユーザーのみ拒否したり、特定のグループのみ許可したり、といったことがADと連携して行うことも可能です。
信頼の追加の準備完了の画面では、何もせずそのまま「次へ」をクリックします。
「ウィザードの終了時にこの証明書利用者信頼の[要求規則の編集]ダイアログを開く」にチェックを入れた状態で、「閉じる」をクリックします。
要求規則の編集
ここでは、ADFSサーバーからAWSに渡すデータを加工したり、アクセスの拒否や許可の設定が出来ます。 AWSと連携させる場合には、設定の追加が必要です。
まず、「発行変換規則」のタブで、「規則の追加」をクリックします。 追加ウィザードが起動するので、要求規則テンプレートを「入力方向の要求を変換」を選択し、「次へ」をクリックします
1つ目の規則を入力します。以下の画像を参考に、指定をしてください。
2つ目の規則です。「発行変換規則」のタブで、「規則の追加」をクリックします。 追加ウィザードが起動するので、要求規則テンプレートを「LDAP属性を要求として送信」を選択し、「次へ」をクリックします 2つ目の規則を入力します。以下の画像を参考にしてください。 出力方向の要求の種類で入力しているURLはこちらになります。 https://aws.amazon.com/SAML/Attributes/RoleSessionName
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で指定した表示名を選んで、サインインをクリックします。
アカウント情報を入力して、サインインをクリックすると・・・
AWSのコンソールが表示されました!
これで、Active DirectoryのアカウントでAWSにログインする環境が構築できました。
おわりに
今回、AWSにActive Directoryのアカウントでログインするまでの流れを見てきました。 ちょっと手順は多いのですが、Active Directoryの一括管理にしておくことで、 Active Directoryのアカウントさえ作成/削除してしまえば、他のサービスのアカウントを作成/削除せずに済む、という管理上の利点があります。
この記事ではAWSを扱いましたが、SalesForceなど、他のSaaSサービスでも同様に、Active Directoryのアカウントを連携させることが可能です。 アカウント連携でお悩みのことなどありましたら、是非弊社にご相談ください。
次回は、AWSにログインできるまでの連携の仕組みを、具体的に見ていきたいと思います。