SQL Azure: SQL Azure をセキュリティで保護する

セキュリティを確保するためのツールと方法は異なりますが、ホストされたソリューションにとってもセキュリティは重要です。

Joshua Hoffman

近年、クラウド コンピューティングは IT インフラストラクチャの特性として欠かせないものになりました。今後も、オンプレミスのコンピューティングが重要な役割を担うのは間違いありませんが、ホストされたソリューションは、組織の機敏性を実現するうえで非常に重要視されているスケーラビリティ、融通性、およびコスト削減に役立つものとして注目されています。このことは、特にデータ管理について当てはまります。

SQL Azure は、そのようなクラウド プラットフォームの好例です。SQL Azure は、データを格納、管理、および分析するための強力でなじみのあるインフラストラクチャで、クラウド コンピューティングのメリットも享受できます。このホストされた共有のインフラストラクチャは、直接コストと間接コストの削減に役立ち、従量課金制モデルにより効率を高めることが可能で、高可用性とフォールト トレランスの機能を備えています。

クラウド コンピューティングには多くの利点がありますが、SQL Azure のようなクラウド ベースのソリューションにデータを移行すると、セキュリティなどの IT 管理の概念に取り組む方法に変化が生じます。セキュリティ モデルが異なる場合はありますが、アクセス制御、認証、暗号化の方法など、データの安全性を可能な限り高めるために考慮しなければならない要素は多数あります。

SQL Azure 使用の開始

SQL Azure を使ったことがなくても、簡単に使い始めることができます。SQL Server Management Studio など、従来の SQL Server 管理ツールになじみがある場合はなおさらです (SQL Server 2008 R2 以降では、SQL Server Management Studio を使用して、SQL Azure インスタンスを管理できるようになりました)。

まず、Microsoft Online Services カスタマー ポータルにアクセスして、Windows Azure プラットフォームのアカウントを設定します。アカウントを設定すると、Windows Azure、SQL Azure、および Windows Azure AppFabric を含む Windows Azure サービスにアクセスできます (Azure AppFabric では、開発者が組織やネットワークの境界を越えてアプリケーションやサービスに接続するための手段が提供されます)。

アカウントを設定したら、sql.azure.com から SQL Azure のコントロール パネルにアクセスできます。SQL Azure の新しいインスタンスを作成するには、[新規データベース サーバー] をクリックします。

ネットワーク アクセスの制御

特定のコンピューターからのアクセスを許可しない限り、データを保護するため、SQL Azure ファイアウォールでは、データベースへのすべてのアクセスを禁止します。SQL Azure ファイアウォール経由のアクセスは、発信元 IP アドレスに基づいて行われます。Windows Azure Platform Management Portal (図 1 参照) から、または直接 master データベースのストアド プロシージャで管理できます。

SQL Azure ファイアウォールの規則を構成するには、次の手順を実行します。

  1. Windows Azure Platform Management Portal にサインインします。
  2. 左ペインの [データベース] をクリックします。
  3. 左ペインで、サブスクリプションを展開し、ファイアウォールの規則を構成する必要がある SQL Azure サーバーをクリックします。
  4. [ファイアウォール規則] をクリックし、規則の一覧を表示します。
  5. 新しいファイアウォールの規則を作成するには、[追加] をクリックします。他の Windows サービスが SQL Azure サーバーにアクセスできるようにするには、[他の Windows Azure サービスによるこのサーバーへのアクセスを許可する] チェック ボックスをオンにします。IP アドレスの範囲 "0.0.0.0 – 0.0.0.0." を指定して規則を作成します。規則の更新と削除も同じ手順で行えます。

: すべてのファイアウォールの規則には、一意の名前を付ける必要があります (大文字と小文字は区別されません)。

図 1 SQL Azure におけるファイアウォールの規則の構成

SQL ストアド プロシージャを使用してファイアウォールの規則を構成する方法の詳細については、「SQL Azure ファイアウォール (英語)」の T-SQL を使用してファイアウォールの規則を変更する手順のセクションを参照してください。

SQL Azure サービスは、TCP ポート 1433 経由で利用できます。既存のファイアウォール ポリシーによっては、TCP ポート 1433 経由での外部へのアクセスを許可するようにクライアント コンピューターを構成しなければならない場合もあります。詳細については、「SQL Azure ファイアウォール (英語)」のクライアント側のファイアウォールを構成する手順のセクションを参照してください。

SQL Server 認証

SQL Azure の認証方法は、従来の SQL Server 認証に基づいています。Windows 認証 (統合セキュリティ) はサポートしておらず、SQL Azure に接続するたびに、資格情報を提示する必要があります。

