Blob Share ~ Windows Azure を使ったセキュアなファイル共有 ~ クラウドカバー Episode 63
今回のクラウドカバーは Wade 謹製の Windows Azure アプリケーション「Blob Share」。
実は既に Dog Fooding よろしく、マイクロソフトのクラウド軍団の情報共有の手段として利用されています。
ACS(Access Control Service)を利用したこのファイル共有のソリューション、CodePlex でコードが共有されていますので、実際にファイル共有の手段として使うもよし、ACS のサンプルとしてコードを読むもよし、ぜひご活用ください。
ではいつものようにニュースから。
◆ How to Clean Up Old Windows Azure Diagnostics
最初のトピックは Windows Azure の診断(Diagnostic:ダイアグノスティック)ログの削除に関する David Aiken のブログ。
Windows Azure 管理用の PowerShell コマンドレット(cmdlet)を使用して、診断ログを削除するためのスクリプトと、その解説が行われています(Tip として、最後の削除を実行するコマンドをコメントアウトすることで、確認に使用する方法も紹介されています)。
診断ログを多用されている方は一度チェックしてみてください。
◆ Windows Azure Toolkit for Windows Phone v1.3.1
Wade による Windows Phone 用の Windows Azure Toolkit のアップデートのお知らせです。
Windows Azure SDK のアップデート、および Windows Phone の Developer Tool の正式版リリースに伴う対応が主なポイントですが、2つの新しいサンプルも追加されています。
Nuget を使ったモジュールインストールへの対応もきっちり進めていたり、さすが Wade、感じのいいプロジェクト進行です。
◆ How to Block Un-validated Windows Azure Deployments
“David again” ということで、再び David Aiken のブログから。
Windows Azure の SDK1.4 / 1.5 においては、Windows Azure の配置時に構成のチェックを行い、問題がありそうな場合には警告を出すようになっています。
ただ、警告のみなので、そのまま配置を行ってしまい、配置後に問題が起こってしまうことも、、、、
ということで、David のこのポストでは、構成確認の際に問題があった場合に「警告」ではなく「エラー」として報告させる方法が紹介されています。
◆ How to Easily Enable Windows Azure Diagnostics Remotely
3たび David のブログから。
Windows Azure の診断ログを PowerShell の Cmdlet を使ってリモートから管理する方法が紹介されています。
Windows Azure のイベントログや、IIS のログ等、様々なログの管理方法が紹介されているため長めのエントリですが、効率的な管理を行うに当たっては有用な情報かと。
◆ Editing a Local Windows Azure Project with the Emulator Running
クラウドカバーの準レギュラー的存在、Nathan Totten のブログから。
Nathan 自体が今まで気付かなかっただけで、SDK 1.3 あたりからあった機能だね、ということで紹介されているのは、Web Role のアプリケーションデバッグにおいて、コード変更時にエミュレータの再起動が不要になっているね、という話。
Full IIS への対応のおかげで、IIS を使用する Web アプリケーション(Web Role)では、Azure エミュレーターとの結合度が疎になったため、Web アプリケーション部分だけの更新が容易になっています。
このブログのコメントで Steve が言及しているように、エミュレーターの機能を必要としないデバッグであれば(純粋な Web アプリケーションとしての動作確認であれば)、Azure プロジェクトではなく、Web アプリケーションのデバッグとしてのみデバッグ起動する(ソリューションにおいて、スタートアッププロジェクトの設定を変更する)、という方法もあるようです。
さていよいよ今回の本題、BlobShare の話題へ。
Blob Share は社内で情報共有のための仕組みが必要になったのが、作成のきっかけ。Skydrive でも ID を利用したセキュアなファイル共有が可能ですが、1ファイルあたりの容量の上限があったりするため、Azure のアプリケーションとして作っちゃえ、と作成されたもの。
CodePlex のプロジェクトとしては珍しく、ドキュメントもそろっています
Blob Share プロジェクトでは、アプリケーションの利用までのステップを簡単にするために、設定関連の情報をコンフィギュレーションファイルとしてまとめだしている点が特長です。
XML ベースなコンフィギュレーションファイルを編集後、Setup.exe を起動すると、(最近 Azure 系のツールではおなじみになってきました)依存関係の確認を行ってくれ、不足している場合には必要なソフトウェアのインストールポイントを教えてくれます。
依存関係が確認できれば、先ほど設定したコンフィギュレーションの値に基づき、アプリケーションの設定値等の更新や、DBの確認等が開始されます。
セットアップが終了すると、Blob Share のソリューションにおいて必要な設定情報が更新されています。下記は、Wade が今回作成したソリューションの cscfg ファイル(画像上一部の情報が消されています)。
さて、ローカルPCで実行を開始した Blob Share。一番最初は管理者の確認を行います。
まず、ログインアカウントとして、Windows Live、Yahoo!、Google の ID を受け付ける設定になっています。Wade は Live ID でログインを実行。
すると管理者としての確認画面に遷移します。
この画面において管理者の秘密情報(Bootstrap Administrator Secret)として、文字列の入力を行います。この Administrator Secret は、コンフィギュレーションファイルの中であらかじめ設定しておく値で、これを使用することにより、Blob Share のアプリケーション中に管理者の ID 情報等を埋め込んでおく必要がなくなります。また、この Administrator Secret は初回の確認後、使用できなくなるため、よりセキュアな運用が可能になっています。
さて、管理者の設定が終わると、再度ユーザーとしての認証画面に遷移します。
改めて認証画面で認証を行うと、Blob Share のユーザー画面に遷移します。Blob Share では、ビデオやプレゼンテーションのようなサイズの大きなファイルを共有したり(”Blobs” メニュー)、Blob の塊を管理したり(”Blob Sets” メニュー)、ユーザーの役割を設定しておいたり(“Roles” メニュー)、ユーザーの招待等の管理を行うことが可能です。
さて、次に登場するのは、実際に Wade が中心となって、マイクロソフトのクラウド軍団で利用しているサーバー https://blobshare.dpe.ms/ の画面。
早速ログインしようとすると、先ほどローカルで実行していたアプリケーションに比べ、Facebook のアカウントと、そして、”Microsoft” のアカウント メニューがあります。
“Microsoft” のアカウントメニューでは、ACS の機能により Microsoft 社内にある実運用環境の ADFS と連携し ID 統合を実現しています。
Wade が “Microsoft” のアカウントメニューをクリックすると、ローカルPCに保存されている Microsoft 社員のクレデンシャルを使用して、ID/Password の入力なしに Blob Share にログインします。
さて、Wade は管理者なので、新しいユーザーの追加が可能です。
招待したいユーザーの名前と、招待(Invitation)コードを送りたいメールアドレス、またユーザーに付与したい Role を選択して、招待メールを送りましょう。
Blob Share では、招待コードと、招待コードを送るメールアドレスは関連付けていません。
つまり、live メールに招待メールを送ったとしても、そこに記述されている招待コードを使って、別のアカウント情報でユーザー登録を行うことが可能です。
さらに、ユーザーが登録を行う際には、ACS においては各 ID プロバイダー(Live ID や ADFS 等の認証を行う主体)から発行される ID 番号(Name Identifier) をDBに登録しています。つまり、メールアドレスを ID としては利用していない作りになっています。
初回のユーザー登録後の利用においては、「ユーザーが Blob Share にアクセスする –> ユーザーが使用する ID プロバイダーを指定し、そこで認証を受ける –> 認証に成功したユーザーは ID プロバイダーのサイン入りの ID 番号(Name Identifier)を受け取るのでそれを ACS 経由で Blob Share に渡す –> Blob Share は渡された Name Identifier を基にユーザーのアクセス管理を行う」、といった手順でファイル共有が行われます。
また、Blob Share では通常のファイル共有の機能だけでなく、ユーザーのアクティビティ、Blob のアクティビティ、Blob Set のアクティビティ、といった情報を閲覧することが可能です。下記はユーザーのアクティビティに関するレポート。
また、ロール単位でのアクセス管理も画面から簡単に行えます。ここではアクセスの日付設定(Expiration Date の設定)も可能です。
今回のクラウドカバーでは駆け足でポイントだけの紹介になりましたが、機能満載な Blob Share は CodePlex でコードから公開されていますので、ぜひ皆様ダウンロードしてコードを確認してみてください!
ということで最後は恒例の Tip of the week へ!
今回のネタは Steve のブログ「Packaging an Executable as a Windows Azure Application From the Command Line」から。
Visual Studio を使用せずに、Windows Azure SDK だけインストールしている環境でコマンドラインを使って OSS なソフトなどを動かすパッケージです。
基本的な使い方としては、github からダウンロードしたパッケージを展開し、build、run、pack のコマンドを実行するだけ。
build はローカル実行用のバイナリを作成するコマンドで、その後 run するとローカルで実行行われます。
また、pack では Windows Azure 配置用のパッケージが生成されます。
今回の github のコードではローカルでの実行を行うと Hello World な画面が出ますが、これは WorkerRole のフォルダにある Web サーバー Mongoose が起動した画面です。Worker Role のフォルダを確認すると、run.cmd なシェルと、Mongoose 本体の exe、そして index.html なファイルが置かれています。
さて今回 Steve が用意したパッケージの中身ですが、コンフィギュレーション設定で、RoleEntryPoint で run.cmd を起動するように設定しているアプリケーションになります。これは前回のクラウドカバーの Tip of the Week で Nathan のテクニックとして紹介した手法ですね。
で、このパッケージの利用者は、run.cmd の中で起動したいアプリケーションのコマンドを書いておくだけです。
今回の run.cmd では、以下のように Mongoose が起動されるコマンドが書かれています。
start /w mongoose-3.0.exe -r . -p %ADDRESS%:%PORT% -e error_log.txt
なお、今回のコマンドでは、ADDRESS と PORT を環境変数から実行時に取得し、それを用いて Mongoose の起動を行うように設定しています。
以上でクラウドカバー Episode 63、Blob Share の紹介は終了です。
Enjoy Azure!