Azure Active Directory Domain ServicesでLDAPのbindを試してみた

NSEG Advent Calendar 2015 - Adventarの4日目の記事です。

www.adventar.org

今日はやってみた系のゆるふわな記事です。

 
先日NSEGでお世話になっている@kotyさんより、Pythonライブラリのパッケージ化に関するお題をいただきました。

 
以前から気になっていたこともあり、いろいろと試してみて、

Active DirctoryでLDAPのbindを試す自作のライブラリみたいなものが、GitHubからpip installできるようになりました。
thinkAmi/django-auth-ldap3-ad-backend

 
ただ、Active DirectoryLDAPへbindするテストのために、

というオンプレミスのテスト環境を利用しましたが、いろいろと手間でした。

 
何かいいものがないかを探したところ、Azure Active Directory Domain Services(以下、Azure AD Domain Services)がプレビューで提供されたことを知りました。

 
Azure Active Directoryと異なり、Azure AD Domain ServicesではLDAPが使えそうでした。そのため、自作ライブラリのテストがてら、どんなものかと試してみることにしました。

なお、Azureは詳しくないので、過不足や誤りがあればご指摘ください。

 

長いのでまとめ

作業の流れを書いてみたら予想通り長くなったので、最初に感想をまとめておきます。

一番は、Azure AD Domain Serviceの環境構築が、オンプレミスで構築するよりもかなり楽になっているということでした。

 
あとは、

  • Azure AD Domain Servicesで、LDAPのbind/unbindができたので、Active Directory + LDAPのテストに使えそう
    • 他の属性の読込とかは試してなけれど...
  • 今のところディレクトリの更新系はできない
  • 今後のPowerShell対応に期待
    • 今回はブラウザからセットアップしたけれど、手間なので今後に期待
  • Azure AD Domain Servicesの確実な停止方法が分からなかったため、作成したオブジェクトは全削除
  • かかった費用は、19円
    • 誤って作成したAzure VMがあるため、実際は15円程度
    • Visual Studio Dev EssentialsでAzureクレジットが提供されるようになれば、LDAPのテストなどもお気軽にできそう

のような感じでした。

また、12/3にAnnouncing Azure Portal general availability | Microsoft Azure BlogのようにAzureポータルがGAとなったようですが、まだ今回は旧ポータルでの作業としています。

 

環境

Azureまわり
  • 作業はいずれもMicrosoft Azure 管理ポータルより実施
  • Azure AD Domain Services プレビューをOn
  • 使用するドメインは、Azure Active Directoryのデフォルト(<Microsoftアカウント名>.onmicrosoft.com)
  • ドメインには、admin1(管理者)とnormal1(一般ユーザ)の2つの用途のアカウントを登録
    • AAD DC Administratorsグループには、 admin1のみ所属
  • Azure AD Domain Services用のグループ名は、AAD DC Administrators
  • 仮想ネットワークのリージョンは、米国東部
    • Azure AD Domain Servicesに参加するAzure VMのリージョンと同じリージョンを選択

 

Azure Virtual Machine (以下、Azure VM)まわり

 

Azure AD Domain Servicesまわりのセットアップ

セットアップ方法については、公式のチュートリアルなどの記事が参考になりました。

スクリーンショットは上記記事に任せて、文字で残しておきます。

 

Azure Active Directoryへユーザを追加

今回はデフォルトのドメインを使うので、そのドメインにユーザを追加します。

ACTIVE DIRECTORY > 既存のディレクトリ > ユーザー より、組織内の新しいユーザーから以下のユーザーを追加します。

ユーザー名 表示名 ロール 参考:用途
admin1 ad min1 admin1 サービス管理者 Azure VMドメインに参加させる時に指定する、ドメイン管理者ユーザー
normal1 nor mal1 normal1 ユーザー ドメインの一般ユーザー

