Azure SQL Database ファイアウォールを実装する

完了

たとえば、Azure SQL Database または Azure Synapse Analytics 内に "mysqlserver" という名前の新しいサーバーを作成した場合、このサーバー (mysqlserver.database.windows.net としてアクセス可能) のパブリック エンドポイントに対するすべてのアクセスは、サーバーレベル ファイアウォールによってブロックされます。 ここでは、説明を簡潔にするため、"SQL Database" の一言で SQL Database と Azure Synapse Analytics の両方を指すことにします。 この記事は、Azure SQL Managed Instance には適用されません。 ネットワーク構成については、「Azure SQL Managed Instance にアプリケーションを接続する」を参照してください。

ファイアウォールのしくみ

インターネットと Azure からの接続試行は、以下の図に示すとおり、サーバーまたはデータベースに到達する前にファイアウォールを通過する必要があります。

ファイアウォールのしくみの例を示す図。

重要

Azure Synapse は、サーバーレベル IP ファイアウォール規則のみをサポートしています。 データベース レベルの IP ファイアウォール規則はサポートされていません。

サーバーレベルの IP ファイアウォール規則

それらの規則により、このサーバー全体 (このサーバーで管理されているすべてのデータベース) に対するクライアントのアクセスが可能になります。 規則は "master" データベースに保存されます。 サーバーレベル IP ファイアウォール規則の最大数には、1 サーバーあたり 256 件の制限があります。 [Azure のサービスとリソースにこのサーバーへのアクセスを許可する] の設定を有効にしてある場合、そのサーバーに対するファイアウォール規則 1 件としてカウントされます。

サーバーレベル IP ファイアウォール規則を構成するには、Azure portal、PowerShell、または Transact-SQL ステートメントを使用します。

Azure portal を使用して構成する場合、サーバーレベル IP ファイアウォール規則の最大数は 256 件に制限されます。

  • ポータルまたは PowerShell を使用する場合、作業者はサブスクリプション所有者またはサブスクリプション共同作成者である必要があります。
  • Transact-SQL を使用するには、サーバーレベル プリンシパル ログインまたは Microsoft Entra 管理者として "マスター" データベースに接続する必要があります。 (サーバーレベル IP ファイアウォール規則は、Azureレベルのアクセス許可を持つユーザーによって最初に作成される必要があります。)

既定では、Azure portal から新しい論理 SQL サーバーを作成する際に、[Azure サービスとリソースにこのサーバーへのアクセスを許可する] 設定は [いいえ] に設定されます。

データベースレベル IP ファイアウォール規則

データベースレベル IP ファイアウォール規則は、特定の (セキュリティで保護された) データベースに対するクライアントのアクセスを許可します。 規則は、データベースごと ("master" データベースを含め) に作成され、個々のデータベースに格納されます。

  • master データベースとユーザー データベースのデータベースレベル IP ファイアウォール規則の作成と管理は、Transact-SQL ステートメントを使用する方法のみによって、また、最初のサーバーレベル ファイアウォール規則が構成された後にのみ実行できます。
  • サーバーレベル IP ファイアウォール規則の範囲外に、データベースレベル IP ファイアウォール規則で IP アドレス範囲を指定した場合、データベースにアクセスできるのは、そのデータベースレベル IP アドレス範囲に属するクライアントのみです。
  • 既定値では、1 つのデータベースにつき、データベースレベル IP ファイアウォール規則を最大 256 件指定できます。 データベースレベル IP ファイアウォール規則の構成の詳細については、この記事で後述する例と、「sp_set_database_firewall_rule (Azure SQL Database)」を参照してください。

ファイアウォール規則の設定方法に関する推奨事項

可能な限り、データベースレベル IP ファイアウォール規則を使用することをおすすめします。 これに従うと、セキュリティを強化し、データベースの移植性を高めることができます。 サーバーレベル IP ファイアウォール規則は管理者向けに使用します。 また、同じアクセス要件を持つデータベースが多数存在し、各データベースを個別に構成することを避けたい場合にも使用できます。

ビジネス継続性の観点におけるデータベース移植可能性の情報については、「ディザスター リカバリーの認証要件」を参照してください。

サーバーレベルおよびデータベースレベル IP ファイアウォール規則

"あるデータベースのユーザーを別のデータベースから完全に隔離することが求められていますか?"

