ASP.NET 5 (CTP5) のプロジェクトを Azure Websites で動かす

タイトルの通り。前回せっかくDocker on Ubuntu用に作ったのでそのままWebsitesで動かしたいと思います。

やり方は2通り。

  • Visual Studio 2015 (CTP5)から直接発行する
  • ASP.NET5 (CTP5)なソースがあるGit(GitHub)からソース連携して発行する

※Docker on Ubuntu用のproject.jsonなどは前回のPost参照で

結論から言うとVSからの直接発行は何の問題もなし。すんなり動作します。

でGit連携のほうはちょっとだけコツが必要。

How to

Websitesの構成でアプリケーション設定にSCM_KRE_VERSIONを追加し、CTP5用のバージョン(1.0.0-beta2)を指定します。

image

これだけ。

x64にしたりランタイム全部持ってくる場合とか用(?)にSCM_KRE_ARCHやSCM_KRE_CLRとかの引数もあります。VS2015でプロジェクトのプロパティみたときのTarget KRE Versionで指定するあれを分解した感じですね。

※SCM_KRE_VERSIONを指定しないとbeta1が使われてCTP5だと500エラーになります。

※デプロイは一応成功する

まぁそんなわけで、設定してあげてあとはGit連携すればちゃんと動作するようになります。

一応これでASP.NET5 CTP5をWindowsでもLinuxでもAzure Websitesでも動作させられるようになりましたね。理屈的にはMac OS上でも動作すると思いますが環境ないのでわかりません。

細かい話はきっとしばやん先生が解決してくれると思います。あとこちら参照。

Azure Websites の認証/承認機能

毎年恒例アドベントカレンダーですが、ちょっとマイナー系(?)なContribution License Agreement (CLA)まわりを書こうと思ったらまさかのネタ被りしたので違うこと書きます(未着手だったので問題はない)