なお、ユーザーを追加した際に一時パスワードが発行されます。これは後ほどパスワードリセットの際に使用するため、忘れずにメモをしておきます。

 

グループの新規作成

ACTIVE DIRECTORY > 既存のディレクトリ > ユーザー より、Azure AD Domain Services用の管理グループを追加します。

今回は、名前と説明の両方に AAD DC Administrators を指定しました。

 

グループへ管理者ユーザーを追加

上記で作成したAAD DC Administratorsグループを選択すると、このグループにメンバーが含まれていません。と表示されるため、メンバーの追加を押して追加します。

グループにはドメインの管理者(今回はadmin1)のみを追加します。右側の選択済みに表示されればOKです。

 

仮想ネットワークの作成

ネットワークサービス > VIRTUAL NETWORK > 簡易作成 より、以下の内容で作成します。

項目
名前 testnw1
アドレス空間 デフォルト (10,---,---,---)
最大VM デフォルト (4096 [CIDR: /20])
場所 アメリカ東部
DNSサーバー デフォルト (なし)

 

ドメインサービスの有効化

Active Directory > 既存のディレクトリ > 構成 をクリックします。

その後、下の方にあるドメインサービス プレビューにある、このディレクトリのドメイン サービスを有効にしますはいにして、以下の内容を入力します。

項目
ドメインサービスのDNSドメイン デフォルト (<Microsoftアカウント名>.onmicrosoft.com)
ドメインネットワークをこの仮想ネットワークに接続します デフォルト (上記で作成した仮想ネットワークのtestnw1)

 
入力して保存したところ、15分ほどでDNSIPアドレスが1つできました。

もう一つできると高可用性になるとのことですが、今回はテスト環境、かつ、1個目ができてから15分ほど待っても変化なかったので、先に進むことにしました*1

 

仮想ネットワークでのDNS設定

ネットワーク > VIRTUAL NETWORKS > testnw1 (作成した仮想ネットワーク) > 構成より作業を行います。

DNSサーバーセクションにて、以下の設定を行います。

項目
名前 testdns1 (任意の適当な名前)
IPアドレス 10.0.0.4

2個目のIPアドレスがもらえていなかったので、今回は1つだけ指定しましたが、後述の通り特に問題ありませんでした。

 

ユーザーのパスワードリセット

以下のURLにてドメインの各ユーザー(admin1, normal1の2回)でログインして、パスワードのリセットを行います。
http://myapps.microsoft.com

各ユーザーでログインの時の情報は、以下の通りです。

なお、後の説明で分かりやすくするためにパスワードを日本語で記載していますので、もし試す場合は違うパスワードを使ってください。

また、パスワードの長さは16文字までのようで、17文字以上指定するとエラーになり登録できません*2

ID パスワード 再入力するパスワード
admin1@<Microsoftアカウント名>.onmicrosoft.com 上記で取得した一時パスワード 9パスワード
normal1@<Microsoftアカウント名>.onmicrosoft.com 上記で取得した一時パスワード 8パスワード

 
ここまでで、Azure AD Domain Servicesまわりのセットアップは完了です。

 

Azure VMの作成

Azure AD Domain Servicesのドメインに参加してライブラリのテストを行うAzureVMを作ります。

なお、AzureVMは作ったことがなかったので、公式のチュートリアルを参考にMicrosoft Azure 管理ポータルにてAzureVMを作成しました。
Azure 上で Windows を実行する仮想マシンの作成

 

Azure VMの作成

COMPUTE > 仮想マシン > ギャラリーをクリックして作成します。

イメージの選択画面

イメージはWindows Server 2012 R2 Datacenterを選択します。

 

仮想マシンの構成画面 (その1)

以下の内容を指定します。

項目
バージョンのリリース日 デフォルト(2015/10/22)
仮想マシン aaddstest (任意の適当な名前)
階層 BASIC
サイズ A1
新しいユーザー名 aaddsuser*3
パスワード 7パスワード

 