答えが "はい" の場合は、データベースレベル IP ファイアウォール規則を使用してアクセスを付与します。 そうすると、ファイアウォール経由ですべてのデータベースへのアクセスが許可されるサーバーレベル IP ファイアウォール規則の使用を回避でき、 防御の深度が浅くなる事態の発生を防ぐことができます。

"指定の IP アドレスに属するユーザーは、すべてのデータベースにアクセスする必要がありますか?"

答えが "はい" の場合は、サーバーレベル IP ファイアウォール規則を使用することで、IP ファイアウォール規則の構成回数を減らします。

"IP ファイアウォール規則の構成作業を担当する個人またはチームのアクセス許可は、Azure portal、PowerShell、または REST API 経由のみに限定されていますか?"

そうである場合、サーバーレベル IP ファイアウォール規則を使用する必要があります。 データベースレベル IP ファイアウォール規則の構成作業は、Transact-SQL でのみ実行できます。

"IP ファイアウォール規則の構成作業を担当する個人またはチームは、データベースレベルで高位のアクセス許可を取得することを禁止されていますか?"

そうである場合、サーバーレベル IP ファイアウォール規則を使用します。 Transact-SQL を使用してデータベースレベル IP ファイアウォール規則を構成するには、データベースレベルで少なくとも CONTROL DATABASE アクセス許可が必要です。

"IP ファイアウォール規則の構成作業または監査を担当する個人またはチームは、多数の (場合によっては数百もの) データベースに関する IP ファイアウォール規則を集中管理していますか?"

このシナリオの場合は、ニーズと環境に応じてベスト プラクティスが異なります。 サーバーレベル IP ファイアウォール規則のほうが簡単に構成できる可能性がある一方、スクリプトを使用してデータベースレベルの規則を構成することも考えられます。 また、サーバーレベル IP ファイアウォール規則を使用する場合も、状況によっては、データベースの CONTROL アクセス許可を持つユーザーがデータベースレベル IP ファイアウォール規則が作成するかどうかを確認するために、データベースレベル IP ファイアウォール規則の監査が必要になります。

"サーバーレベル IP ファイアウォール規則とデータベースレベル IP ファイアウォール規則を組み合わせて使用することはできますか?"

はい。 場合によっては、サーバーレベル IP ファイアウォール規則を必要とするユーザー (管理者など) と、 データベースレベル IP ファイアウォール規則を必要とするユーザー (データベース アプリケーションのユーザーなど) の両方が存在することがあります。

インターネットからの接続

コンピューターからインターネット経由でサーバーへの接続が試行されると、ファイアウォールは、その要求の送信元 IP アドレスが、要求された接続先データベースのデータベースレベル IP ファイアウォール規則に適合するかどうかを最初に確認します。

  • アドレスがデータベースレベル IP ファイアウォール規則の指定範囲に属する場合は、その規則が適用されたデータベースへの接続が許可されます。
  • アドレスがデータベースレベル IP ファイアウォール規則の範囲に属さない場合、ファイアウォールは、サーバーレベル IP ファイアウォール規則を確認します。 アドレスがサーバーレベル IP ファイアウォール規則の範囲に属する場合は、接続が許可されます。 サーバーレベル IP ファイアウォール規則は、そのサーバーによって管理されるすべてのデータベースに適用されます。
  • アドレスが、どのデータベースレベルおよびサーバーレベル IP ファイアウォール規則の範囲にも属さない場合、接続要求は失敗します。

ローカル コンピューターから Azure SQL Database にアクセスする場合は、そのネットワーク上のファイアウォールとローカル コンピューターにおいて TCP ポート 1433 の送信が許可されている必要があります。

Azure 内からの接続

Azure 内にホストされているアプリケーションから SQL Server への接続を許可するには、Azure の接続を有効にする必要があります。 Azure 接続を有効にするには、開始 IP アドレスと終了 IP アドレスを 0.0.0.0 に設定したファイアウォール規則が存在する必要があります。 この推奨規則は Azure SQL Database にのみ適用されます。

