SQL Azure徹底活用の1回目 では、SQL Azureを掘り下げて見ていく前準備としてSQL Azureの概要について紹介させていただきました。今回は、SQL Azureを使用したシステムを運用する際に必ず考慮する必要があるSQL Azureのファイアウォールに焦点をあてます。
SQL Azureファイアウォールの概要
SQL Azureは、マイクロソフトのデータセンターで運用される全世界に公開されたサービスです。そのため、イントラネット内で運用していたオンプレミスのSQL Serverに比べると悪意の第三者から不正アクセス攻撃を受ける機会が増えてしまいます。その機会を減少させSQL Azureの安全性を向上させるために、SQL Azureではファイアウォールが提供されています。
SQL Azureのファイアウォールは、SQL Azureに接続するIPアドレスを制御する方法を採用しています。制御にはホワイトリスト方式を採用しており、初期状態ではすべての接続要求を拒否します。接続を許可したいIPアドレスを明示的にファイアウォール規則に追加することで、追加したIPアドレスからの接続を許可することができます。
Windows AzureにホストしたアプリケーションからSQL Azureに接続したい場合は、接続するIPアドレスに「0.0.0.0」を登録する必要があります(Windows Azure管理ポータルでは、「 他のWindows Azureサービスにこのサーバーへのアクセスを許可する」にチェックを入れます) 。
SQL Azureファイアウォールの特徴
ファイアウォール規則には次のような特徴があります。この特徴が、SQL Azureを使用する際の制限となることがあるので留意する必要があります。
ファイアウォール規則は、規則名で個別に管理できる
ファイアウォール規則は、接続を許可するIPアドレスを範囲で指定できる
ファイアウォール規則は、重複したIPアドレスを登録することができる
ファイアウォール規則は、最大128個まで登録することができる
ファイアウォール規則は、反映するまで5分待つことが推奨されている
ファイアウォール規則を追加する際に、規則名と接続を許可するIPアドレス範囲を登録します。規則名を指定して、特定の規則を削除したり更新することができます。SQL Azureサーバー内で一意の規則名しか登録できませんが、重複したIPアドレスを登録することができます(表1 ) 。
表1 SQL Azureファイアウォール規則の登録例
規則名 IP範囲の開始 IP範囲の終了
テスト1 10.0.0.1 10.0.0.1
テスト2 10.0.0.1 10.0.0.1
テスト3 10.0.0.1 10.20.0.1
テスト4 10.20.0.1 10.50.0.1
テスト5 10.0.0.1 10.255.255.254
ファイアウォール規則は、128個まで登録することができますが、それ以上登録しようとするとエラーが発生します。この状態で追加するには、登録済みの規則を削除する必要があります。
ファイアウォール規則を追加して、すぐにSQL Azureに接続できる場合もありますが、操作内容によっては規則の未登録エラーが発生する可能性があります。マイクロソフトは、規則を追加してから設定が反映されるまで5分待つことを強く推奨しています。
SQL Azureファイアウォール規則の追加方法
接続を許可するIPアドレスをファイアウォール規則に追加する方法は、今のところ次の3種類の方法が提供されています。
Windows Azure管理ポータルでの画面操作
SQL Azure Database Management APIを使用したコマンド操作
T-SQLの発行
Windwos Azure管理ポータルでの画面操作による登録が一番手軽に登録することができます。初めてSQL Azureを操作する場合には、この方法を試すことが多いと思います。Windows Azure管理ポータルのデータベースセクションにある「ファイアウォール規則」ボタンをクリックすると、規則を追加、削除、更新するためのボタンが表示されます(図1 ) 。
図1 Windows Azure管理ポータル上のファイアウォール規則
SQL Azure Database Management APIは、REST APIで提供されている管理用のAPIです。このAPIを使用してファイアウォール規則を追加することができます。ファイアウォール規則をプログラムから追加する場合は、このAPIを使用した方法を使用することが多いと思います。具体的な追加方法と実装例は、MSDNライブラリの「ファイアウォールルールの操作 」を参照してください。
SQL Azureに接続して、masterデータベースに対してT-SQLを発行することで、ファイアウォール規則を追加することができます。この方法は、SQL Azureに接続する必要があるため、まず前述のどちらかの方法でIPアドレスを規則に追加しておく必要があります。具体的なT-SQL構文については、MSDNライブラリの「sp_set_firewall_rule (SQL Azure データベース) 」を参照してください。
SQL Azureを使用したシステムでの考慮事項
いくつかのSQL Azureを使用したシステムで、SQL Azureファイアウォール規則を管理する方法について説明します。
Windows Azureにホストしたアプリケーションからの利用
Windows AzureにホストしたアプリケーションからSQL Azureを使用する場合、ファイアウォール規則で検討事項はありません。Windows AzureからSQL Azureを使用する場合は、規則に「0.0.0.0」のみを追加しておけば使用することができます。
懸念事項としては、「 0.0.0.0」を許可した場合、Windows Azureにホストしたすべてのアプリケーションから接続が許可されてしまうことです。悪意のある第三者によるブルートフォースアタックをするアプリケーションがホストされた場合、ファイアウォールで防御できません。Windows Azureデータセンター内で不正トラフィックを検知し遮断してくれることに期待したいところです。自衛手段としては、万が一に備えて強固なパスワードを設定しておくことです。
イントラネット内から使用するクラサバ形式のアプリケーション
組織内のネットワークからSQL Azureに接続するアプリケーションの場合、多少注意が必要になります。組織のネットワークが固定のグローバルIPアドレスを使用している場合は、あらかじめ登録しておけば問題ありません。しかし、固定のIPアドレスを保持していない場合、どのように運用すればいいのでしょうか。
たとえば、毎朝もしくは数時間おきに対外のグローバルIPアドレスを調べて自動的に追加するような対応が考えられます。もしくは、アプリケーション起動時にIPアドレスを規則に追加し、アプリケーション終了時に規則から削除することが考えられます。
しかし、アプリケーション起動時に都度動的に追加する対応は避けたいところです。ファイアウォールの特徴で紹介したように、追加してから5分時間をおくことや、128個までしか規則を追加できないため、アプリケーション起動時に制御する方式は適していません。
モバイル端末や自宅環境からSQL Azureに接続するサービス
このシステムが一番運用が難しいパターンかと思われます。単にシステムを使用できるだけで良い場合は、ファイアウォール規則に「0.0.0.0 - 255.255.255.255」を追加しておけば、どこからでも自由に使用できるようになります。しかし、この場合ログイン名とパスワードだけの制御になり、セキュリティに不安を感じることがあります。
今のところ、SQL Azureファイアウォール規則が128個までしか登録できず、登録してから5分時間をおく必要がある以上、完全な動的制御での運用は不可能に近い状態です。現時点では、Windows AzureにWCFサービスをホストし、WCFサービス経由でSQL Azureに接続をする対応が、無難でセキュアな接続になるかと思います。
SQL Azure OData ServicesもWCFサービスと同様に利用候補に挙がるかと思います。しかし、SQL Azure OData Servicesは、すでに新規登録は停止し、2012年3月末でひとまずサービス提供を終了することが発表されています。詳細は、SQL Azure Labs を参照してください。
SQL Azure管理ポータル
SQL Azure Database Managerに代わって、機能追加されたSQL Azure管理ポータルがリリースされました。SQL Azure Database Managerでは、Windows Azureから利用できるように規則に「0.0.0.0」のみを追加しておけば利用することができました。SQL Azure管理ポータルからはポリシーが変更され、Windows Azureから利用できるように規則に「0.0.0.0」の登録と、SQL Azure管理ポータルに接続しようとしている接続元のIPの2つを追加しなければならなくなりました。
SQL Azure管理ポータルのリリース時には、一部混乱などがありましたが、現在では上記条件で間違いなく接続することができます。
まずは、Windows Azure Platformを無料で試すためのアカウントを取得しましょう。
さらに詳しい技術情報はこちらから。