仮想マシンの構成画面 (その2)

以下の内容を指定します。

項目
クラウドサービス デフォルト(新しいクラウドサービスの作成)
クラウドサービスDNS aaddstestthinkami1.cloudapp.net (任意の適当な名前)
地域/アンフィニティグループ/仮想ネットワーク デフォルト (testnw1、上記で作成した仮想ネットワーク名)
仮想ネットワークサブネット デフォルト(Subnet-1(10.0.0.0/23))
ストレージアカウント デフォルト(自動的に生成されたストレージアカウントを使用)
可用性セット デフォルト(なし)
エンドポイント デフォルト

 
なお、エンドポイントのデフォルト値は以下の通りでした。

名前 プロトコル パブリックポート プライベートポート
Remote Desktop TCP 自動 3389
PowerShell TCP 5986 5986

 

仮想マシンの構成画面 (その3)

以下の内容を指定します。

項目
VMエージェント デフォルト(VMエージェントのインストール)
上記以外の項目 デフォルトのまま、チェックを外しておく

 
以上にて、しばらく待つとAzure VMが作成されます。

 

Azure VMへの接続

接続をクリックするとリモートデスクトップ用のファイルがダウンロードできるため、そのファイルを使用してAzure VMへ接続します。

ログインするユーザーとパスワードは、Azure VM作成時のユーザーとパスワードを指定します。

項目
ユーザー aaddsuser
パスワード 7パスワード

 

接続情報の確認

Azure VM上のコマンドプロンプトより、接続情報を確認します。

C:\Users\aaddsuser>ipconfig /all
...
Ethernet adapter Ethernet:

   Connection-specific DNS Suffix  . : aaddstestthinkami1.b6.internal.cloudapp.net
   Description . . . . . . . . . . . : Microsoft Hyper-V Network Adapter
...
   DHCP Enabled. . . . . . . . . . . : Yes
   Autoconfiguration Enabled . . . . : Yes
...
   IPv4 Address. . . . . . . . . . . : 10.0.0.6(Preferred)
   Subnet Mask . . . . . . . . . . . : 255.255.254.0
   Lease Obtained. . . . . . . . . . : Friday, November 27, 2015 5:35:00 AM
   Lease Expires . . . . . . . . . . : Monday, January 3, 2152 8:09:43 PM
   Default Gateway . . . . . . . . . : 10.0.0.1
...
   DNS Servers . . . . . . . . . . . : 10.0.0.4
...

Azure VMは、先ほど指定した仮想ネットワーク、

の情報を持っている分かりました。

 

Azure VMを、Azure AD Domain Servicesのドメインへ参加

通常のドメイン参加方法と同じように、Azure VMドメインへと参加させます。テスト環境ということもあり、OSの言語環境は英語版のままで作業を行いました。

  1. This PC > 右クリック > Propertyをクリック
  2. Computer name, domain, and workgroup settingsChange settingsをクリック
  3. Computer NameタブのChangeボタンをクリック
  4. Domainに、<Microsoftアカウント名>.onmicrosoft.comを設定
  5. ドメイン管理者情報が求められるため、ドメイン管理者ユーザーの情報(ID: admin1、パスワード: 9パスワード)を入力
  6. 再起動が求められるので、Azure VMを再起動

 
再起動後、再度Azure VMリモートデスクトップで接続し、以下のドメイン管理者アカウント情報でログインできることを確認します。

ユーザー パスワード
admin1@<Microsoftアカウント>.onmicrosoft.com 9パスワード

 

AzureVMにて、テスト環境の構築

ようやくActiveDirectory環境ができたので、ライブラリのテスト環境を構築します。

 

ブラウザのTrusted sitesへの追加

各Webサイトよりいろいろとダウンロードする必要がありますが、デフォルトのままではTrusted sitesに登録されていないため、ダウンロードすることができません。