Azure のアプリケーションからサーバーへの接続が試行されると、ファイアウォールは、このファイアウォール規則が存在するかどうかを調べることで、Azure 接続の許可を確認します。 これは、[ファイアウォールと仮想ネットワーク] の設定で [Azure サービスとリソースによるこのサーバーへのアクセスを許可する] を [オン] に切り替えることで、Azure portal ペインから直接有効にすることができます。 この設定を ON に切り替えると、AllowAllWindowsAzureIps という名前の IP 0.0.0.0 - 0.0.0 の受信ファイアウォール規則が作成されます。 ルールは、マスター データベース sys.firewall_rules ビューで表示できます。 ポータルを使用しない場合、開始 IP アドレスと終了 IP アドレスを 0.0.0.0 に設定したファイアウォール規則を作成するには、PowerShell または Azure CLI を使用します。

重要

このオプションでは、Azure からのすべての接続 (他のお客様のサブスクリプションからの接続を含む) を許可するようにファイアウォールが構成されます。 このオプションを選択する場合には、必ず、ログインとユーザー アクセス許可によってアクセスを承認済みユーザーのみに制限してください。

権限

Azure SQL Server の IP ファイアウォール規則の作成と管理を行うためには、作業者が以下のいずれかに該当する必要があります。

IP ファイアウォール規則の作成と管理

最初のサーバー レベルのファイアウォール設定を作成する際には、Azure portal を使用するか、プログラムで Azure PowerShellAzure CLI、または Azure REST API を使用します。 以後は、これらの方法または Transact-SQL を使用してサーバーレベル IP ファイアウォール規則の作成と管理を実行できます。

重要

データベースレベル IP ファイアウォール規則の作成と管理は、Transact-SQL でのみ実行できます。

パフォーマンスを向上させるため、サーバーレベル IP ファイアウォール規則はデータベースレベルの一時的なキャッシュに保存されます。 キャッシュを更新する方法については、「DBCC FLUSHAUTHCACHE」を参照してください。

ヒント

データベース監査を使用すると、サーバーレベルとデータベースレベルでファイアウォールの変更に対する監査を実行できます。

Azure portal を使用してサーバーレベル IP ファイアウォール規則を管理する

Azure portal でサーバーレベル IP ファイアウォール規則を設定するには、お使いのデータベースまたはサーバーの概要ページに移動します。

ヒント

チュートリアルについては、「Azure portal を使用してデータベースを作成する」を参照してください。

データベースの概要ページから

  1. データベースの概要ページからサーバー レベルの IP ファイアウォール規則を設定するには、次の図に示すように、ツール バーの [サーバー ファイアウォールの設定] を選択します。

    SQL Database ファイアウォール設定ツール バーの例を示すスクリーンショット。

    サーバーの [ネットワーク] ページが開きます。

  2. [ファイアウォール規則] セクションに規則を追加して、使用しているコンピューターの IP アドレスを追加し、[保存] を選択します。 現在の IP アドレスに対するサーバーレベル IP ファイアウォール規則が作成されます。

    SQL Server ネットワーク ページの例を示すスクリーンショット。

サーバーの概要ページから

サーバーの概要ページが開きます。 完全修飾サーバー名 (例: mynewserver20170403.database.windows.net) と、追加の構成オプションが表示されます。

  1. このページからサーバー レベルのルールを設定するには、左側の [設定] メニューから [ネットワーク] を選択します。
  2. [ファイアウォール規則] セクションに規則を追加して、使用しているコンピューターの IP アドレスを追加し、[保存] を選択します。 現在の IP アドレスに対するサーバーレベル IP ファイアウォール規則が作成されます。

Transact-SQL を使用して IP ファイアウォール規則を管理する

テーブルを展開

カタログ ビューまたはストアド プロシージャ レベル 説明
sys.firewall_rules サーバー 現在のサーバーレベル IP ファイアウォール規則を表示します
sp_set_firewall_rule サーバー サーバーレベル IP ファイアウォール規則を作成または更新します
sp_delete_firewall_rule(ファイアウォールルールを削除するSQLプロシージャ) サーバー サーバーレベル IP ファイアウォール規則を削除します
sys.database_ファイアウォール_ルール データベース 現在のデータベースレベル IP ファイアウォール規則を表示します
sp_set_database_firewall_rule データベース データベースレベル IP ファイアウォール規則を作成または更新します
sp_delete_database_firewall_rule データベース データベースレベル IP ファイアウォール規則を削除します

以下の例では、既存の規則を確認し、サーバー "Contoso" に対して一定範囲の IP アドレスを有効にし、IP ファイアウォール規則を削除します。

SQL