というわけで、この記事はAzure Advent Calendar 2014 の10日目の記事です。ちなみに過去こんな感じでやってます。

  • Windows Azure Advent Calendar 2013
  • なんかその年の潮流というか雰囲気がわかって見返しても楽しいですね。(しかし時の流れは無情だな)

    さてさて、今年はAzure Websitesにひっそりと追加されている認証/承認機能(Preview)を試してみたいと思います。公式的にはこちらを参照ください。

    続きを読む

    シアトル滞在記 (3) – 帝国兵氏との対談編 ~ みらいをおもふ

    とうわけで雑記っぽいのその3。

    じつは延泊した理由の1つでもあるのですが、某アレ開催期間中はなんだかんだで時間が取れないのでゆっくり話したりできないなーというのがありまして。なのでちょっと多めにこちらにいて、Redmondで働く帝国兵氏( @superriver )とじっくりお話してきました。(対談風にちょっとしてみたけど。。。なお文章中の会話は脳内保管したものなので本人原文ママと異なる場合がございます)
    ※帝国兵氏に忘れ物を届けにいくというミッションもあったことはナイショ。

    続きを読む

    Azure WebサイトのUpdate

    少し前から既にPreviewとれていましたが、WebJobsがGAしました。

    WebJobs SDKは1.0が今RCですね。結構勢いがある機能じゃないでしょうか。

    リソースはこちらにまとまっているので参考に。

    しばやん先生も記事にしていました。

    ちなみにしばらく見ない間にジョブの詳細みたりログみたりもかなりよくなってますね。

    imageimageimage

    ※ログビューアーはSite Extensionsですね

    続きを読む

    Azure WebサイトのSSL 3.0問題

    いろいろありましたがDavid Ebbo先生がAzure WebサイトでSSL 3.0をオフにする方法を用意してくれました。(正確にはオフではなく拒否ですが)

    やりかたは2パターンあります。とりあえずSSL 3.0が有効な状態を見ときましょう。(curlでやるとクールだけどIEでとりあえず。)

    image

    image

    TLSがOnだとそっち使っちゃうので一時的に。で、Azure Webサイトにつないで見ます。

    image

    こんな感じでSSL 3.0です。サイトは普通に見えます

    image

     

    1. Disable SSLv3 Extensionを使う

    KuduにアクセスしてSite ExtensionsでDisable SSLv3をインストールします。

    image

    プレビューポータルだともう少し簡単です。(わざわざKuduにつながなくても良い)

    image

    簡単です。プレビューポータルだと再起動もされるので簡単ですね。ではブラウザでつないで見ましょう。

    imageimage

    403になりました。TLS有効にするとちゃんと見えます。

    ※ちなみにこのExtension有効にすると、Extension消しても403になっちゃう気がします。。

     

    2. URLRewriteを使う

    もう1つの方法として提示されたのがURLRewriteを使う方法です。Azure Webサイトのフロントエンドのロードバランサーが、クライアントがSSL 3.0を要求してきたときに X-Forwarded-SSLv30 という特別なリクエストヘッダを付与してくれるので、こちらを見て判断する方法です。

    image

    (TLSで接続している場合などはこのリクエストヘッダが付与されません)

    以下のようなルールをWeb.configに追記します。

    <configuration>
    <system.webServer>
    <rewrite>
    <rules>
    <rule name="Block SSL3.0" patternSyntax="Wildcard" stopProcessing="true">
    <match url="*" />
    <conditions>
    <add input="{HTTP_X_FORWARDED_SSL30}" pattern="1" />
    </conditions>
    <action type="CustomResponse" statusCode="403" subStatusCode="900" statusReason="Forbidden" statusDescription="SSLv3 connections are forbidden by this site" />
    </rule>
    </rules>
    </rewrite>
    </system.webServer>
    </configuration>
    

    こんな感じになります。

    image

    Web.configだけで設定のOn/Offできるので、こちらのほうが使い勝手がいいかもです。(但しステータスコードが例だと403になるだけなので注意 ※CustomErrorsとか設定してないとという話)

    クラウドサービスや仮想マシンについては以前書いた通りです。

    SSL 3.0が完全に使われてない技術であればWebサイトもホスト側ですぱっとオフにできるのでしょうけど、そうじゃないクライアントがあるのでサービス側としてはこのような形でエラーにさせる方向なのでしょうね。
    完全にクライアントの問題とも言えませんがクライアント側で少なくともSSL3.0使わなければ良いはずですので、サーバー側でどうするかは状況によりけりということでしょうか。(少なくとも現状は)

    あ、ちなみにモバイルサービスもKudu使えるはずなので、同じ手段で対策できるかと思います。

    追記

    URLRewriteでSSL3.0接続のときに403を返しつつカスタムエラーでユーザーにSSL3.0の無効化を促すようにする場合はこんな感じにすると良さそうです。

    カスタムエラー用のCSHTML

    @{
      Response.StatusCode = 403;
    }
    <!DOCTYPE html>
    <html>
    <body>
     <h1>SSL 3.0を無効にしてTLSを有効にしてください</h1>
    </body>
    </html>
    

    Web.config

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      <appSettings>
        <add key="webpages:Enabled" value="true" />
      </appSettings>
        <system.webServer>
        <modules runAllManagedModulesForAllRequests="true"/>
        <httpErrors errorMode="Custom">
          <remove statusCode="403" />
          <error statusCode="403" path="/403.cshtml" responseMode="ExecuteURL" />
        </httpErrors>
        <rewrite>
          <rules>
            <rule name="TestBlock" patternSyntax="Wildcard" stopProcessing="true">
        <match url="*" />
        <conditions>
       <add input="{HTTP_X_FORWARDED_SSL30}" pattern="1" />
        </conditions>
              <action type="CustomResponse" statusCode="403" subStatusCode="900" statusReason="Forbidden" statusDescription="SSLv3 connections are forbidden by this site" />
            </rule>
          </rules>
        </rewrite>
      </system.webServer>
    </configuration>
    

    結果

    image

    静的ファイルだとステータスコードが200に上書きされるようなので、CSHTMLで強制的に403を返すようにするようです。

    たけぱらさんありがとうございます。

    これでSSL3.0の時はエラー扱いにして且つユーザーに注意を促すことができますね。

    ※ ただ結局SSL3.0で繋いじゃってるので脆弱な状態といえば脆弱です。注意しましょう。まぁ注意を促したりするための対応なのでクライアント側で気を付けましょうね。ということです。

    Azure Webサイトちょっと試したいだけだけどクレカいるの?

    普通にMicrosoft Azureでお手軽にWebサイトちょっと試してみたいなぁ~!と思っても最初のサインアップ時にクレカ要求されて悲しい思いした人いませんか。

    そんなあなたに朗報。なんとクレカなしでWebサイトをお試し作成できるサービスができました。

    さすがWebサイトといえばDavid Ebbo先生です。

    使い方は簡単。Microsoft アカウントを作成して(これはクレカいらずの無料)、以下のサイトへアクセス!

    作成したい言語とテンプレートを選択して「Create」しましょう!

    image

    なんと!あっというまにWebサイトができました!

    image

    Gitで接続することもできるし、お手軽なのは「Edit with Visual Studio Online」のリンクからVisual Studio Onlineで操作する方法ですね。

    image

    こんな感じで編集できます。

    image

    Oh! 簡単!

    こんな素晴らしいサービスがあるなんて~!

    といいたいところですが、1点だけ注意事項が。

    このサービスで作ったWebサイト、30分だけ有効なのです。

    image

    ちょっとテストしてたらすぐタイムアップですね。(ローカルで作って試した後、Gitでデプロイとかそうのなら有効活用できそう?)

    まぁポータル見たり設定を変えたりはできないので、用途はだいぶ選ぶのですがWebサイトのお手軽さを是非簡単に体験してもらえたらと思います。