そのため、ブラウザの設定アイコン > Internet options > Securityタブ > Trusted sitesのアイコン > Sitesボタン より、ブラウザのTrusted sitesに以下を追加します。

URL 用途
https://www.python.org/ Python3.4.3のダウンロードURL
https://github.com/ テスト対象のライブラリのホスティングURL
https://github-cloud.s3.amazonaws.com 現時点での、Git for WindowsのダウンロードURL
http://sourceforge.net サクラエディタのダウンロードURL

 

Python 3.4.3のインストール
  • 公式サイトより、Windows x86 MSI installerをダウンロード
  • インストール時の指定は以下の通り
    • Customize Python 3.4.3画面で、Add python.exe to Pathにチェックを入れる

 

Git for Windowsのインストール

GitHubからpip installする際にGitが必要となるため、インストールを行います。

  • 公式サイトより、Git-2.6.3-64-bit.exeをダウンロード
  • インストール時の指定は以下の通り
項目
Select components 全てチェックを外す
Adjust your PATH environment Use Git and optional Unix tools ...
Configuring the line ending conversions Checkout as-is, commit as-is
Configuring the terminal emulator to use with Git Bash Use Windows' default console window

 

サクラエディタのインストール

django-auth-ldap3-ad-backendの設定ファイルを修正する際、文字コード・改行コードを選択できるエディタが必要となります。

せっかくなのでVisual Studio Codeを使おうとしましたが、Trusted sitesへ追加する内容がわからなかったため、今回はサクラエディタを使いました。

サクラエディタ Downloadより、sakura_install2-2-0-1.exeをダウンロード・インストールします。

 

ライブラリのpip install

コマンドプロンプトにて、pip installします。なお、テスト環境なので、グローバルに入れてしまいます。

C:\Users\admin1>pip install git+https://github.com/thinkAmi/django-auth-ldap3-ad-backend.git
...
Successfully installed django-1.8.7 django-auth-ldap3-ad-backend-0.0.1 ldap3-0.9.9.3 pyasn1-0.1.9

 

テストプロジェクトのgit clone

ライブラリに含まれるテストプロジェクトを使ってテストするため、ライブラリ全体をgit cloneで取得します。

# admin1のMy Documentsの下に入れる
C:\Users\admin1>cd Documents

# git clone
C:\Users\admin1\Documents>git clone https://github.com/thinkAmi/django-auth-ldap3-ad-backend.git
Cloning into 'django-auth-ldap3-ad-backend'...
remote: Counting objects: 33, done.
remote: Compressing objects: 100% (30/30), done.
remote: Total 33 (delta 1), reused 25 (delta 0), pack-reused 0
Unpacking objects: 100% (33/33), done.
Checking connectivity... done.

 

settings.pyの修正

テストプロジェクトのsettings.pyを、Azure AD Domain Servicesの環境に合わせて修正します。

Azure AD Domain Servicesのドメインコントローラ名やIPアドレスが分かりませんでしたが、一般的な環境と同じくDNSサーバーと同居しているだろうと考えました。

そのため、AD_DOAMIN_CONTROLLER_HOST_NAMEには、Azure AD Domain ServicesのDNSサーバーのIPアドレスを指定しました。

# Azure AD Domain ServicesのDNSのIPアドレス
AD_DOAMIN_CONTROLLER_HOST_NAME = '10.0.0.4'

# Azure AD Domain Servicesのドメイン名
AD_DOMAIN_NAME = '<Microsoftアカウント名>.onmicrosoft.com'

 
設定が終わったら、忘れずにDjangoのmigrateを実行し、テストプロジェクトを起動しておきます。

# migrate
C:\Users\admin1\Documents\django-auth-ldap3-ad-backend\test_project>python manage.py migrate

# 起動
C:\Users\admin1\Documents\django-auth-ldap3-ad-backend\test_project>python manage.py runserver

 

Azure VMでのテスト