SELECT * FROM sys.firewall_rules ORDER BY name;

次に、サーバーレベル IP ファイアウォール規則を追加します。

SQL

SELECT * FROM sys.firewall_rules ORDER BY name;

EXECUTE sp_set_firewall_rule @name = N'ContosoFirewallRule',
@start_ip_address = '192.168.1.1', @end\_ip\_address = '192.168.1.10'

サーバーレベル IP ファイアウォール規則を削除するには、"sp_delete_firewall_rule" ストアド プロシージャを実行します。 次の例では、"ContosoFirewallRule" という規則を削除します。

SQL

EXECUTE sp_delete_firewall_rule @name = N'ContosoFirewallRule'

PowerShell を使用してサーバーレベル IP ファイアウォール規則を管理する

この例では、Azure と対話するために推奨される PowerShell モジュールである Azure Az PowerShell モジュールを使用します。 Az PowerShell モジュールの使用を開始するには、「Azure PowerShell をインストールする」を参照してください。 Az PowerShell モジュールに移行する方法については、「 Azure PowerShell を AzureRM から Az に移行する」を参照してください。

重要

PowerShell Azure Resource Manager (AzureRM) モジュールは、2024 年 2 月 29 日に非推奨になりました。 今後のすべての開発では、Az.Sql モジュールを使用する必要があります。 ユーザーは、引き続きサポートと更新を行うために、AzureRM から Az PowerShell モジュールに移行することをお勧めします。 AzureRM モジュールは維持またはサポートされなくなりました。 Az PowerShell モジュールと AzureRM モジュールのコマンドの引数は、ほぼ同じです。 互換性の詳細については、「新しい Az PowerShell モジュールの概要」を参照してください。

テーブルを展開

コマンドレット レベル 説明
Get-AzSqlServerFirewallRule サーバー 現在のサーバーレベル ファイアウォール規則を返します
New-AzSqlServerFirewallRule サーバー 新しいサーバーレベル ファイアウォール規則を作成します
Set-AzSqlServerFirewallRule サーバー 既存のサーバーレベル ファイアウォール規則のプロパティを更新します
Remove-AzSqlServerFirewallRule サーバー サーバーレベル ファイアウォール規則を削除します

以下の例では、PowerShell を使用してサーバーレベル IP ファイアウォール規則を設定します。

PowerShell

New-AzSqlServerFirewallRule -ResourceGroupName "myResourceGroup" `-ServerName $servername `-FirewallRuleName "ContosoIPRange" -StartIpAddress "192.168.1.0" -EndIpAddress "192.168.1.255"

ヒント

$servernameでは、完全修飾 DNS 名ではなく、サーバー名を指定します 。たとえば、mysqldbserver.database.windows.net ではなく mysqldbserver を指定します。 クイックスタートのコンテキスト内で PowerShell が使用される例を見るには、「DB の作成 - PowerShell」と、「PowerShell を使用して単一の SQL データベースを作成し、サーバーレベル IP ファイアウォール規則を構成する」を参照してください。

CLI を使用してサーバーレベル IP ファイアウォール規則を管理する

テーブルを展開

コマンドレット レベル 説明
az sql server firewall-rule create は、SQL サーバーのファイアウォール ルールを作成するコマンドです。 サーバー サーバーの IP ファイアウォール規則を作成します
az sql server firewall-rule list(Azure SQL サーバーのファイアウォール規則を一覧表示します) サーバー サーバーの IP ファイアウォール規則を一覧表示します
az sql server firewall-rule show(SQLサーバーファイアウォールルールを表示) サーバー IP ファイアウォール規則の詳細を表示します
az sql server firewall-rule update サーバー IP ファイアウォール規則を更新します
az sql server firewall-rule delete - SQL Server のファイアウォールルールを削除します。 サーバー IP ファイアウォール規則を削除します

以下の例では、CLI を使用してサーバーレベル IP ファイアウォール規則を設定します。

Azure CLI



az sql server firewall-rule create --resource-group myResourceGroup --server $servername \-n ContosoIPRange --start-ip-address 192.168.1.0 --end-ip-address 192.168.1.255">">


ヒント

