CSEncrypt コマンドでパスワードの暗号化

Windows Azure SDK 1.5でリモートデスクトップ接続時に使用するパスワードやらを暗号化するのに使える、CSEncryptコマンドラインツールが追加されました。

Azure SDK 1.5が出る以前はどうだったかというと…

にある通り、パスワード文字列をバイト配列にして証明書読み込んで読み込んだ証明書を使って暗号化して、できあがったものをBase64でエンコードするという超絶めんどい作業をする必要がありました。

[Reflection.Assembly]::LoadWithPartialName("System.Security")
$pass = [Text.Encoding]::UTF8.GetBytes("<Password>")
$content = new-object Security.Cryptography.Pkcs.ContentInfo ?argumentList (,$pass)
$env = new-object Security.Cryptography.Pkcs.EnvelopedCms $content
$env.Encrypt((new-object System.Security.Cryptography.Pkcs.CmsRecipient(gi cert:\CurrentUser\My\<Thumbprint>)))
[Convert]::ToBase64String($env.Encode())

こんな感じですね。

さてこれがAzure SDK 1.5に付属するCSEncryptコマンドだとどうなるかというと。

csencrypt Get-PasswordEncryptionCertificate
コマンドを実行して証明書一覧を表示して拇印をコピーして…

csencrypt Encrypt-Password -CopyToClipboard -Thumbprint "<さっきの拇印>"
コマンドを実行してパスワードを入力するだけ!

あとは出力された文字列を(改行除いて)コピーすればOK!ほら簡単でしょ?(

ちなみに -CopyToClipboard オプションを付けておけば勝手に結果をクリップボードにコピーしてくれます。
※Outputオプションでファイルに出力することもできます。(やっぱり改行はされてますけど)
そのほかにもNew-PasswordEncryptionCertificateオプションで証明書の生成もできるのでお手軽ですね。

ちなみにパスワードを書いたテキストファイルを標準入力として読み込ませれば手打ちしなくてもイイです。

オプションや内容についてはこちらを参照。

というわけでコマンドでやるにも便利な感じになりましたとさ。

Windows Developer Preview をVHDブートさせる

Windows Developer PreviewをVHDブートさせる方法はいろいろありますが、基となるVHDをWindows Server 2008 R2のHyper-V 2.0とかで作ってしまうとそのままじゃブートしません。

※ブートメニューでWindows Developer Previewを選ぶと 0xC0000248 な署名が検証できない云々で⊂ミ⊃^ω^)アウアウ

解決方法は一応ありますが自己責任で、ということで載せておきます。
簡単にいうと、ブートローダ(Winload)がWindows 7のままだとエラーになるわけで、Windows Developer Previewのブートローダ(Winload)になるように修復してあげればいいだけです。

  1. Hyper-V 2.0上でWindows Developer Previewをインストール(※ディスクサイズはVHDファイルを置くWindows 7等の空きディスク容量より少なくなるようにしましょう)
  2. VHDファイルをコピーして Windows OSをVHDブートさせる2つの方法 (@IT) あたりを参考にBCDを弄ります(このままだと上記のエラーになる)
  3. Visual BCD Editor for Windows 7/Vista をダウンロードしてインストールします
  4. ディスクの管理でコピーしたVHDをマウントします
  5. Visual BCD Editorを立ち上げ、「Repair」-「Repair BCD」メニューを選択します
    image
  6. Bcd DriveはSystemのままでWin7Folderを先ほどマウントしたVHDのWindowsフォルダ(Windows Developer PreviewのWindowsフォルダ)を選択して修復します。

以上でブートローダがWindows Developer PreviewのものにかわってちゃんとVHDブートできるようになると思います。

WP_000003

まーWindows Developer PreviewのISOをブートできたらこんなことせずに修復できると思うのですが手元にそういったものはなかったのでこんな方法になりました。

Windows AzureはAutoScaleの夢を見るか?

ちょっと前の話題ではありますが、Microsoft patterns & practicesが提供するEnterprise Library 5.0にWindows Azure Integration Packが追加されています。(現状はPreview版のようですが)

Integration PackとしてはWindows AzureのほかにもSilverlightなどがありますね。

さてこのWindows Azure Integration Packとやらは何ができるんでしょう?

EntLib vNext teaserUsing Enterprise Library 5.0 in Windows Azure(PDF) を見るとEnterprise Libraryで提供されているロギングや暗号化、データアクセス、コンフィグレーションなどのアプリケーションブロックがAzure上でも利用できるようになっているようです。

でEnterprise Libraryなので簡単なコンフィグレーションで環境の差異が吸収できるようになってたりするっぽいですね。なのでこのIntegration Packを使うとOnPremiseからAzureへ、AzureからOnPremiseへの移行とかがしやすくなりそうです。(というかその辺が目的でしょうか)

で、それはそれでいいとして。

目玉としてはWindows Azureに特化した部分としてWindows Azure Autoscaling Application Block(WASABi)が追加されたことです。

わお!素晴らしいですね!こいつを使うとCPU負荷などの利用状況や時間帯などルールを評価してアクション(つまりオートスケール等)ができるようです。

WASABi

まぁカスタムアクションやルールの定義も自由度高いので、そのあたりは柔軟にできそうですね。というかそのためのライブラリだし。

image

想定されるMaxとMinを指定してインスタンス数が予想外に増えないように・下がらないようにルール作ったり、スパイクに対応させたり。
判定材料はCPU負荷などいろいろ構成できますと。

ということでWindows Azureは公式標準機能ではありませんがオートスケールを手に入れたようです。まだPreviewなので、要望がある方は是非Voteってください。

実際に試したい方はNuGetにあがっているのでそちらからもどうぞ。

以下余談です。