localhost:8000にアクセスし、以下のアカウントでログインしてみました。

アカウント名 パスワード 備考
admin1 9パスワード ドメインの管理者
normal1 8パスワード ドメインの一般ユーザー
hoge <適当なパスワード> ドメインにいないユーザー

 
結果は以下の通りとなり、LDAPでのbind/unbindが成功しているようでした。

admin1

f:id:thinkAmi:20151202191605p:plain

normal1

f:id:thinkAmi:20151202191612p:plain

hoge

f:id:thinkAmi:20151202191625p:plain

 

片付け (作成したオブジェクトの削除)

Azure AD Domain Services、およびAzure VMは従量課金制なので、放置しておくと料金が発生します。

両方を停止させておく必要がありましたが、その確実な方法が見当たらなかったため、今回は全部削除することにしました。

 

Azure AD Domain Servicesまわり

このディレクトリのドメイン サービスを有効にしますいいえへと変更し、Azure AD Domain Servicesを停止します。

これだけで大丈夫な気もしましたが、課金情報に、

Azure Active Directory ドメイン サービスは、Azure Active Directory テナントに含まれるオブジェクト (ユーザー、グループ、ドメイン参加コンピューターなど) の合計数に基づき、時間単位での使用量に対して課金されます。

価格 - Active Directory DS | Microsoft Azure

と記載されていることから、念のため、グループとユーザーアカウントも削除します。

  • 作成した、AAD DC Administratorsグループの削除
  • 作成したユーザーアカウントの削除
    • admin1
    • normal1
    • 最初から存在していた、Microsoftアカウントは残す

 

Azure VMまわりの削除

以下の項目を管理ポータルより削除しました。

  • 仮想マシンの削除
    • シャットダウン後に削除
  • ストレージの削除
  • クラウドサービスの削除
  • 仮想ネットワークの削除
    • 使用中と言われた場合は、時間を置いてから再度削除する

 
以上より、

  • 管理ポータルでは既存のディレクトリのみ表示
    • Azure Active Directoryこのディレクトリのドメイン サービスを有効にしますは、いいえ
  • プレビューポータルでは、表示するリソースがありませんの表示

となりました。

 

課金内容

今回のテストでかかった課金内容を見てみます。

サブスクリプション - Microsoft Azureでは、19円の表示がありました。

f:id:thinkAmi:20151202192240p:plain

3円は誤って作成したAzur VMなので、実際は15円くらいかと思います。

あとは、上記だとAzure VMのみのような気もしたため、Azure AD Domain Services分は後日請求があるのかもしれません。

 

2015/12/26追記

請求期間が過ぎたので再度確認してみたところ、19円で確定していました。

明細にもAzure AD Domain Servicesのような表記はありませんでした。プレビュー版のせいなのか、よく分かりません...。

2015/12/26追記 ここまで

 
詳しい内容の確認方法は、Azure の課金内容の確認にありました。

 

まとめ (再掲)

  • Azure AD Domain Servicesで、LDAPのbind/unbindができたので、Active Directory + LDAPのテストに使えそう
    • 他の属性の読込とかは試してなけれど...
  • 今のところディレクトリの更新系はできない
  • 今後のPowerShell対応に期待
    • 今回はブラウザからセットアップしたけれど、手間なので今後に期待
  • Azure AD Domain Servicesの確実な停止方法が分からなかったため、作成したオブジェクトは全削除
  • かかった費用は、19円
    • 誤って作成したAzure VMがあるため、実際は15円程度
    • Visual Studio Dev EssentialsでAzureクレジットが提供されるようになれば、LDAPのテストなどもお気軽にできそう

*1:後で気づいたのですが、いつの間にか2つめのIPアドレスができていました

*2:パスワードが長過ぎます的なエラーメッセージではないので、分かりにくいです...

*3:新しいユーザー名とパスワードはAzure VMのローカルアカウントだろうと考え、新規でアカウント情報を入力