今日はWindows Azure Connectなんぞをネタにしようと思います。
さてWindows Azure Connectとは?というところなんですが、よく考えるとあまり取り上げてなかった気がしますね。
ぶっちゃけていうと、クライアントコンピューターとWindows AzureのホストサービスをVPN(IPSec)で結んであたかも直接通信ができるようにトンネリング接続してくれる機能のことを指します。
IPSec接続にはクライアントからOutbound TCP/443ポート(HTTPS)だけ開いていればいいので、ネットワーク要件としてはファイアウォールの設定変更も大半のケースでは不要ですし、使い勝手は良さそうです。が。
ただ、今現在これはベータプログラムで何点か制約があります。思いつく限り挙げておくと、
- Windows Azure Connectを利用するには専用のEndpointソフトウェアのインストールが必要
- そのEndpointソフトウェアは英語版Windows OSにしかインストールできない。
- 基本的に1:1の接続。LAN to LAN やIPSec機器間の接続は将来予定(らしい)
- 認証プロキシが間にいるとNG
- エンドポイント間はIPv6
などがあります。
ぶっちゃけ専用ソフトウェアインストール必要+英語のみ+1:1接続という時点で非常に使いどころが限定されそうな勢いです。というか限定されます。
正式リリース時にどうなるかわかりませんが、このままリリースされるとうれしい反面非常に微妙な機能になっちゃいそうです。
と、ベータ時点のことを嘆いていてもしょうがないので、いまあるものを最大限に活用できるようなネタを今日は1つ書こうと思います。
Windows Azure ロールインスタンスのActive Directoryドメイン参加
さてどんなネタにしようかな?というところなんですが、コンシューマ向けのSaaS等と違い、自社内のサービスのクラウド化などを考えると、認証はやっぱりActive Directoryドメインを使いたい、というのが大半のSIerやエンドユーザーの思うところじゃないでしょうか。というかそういうことにしておいて今日は話を進めます。
Active Directoryの認証回りの仕組みや、統合されたID、SSO的な仕組みなどを最大限活用しようとするとどうしてもActive Directoryドメインへの参加が必要になってきます。
通常のオンプレミスのWebサーバー等であれば難なく参加したり、あまり意識することなくWindows認証が使えるのでいいのですがことWindows Azureとなるとそうも言えません。
ネットワーク的には間にインターネットやRPCが通らないファイアウォールなどいくつもの障壁があるわけですね。
で、そこはさすがにマイクロソフト。Windows Azure ConnectにはあらかじめActive Directoryドメインに参加するための機能が備わっています。
ただし、この機能が意外と罠です。最初に制約事項を少し挙げた通り、Windows Azure Connectを利用してVPNをはるためには専用のWindows Azure Connect Endpointソフトウェアのインストールが接続先のコンピューターにインストールしないといけないのですね。
で、IPSecで暗号化され不要に外部から接続されないとはいえそのコンピューターはクラウドと接続しちゃうわけです。またIPv6アドレスも付与されますので(PPP接続したようなイメージなる)、本運用してるドメインコントローラーにそんなことするのはちょっとイヤン。
お堅いSIerなら断固お断りしますレベルです。
えーじゃぁせっかくのドメイン参加機能が使えないの?あるだけなの?なんなの?(ry
という方に今日はいいネタを提供します。
前置きが長くなりましたが、Windows Server 2008のドメインコントローラーには新しい機能として読み取り専用ドメインコントローラー(RODC)機能が追加されました。
こいつは何者かというと読んで字のごとく読み取り専用なドメインコントローラーで、一般的には管理者が不在なブランチオフィスやネットワーク的にそれほどセキュアでないDMZ等に設置されることを想定したドメインコントローラーです。
RODCを使うと書き込みできませんから、不用意にアカウントを追加されたりもしないですし、機能的にも必要最小限(認証やディレクトリの照会だけとか)になっているので何かあっても比較的安心です。
さてこれで万事解決か?というとそうでもないのですよね。RODCはその名の通り読み取り専用ですから、クライアントコンピューターのドメイン参加もRODCではできない(コンピューターオブジェクトの作成ができない)という、非常に理にかなった制限があります。オワタ。
じゃぁ結局使えないじゃん!となりそうですが、ちゃんと回避策があって、少しの運用の手間でRODCで安全に公開しつつWindows Azure Connectを使ってActive Directoryに参加させることができます。
ということで、以下本題。RODCを使ってWindows Azure ホストサービスをActive Directoryドメインに参加させる手順を載せていこうと思います。
いやぁ。字ばっかりですね。
Windows Azure Connect環境の準備
今回想定する環境はこんな感じです。
まず既存のActive Directoryドメインに追加のドメインコントローラーとしてRODCをインストールします。
この時、Windows Azure Connect Endpoint ソフトウェアをインストールするので、英語版のWindows Server 2008(今回はR2)をインストールします。
RODCにするにはDCPromo等でActive Directoryの構成ウィザードを実行する際に読み取り専用です、とチェックつけるだけなので非常に簡単。らくちん。割愛します。
さて無事RODCとなりました。ここではより現実的なシナリオにするために、Active Directoryのサイトも分けました。(ただ検証環境は同一ネットワーク内にいるのであまり厳密ではないのですけどね)
追加したRODCにはWindows Azure Connect Endpointソフトウェアをインストールしておきます。
このあたりWindows Azure Connectの設定方法など、Windows Azure Connectを利用するまでの手順はざっくり省略します。MSの安納様が詳しく記載されていますのでそちら参照。
- 【Azure for ITPro】Windows Azure Connect(Virtual Network)を使ってみる (1)
- 【Azure for ITPro】Windows Azure Connect(Virtual Network)を使ってみる (2)
- 【Azure for ITPro】Windows Azure Connect(Virtual Network)を使ってみる (3)
で、適当にWebロールプロジェクトでも作ってWindows Azure Connectの設定(といってもアクティベーションコード入れるだけ)してデプロイします。いちおう次の手順でWindows Server 2008 R2でないといけない操作があるのでGuest OSは2.xにしておいてください。ついでにサーバー上で作業しますのでリモートデスクトップも有効にしておきます。
その後Windows Azure Connectグループを作成してRODCのエンドポイントと、デプロイしたホストサービスを追加します。(グループを設定するまでWindows Azure Connectの接続は確立しません)
以上で環境の準備は終わりです。
Windows Azure Connectでドメイン参加は?次の手順で手動で実施します。
Windows Azure ホストサービスのドメイン参加
さて先ほどから述べている通りRODCは読み取り専用なわけですからRODCに対してドメイン参加しようとしてもエラーが発生して参加できません。
さてじゃぁどうするかというと、何のことはないActive Directoryに対し事前にちゃんと準備しておけばRODCだけしか通信できなくてもActive Directoryドメインに参加できるわけですね\ノ’∀ン ヒャッホウ
例によって事前準備の細かい話と、ドメイン参加に必要なスクリプトはMS安納様のサイトから確認・取得しておきます。
- コンピューターアカウントの事前作成
まずコンピューターアカウントを事前にActive Directory上で作成します。書き込み可能なドメインコントローラー上等で以下のコマンドを実行します。net computer \\RD00155D38234E /add
\\<Azureのインスタンスのコンピューター名 で実行します。これでActive Directory上にコンピューターアカウントが作成されました。
- コンピューターアカウントのパスワード設定
次に作成したコンピューターアカウントにパスワードを以下のコマンドで設定します。net user RD00155D38234E$ Password1!
Azureのインスタンスのコンピューター名の後ろに$がついていることに注意してください。コンピューターアカウントは$つきますので。あとパスワードは任意で。
- コンピューターアカウントのグループ所属
作成したコンピューターアカウントをAllowed RODC Password Replication Groupグループのメンバに追加します。
Active Directoryユーザーとコンピュータースナップイン等を使用して追加しましょう。 - パスワード同期
このままだと設定したパスワードがRODCにキャッシュされていない(=ドメイン参加時に怒られる)ので、同期しておきます。
- Active Directoryユーザーとコンピュータースナップインを使用してRODCのプロパティを開きます。
- Password Replication PolicyタブのAdvancedボタンをクリックします
- Prepopulate Passwordsボタンをクリックして先ほど作成したWindows Azureのコンピューターアカウントを追加します。追加後、正常にパスワードが同期され一覧に表示されれば完了です。
- ドメイン参加
さて次はWindows Azure上にリモートデスクトップで接続し作業します。 - MS安納様のサイトよりVBScriptをダウンロードしWindows Azure上に保存します。
- 以下のように実行します。
joindomain.vbs /domain yourcompany.com /machinepassword Password1! /readonly /dc rodc.yourcompany.com
- ここでのポイントは/readonlyを指定しているのと、接続先のRODCのFQDNを指定しているところになります。/dcでRODCのFQDNを指定しないと、参加先のドメインを検索できませんのでエラーとなりますので注意が必要です。
- 正しく実行されると以下のようになります。
- Welcome to the domain~のメッセージが出て入ればドメイン参加はできています。そのままOSを再起動します。
以上で設定は完了です。手間はかかりますが意外と素直に進みますね。
さてWindows AzureのロールインスタンスのOS再起動後、ドメインに参加できていますのであとは煮るなり焼くなり好きなようにすることができます。
確認手段はいろいろありますが、IISのWebアプリケーションをWindows認証にしてアクセスし、Active Directory上のユーザーでアクセスするのがわかりやすいかと思います。
ちゃんとActive Directoryドメインのユーザーで認証してWindows Azure上のアプリケーションが動いていますね。
ぶっちゃけダブルホップの問題を気にしないのであればWeb.configで認証をWindowsにするだけですので大した手間なくWindows Azure上でWindows統合認証を使うことができます。
まとめ
100%勢いだけの文字だらけの記事で恐縮ですが、Windows Azure Connect+RODCで比較的まともな運用ができそうな気がしてきました。
ポイントとしては
- RODCを使う
- Windows Azure Guest OS 2.x を指定する
- Windows Azure Connectのドメイン参加機能は使わない
- 手動でActive Directoryドメインに参加する
となりました。
自動的にドメイン参加できないけど、あまり勝手に参加されても困りますのでオンプレミス連携である程度管理下に置くような状況だと、かえってこちらのほうがいいのかもしれません。初回だけやってあげればそうそう再設定が必要になることはないですしね。(Guest OSの自動アップグレードでどうなるかは怪しい)
これにCLR/HのLTでやったKerberos認証の設定も行えば企業内Windows Azure活用はそれなりにまともなレベルになるんじゃないかなと思います。
※Kerberosの話は今回以上に長くなることが容易に想像できますので、気分が折れなければそのうち書こうと思います…
・・・・
まぁ、なんというか、MS安納様のネタで自分のネタを起こすというケシカラン内容ではありますが今日はこの辺で。
ピンバック: Tweets that mention Windows Azure Connect って実際どうなの « ブチザッキ -- Topsy.com
>MS安納様のネタで自分のネタを起こすというケシカラン内容ではありますが今日はこの辺で。
なーにをおっしゃいますか。
私はあくまでネタ振りですから。
ガンガンお願いします!