SQL Azure で新しいデータベース サーバーを作成するときには、サーバーレベル プリンシパルのログインとパスワードを作成できます。これは SQL Server のシステム管理者アカウントに相当します。SQL Azure のデータベース マネージャーまたは SQL Server Management Studio 2008 R2 のいずれかで、T-SQL を使用して追加のログインを作成できます。

CREATE LOGIN コマンドを使用して、master データベースでログインを作成または削除します。たとえば、SQL Azure のデータベース マネージャーまたは SQL Server Management Studio を使用して master データベースに接続し、次のクエリを実行します。

--"testlogin" という名前のログインを作成します
CREATE LOGIN testlogin WITH password='Passw0rd!';

図 2 のコマンドを使用して、既存のログインをクエリできます。

図 2 SQL Azure のデータベース マネージャーを使用した SQL Server ログインのクエリ

ログインを作成したら、ログインと関連付けられたデータベース レベルのユーザーを作成し、各ユーザーに特定のデータベース レベルのアクセス許可を割り当てることができます。特定のデータベースにユーザーを作成するには、当該データベースに接続し、次のコマンドを実行します。

CREATE USER testuser FROM LOGIN testlogin;

その後、次のコマンドを使用してアクセス許可を割り当てることができます。

EXEC sp_addrolemember 'db_datareader', 'testuser';

すべてのロールの一覧については、「データベース レベルのロール」を参照してください。CREATE/ALTER/DROP LOGIN ステートメントまたは CREATE/ALTER/DROP USER ステートメントを (FOR/FROM LOGIN オプションを指定して) 実行するときには、各ステートメントは T-SQL バッチで唯一のステートメントでなければならないことに注意してください。他のステートメントが実行されていると、エラーが発生します。

接続の暗号化

SQL Azure では、表形式のデータ ストリーム (TDS) を使用して、SSL 接続経由でデータを転送します。また、暗号化されていない接続はサポートしておらず、証明機関が発行した署名証明書を使用します。これらの要素はすべて、セキュリティで保護されたデータ転送を可能にし、man-in-the-middle アタックを防止するのに役立ちます。

暗号化ハンドシェイクは、TDS プロトコルの PRELOGIN ストリームで行われます。SQL Azure と通信するすべてのクライアントでは、暗号化が必要になります。これには、SQL Server Management Studio と ADO.NET アプリケーションも含まれます。

SQL Server Management Studio からの接続を暗号化するには、次の手順を実行します。

  1. SQL Server Management Studio を起動します。
  2. オブジェクト エクスプローラーで [接続] をクリックし、[データベース エンジン] をクリックします。
  3. [サーバーへの接続] ダイアログ ボックスの [接続プロパティ] タブをクリックします。
  4. [暗号化接続] チェック ボックスをオンにします (図 3 参照)。

図 3 SQL Server Management Studio における SQL Azure への接続の暗号化

ADO.NET アプリケーションのコードで証明書を検証するには、データベースの接続文字列に、Encrypt=True および TrustServerCertificate=False という文字列を指定します。

データの暗号化

今のところ、SQL Azure では、SQL Server でサポートされている標準データ暗号化メカニズムをサポートしていません。これには、透過的なデータ暗号化、非対称キー、対称キー、および Transact-SQL 関数 (ENCRYPTBYPASSPHRASE、DECRYPTBYPASSPHRASE、CREATE/ALTER/DROP DATABASE ENCRYPTION KEY、CREATE/ALTER/DROP MASTER KEY など) が含まれます。

SQL Azure では、アプリケーション レベルで暗号化または暗号化解除を行う必要があります。つまり、アプリケーションでは、SQL Azure からデータを送信または取得する際に、データを暗号化または暗号化解除する必要があります。

クラウドでアプリケーションやデータをホストし始めると、データのセキュリティには常時注意を払う必要が生じます。また、クラウド ベースのセキュリティ アーキテクチャの管理にはかかわり続ける必要があります。セキュリティの必要性が、なくなることはありません。クラウド コンピューティング プラットフォームによって、その手法が変わるだけです。このトピックの詳細については、「セキュリティのガイドラインと制限事項」を参照してください。

アカウントと接続の管理に関するベスト プラクティスに従うと、データをクラウドに移行することで生じるすべての恩恵を受けられるようになります。重要なビジネス データをセキュリティの脅威にさらす必要はありません。

Joshua Hoffman

Joshua Hoffman は、TechNet マガジンの前の編集長です。現在は、フリーランスで執筆活動とコンサルティングを行っており、クライアントにテクノロジとそれぞれのクライアントに合ったマーケティング手法に関するアドバイスをしています。また、市場調査の分野の成長と強化に注力している ResearchAccess.com (英語) で編集長を務めています。現在、ニューヨーク市に住んでいます。

関連コンテンツ