このWASABiを使うと確かにオートスケールできそうです。でもWASABiを使ってるアプリケーションのみですよね。単発のLOBなアプリケーションとかならいいんでしょうけど、適用する場所、やり方、運用、ITのあり方なんかは別でちゃんと考えたほうがいいと思います。似たようなことはSystemCenterでもできるわけですし、なんでそっちでも出来るかとかは考える価値はあるかと思います。

まぁ釈迦に説法と思われますが。

あとオートスケールいうならゼロインスタンス機能くれよーーこればっかりはAzure側で対応してくれなきゃ無理!!

Windows Azure AppFabric ACS でカスタムのサインイン画面を作る

Windows Azure AppFabric ACS使ってフェデレーション認証するのはいいけど、味気ないサインイン画面で辟易してる方も多いんじゃないでしょうか。

↓味気ないサインイン画面

というわけで今日はこいつのカスタマイズをしたいと思います。

ゴールとして今回はASP.NET MVC3のログイン画面内で上記のサインイン画面(というかセレクタ画面)を埋め込んでアプリケーションでちゃんと(?)制御できるようにしたいと思います。

続きを読む

Windows Azure SDK 1.5

というわけでWindows Azure SDK 1.5がでましたね。

さくっとインストールしてみましょう。(※Visual Studio “11”やWindows 8ではTools for Visual Studioがインストールできませんでした。Visual Studio 2010が入ってたら行けそうですけど .NET Framework 3.5と4が必要なところでこけそうです・・・)

インストールはWeb Platform Installerからするのが楽ちんなのでそのようにします。
※念のために古いSDKやTools for VSはアンインストールしました。

注意点:Storage EmulatorのDBが更新されるので、必要なデータいれてる人はバックアップしておきましょう。古いDB削除されます。

Azureで検索したら Azure AppFabric SDK 1.5とWindows Azure Tools for Microsoft Visual Studio 2010 – 2011年8月(リリース日が2011/09/14)の2つがでるので追加しましょう。

依存関係はこんな感じです。

日本語期待した人はサヨウナラ・・・

でインストールするとAzure SDK 1.5とAzure AppFabric SDK 1.5、Azure Tools for VSが入ります。
※ASP.NET MVC3 Tools Update Installerが入ってなかったようなので一緒にはいりました。

Visual Studioで見るとちゃんと更新されてますね。

さて、インストールが終わったらStorage Emulatorを起動して初期化しましょう。

更新後はDBこんな感じに。

DevelopmentStorageDb20110816 が今回使ってるDBです。以前のは消えてますので注意。

Compute Emulatorもちゃんと新しくなってます。

あとAzure SDK 1.5ではパスワード(文字列)の暗号化用ツールが追加されました。

今まで手動で証明書指定したり暗号化用のコマンド叩いたり超面倒だったのが一発で!!!(

以前のバージョンで作ったプロジェクトを移行する場合は Microsoft.WindowsAzure.StorageClient.dll を 1.1.0.0 に更新しましょう。

またWindows Azure Connectのプラグインで利用している以下の設定が無くなりましたのでコンフィグから削除する必要があるようです。

   <Setting name="Microsoft.WindowsAzure.Plugins.Connect.Diagnostics" value="" />
   <Setting name="Microsoft.WindowsAzure.Plugins.Connect.DNSServers" value="" />

元ネタ:Windows Azure SDK Release Notes (September 2011)

どう変わったか等細かいところはMSDNにドキュメントがありますが、おいおいということで。

Windows AzureのWeb Roleでセッションを共有する

紆余曲折ありましたが(?)、Windows Azure上のWeb Roleでセッションを共有する方法を簡単に(いい加減に)まとめたいと思います。

  ASP.NET標準 ASP.NET標準 MSDN Code Gallaryのセッションプロバイダ ASP.NET Univarsal Providers High Performance Session State Provider Windows Azure AppFabric Caching
ストア メモリ(InProc) SQL Azure Azure Storage Table SQL Azure SQL Azure Windows Azure AppFabric Caching
作成者 MS MS MS? MS @takepara
@kazuk
MS
SLA 無(ストアはある) 無(ストアはある) 無(ストアはある) 無(ストアはある)
特徴 冗長化・負荷分散しない漢向け 削除をなんとかしたら使えないことはない Table使うので安い 新入り。そつなく利用可。 自作上等。ASP.NET Universal Providerの残念なところを解消 大規模で本気出すなら商用サービスだよね
メリット お手軽高速 お手軽 お手軽で安い? お手軽。RoleやMembershipも使える お手軽 高速。一番早い。
デメリット 冗長化されない・負荷分散されない セッションが削除されない セッションが削除されない。遅い。 セッション削除に難あり 自家製 お金。
追加コスト 無し DB分必要 低(SQL Azureよりは安い) DB分必要 DB分必要 高め(128MB/月で3,933.45円)
パフォーマンス 中の上
その他 パフォーマンスカウンタが付く セッション数の把握はDB見れば可 よくわからない セッション数の把握はDB見れば可 セッション数の把握はDB見れば可 ざっくりした合計セッションサイズがある程度わかる(ただしリアルタイムでは把握できない?)

 

という感じで役に立つかどうかわかりませんがまとめました。いろいろ要件にあわせて選んでくださいませ。

冗長化いらないならInProcとか。
最低限負荷分散したいけど小規模だしコストかけたくないなぁとかならAzure Storage Tableとか。
それなりにちゃんと使いたいとかならHighPerformanceSessionStateProviderとか。
いやー自分で面倒みるの大変だよとかならASP.NET Univarsal Providersとか。
大規模で性能いるんだよお金はあるぜとかならAzure AppFabric Cachingとか。

まぁ他にもMemcached使ったり、自前で負荷分散も対応したInMemoryなプロバイダ作ってもいいでしょうし。

お好みでどうぞ!