NSEG Advent Calendar 2015 - Adventarの4日目の記事です。
今日はやってみた系のゆるふわな記事です。
先日NSEGでお世話になっている@kotyさんより、Pythonライブラリのパッケージ化に関するお題をいただきました。
よく見たらthinkAmiさんの記事だった。これpipになってないんでしょうか?? / Django + LDAP3で、ActiveDirectoryのLDAP認証によるログインとログアウトを試してみた - メモ的な思考的な https://t.co/GAncibYN0I
— にしざわ こういち(19) (@koty) November 20, 2015
以前から気になっていたこともあり、いろいろと試してみて、
@koty GitHubからですが、pip対応してみました(https://t.co/o6UxUtOIjC)。パッケージ化についていろいろと知ることができて、楽しかったです!
サンプルアプリをtest_projectに移して、一応動作確認してみました。
— thinkAmi (@thinkAmi) November 20, 2015
Active DirctoryでLDAPのbindを試す自作のライブラリみたいなものが、GitHubからpip install
できるようになりました。
thinkAmi/django-auth-ldap3-ad-backend
ただ、Active DirectoryのLDAPへbindするテストのために、
- Windows Server 2012 R2 のダウンロードにある評価版などを利用して、Windows Serverをたてる
- ActiveDirectoryを追加する
- ActiveDirectoryにドメイン作ってユーザとか作る
- PCをドメインに参加させる
- 必要なものをインストール
- テスト
というオンプレミスのテスト環境を利用しましたが、いろいろと手間でした。
何かいいものがないかを探したところ、Azure Active Directory Domain Services
(以下、Azure AD Domain Services)がプレビューで提供されたことを知りました。
- Azure AD Domain Services is now in Public Preview – Use Azure AD as a cloud domain controller! - Active Directory Blog - Site Home - TechNet Blogs
- Azure Active Directory Domain Services (Public Preview) | ブチザッキ
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)まわり
- 作業はいずれもMicrosoft Azure 管理ポータルより実施
- OSは、Windows Server 2012 R2 Datacenter
- プランは、
Basic
のA1
を使用A0
は非力すぎて環境を作るまでに時間がかかりそうと判断
- リージョンは、
米国東部
- インストールするソフトウェアなど
Azure AD Domain Servicesまわりのセットアップ
セットアップ方法については、公式のチュートリアルなどの記事が参考になりました。
- Azure Active Directory ドメイン サービス プレビュー: 作業の開始 | Microsoft Azure
- AzureActiveDirectoryDomainServicesを試してみる | JMT社員による技術ブログ
- AzureActiveDirectoryDomainServicesを試してみる2 | JMT社員による技術ブログ
スクリーンショットは上記記事に任せて、文字で残しておきます。
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分ほどでDNSのIPアドレスが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の言語環境は英語版のままで作業を行いました。
This PC > 右クリック > Property
をクリックComputer name, domain, and workgroup settings
のChange settings
をクリックComputer Name
タブのChange
ボタンをクリックDomain
に、<Microsoftアカウント名>.onmicrosoft.com
を設定- ドメイン管理者情報が求められるため、ドメイン管理者ユーザーの情報(ID:
admin1
、パスワード:9パスワード
)を入力 - 再起動が求められるので、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
にチェックを入れる
- Customize Python 3.4.3画面で、
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
normal1
hoge
片付け (作成したオブジェクトの削除)
Azure AD Domain Services、およびAzure VMは従量課金制なので、放置しておくと料金が発生します。
両方を停止させておく必要がありましたが、その確実な方法が見当たらなかったため、今回は全部削除することにしました。
Azure AD Domain Servicesまわり
このディレクトリのドメイン サービスを有効にします
をいいえ
へと変更し、Azure AD Domain Servicesを停止します。
これだけで大丈夫な気もしましたが、課金情報に、
Azure Active Directory ドメイン サービスは、Azure Active Directory テナントに含まれるオブジェクト (ユーザー、グループ、ドメイン参加コンピューターなど) の合計数に基づき、時間単位での使用量に対して課金されます。
と記載されていることから、念のため、グループとユーザーアカウントも削除します。
- 作成した、
AAD DC Administrators
グループの削除 - 作成したユーザーアカウントの削除
- admin1
- normal1
- 最初から存在していた、Microsoftアカウントは残す
Azure VMまわりの削除
以下の項目を管理ポータルより削除しました。
以上より、
- 管理ポータルでは
既存のディレクトリ
のみ表示- Azure Active Directoryの
このディレクトリのドメイン サービスを有効にします
は、いいえ
- Azure Active Directoryの
- プレビューポータルでは、
表示するリソースがありません
の表示
となりました。
課金内容
今回のテストでかかった課金内容を見てみます。
サブスクリプション - Microsoft Azureでは、19円の表示がありました。
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のテストなどもお気軽にできそう