$servernameの場合は、完全修飾 DNS 名ではなく、サーバー名を指定します。 たとえば、mysqldbserver.database.windows.net の代わりに mysqldbserver を使用します。 クイックスタートのコンテキスト内で CLI が使用される例を見るには、「DB の作成 - Azure CLI」と、「Azure CLI を使用して単一の SQL データベースを作成し、サーバーレベル IP ファイアウォール規則を構成する」を参照してください。 Azure Synapse Analytics については、以下の例を参照してください。

テーブルを展開

コマンドレット レベル 説明
az synapse ワークスペース ファイアウォールルール 作成 サーバー ファイアウォール規則を作成する
az synapse ワークスペース ファイアウォールルール 削除 サーバー ファイアウォール規則を削除する
az synapse workspace のファイアウォールルールをリストするコマンド サーバー すべてのファイアウォール規則を表示する
az synapse workspace firewall-rule show サーバー ファイアウォール規則を取得する
az synapse ワークスペース ファイアウォールルールの更新 サーバー ファイアウォール規則を更新する
az synapse workspace firewall-rule wait サーバー ファイアウォール規則の条件が満たされるまで CLI を待機状態にする

以下の例では、CLI を使用して Azure Synapse 内にサーバーレベル IP ファイアウォール規則を設定します。

Azure CLI

az synapse workspace firewall-rule create --name AllowAllWindowsAzureIps --workspace-name $workspacename --resource-group $resourcegroupname --start-ip-address 0.0.0.0 --end-ip-address 0.0.0.0

REST API を使用してサーバーレベル IP ファイアウォール規則を管理する

テーブルを展開

API レベル 説明
ファイアウォール規則の一覧表示 サーバー 現在のサーバーレベル IP ファイアウォール規則を表示します
ファイアウォール規則の作成または更新 サーバー サーバーレベル IP ファイアウォール規則を作成または更新します
ファイアウォール規則の削除 サーバー サーバーレベル IP ファイアウォール規則を削除します
ファイアウォール規則の取得 サーバー サーバーレベル IP ファイアウォール規則を取得します

データベース ファイアウォールのトラブルシューティング

Azure SQL Database に対するアクセスが期待どおりに機能しない場合は、以下の事項を確認してください。

  • ローカル ファイアウォールの構成: コンピューターが Azure SQL Database にアクセスする前に、TCP ポート 1433 のファイアウォール例外をコンピューターに作成することが必要になる場合があります。 Azure クラウド境界内で接続を行うには、追加のポートを開くことが必要な場合があります。 詳細については、「ADO.NET 4.5 と Azure SQL Database の 1433 以外のポート」で、「SQL Database: 外部と内部」のセクションを参照してください。

  • ネットワーク アドレス変換: ネットワーク アドレス変換 (NAT) により、コンピューターが Azure SQL Database に接続するために使用する IP アドレスは、コンピューターの IP 構成設定の IP アドレスとは異なる場合があります。 お使いのコンピューターで Azure への接続に使用されている IP アドレスを確認するには、以下のようにします。

    1. ポータルにサインインします。
    2. データベースをホストするサーバーの [構成] タブに移動します。
    3. [現在のクライアント IP アドレス] が [許可された IP アドレス] セクションに表示されます。 [許可された IP アドレスの追加] を選択して、このコンピューターがサーバーにアクセスできるようにします。
  • 許可リストに対する変更はまだ有効になっていません。Azure SQL Database ファイアウォール構成の変更が有効になるまでに最大 5 分の遅延が発生する可能性があります。

  • ログインが承認されていないか、正しくないパスワードが使用されました:ログインにサーバーに対するアクセス許可がない場合、またはパスワードが正しくない場合、サーバーへの接続は拒否されます。 ファイアウォール設定を作成することでクライアントに提供されるのは、サーバーへの接続を試行する "機会" のみです。 それに加え、クライアントは適切なセキュリティ資格情報を提示する必要があります。 ログインの準備の詳細については、「データベース アクセスの制御と許可」を参照してください。

  • 動的 IP アドレス: 動的 IP アドレス指定を使用するインターネット接続があり、ファイアウォールを通過できない場合は、次のいずれかの解決策を試してください。

    • インターネット サービス プロバイダーに問い合わせて、サーバーにアクセスするクライアント コンピューターに割り当てられた IP アドレス範囲を確認します。 その IP アドレス範囲を IP ファイアウォール規則として追加します。
    • または、クライアント コンピューター用の静的 IP アドレスを取得します。 それらの IP アドレスを IP ファイアウォール規則として追加します。