Azure Synapse Analytics の仮想ネットワーク サービス エンドポイントと規則を使用する

Tip

Microsoft Fabric Data Warehouse は、将来のアーキテクチャ、組み込みの AI、および新機能を備えた、Data Lake 基盤上のエンタープライズ 規模のリレーショナル ウェアハウスです。 データ ウェアハウスを初めて使用する場合は、Fabric Data Warehouseから始めます。 既存の dedicated SQL プール ワークロードは、Fabric にアップグレードして、データ サイエンス、リアルタイム分析、レポートの新機能にアクセスできます。

適用対象: Azure Synapse Analytics 専用 SQL プール

仮想ネットワーク ルールは、Azure Synapse Analytics 内の専用 SQL プール (旧称 SQL DW) データベースの論理サーバーが、仮想ネットワーク内の特定のサブネットから送信される通信を受け入れるかどうかを制御するファイアウォール セキュリティ機能です。 この記事では、仮想ネットワークルールが専用SQLプールへの通信を安全に許可する最良の選択肢となる理由を説明します。

仮想ネットワークルールを作成するには、まずルールが参照する 仮想ネットワークサービスエンドポイント が必要です。

仮想ネットワーク規則を作成する

仮想ネットワークルールだけを作成したい場合は、 この記事の後半で手順や説明に進んでください。

仮想ネットワークルールの詳細

このセクションでは、仮想ネットワークルールに関するいくつかの詳細を説明します。

地理的には1つの地域のみ

各仮想ネットワークサービスエンドポイントは、1つのAzureリージョンにのみ適用されます。 そのエンドポイントにより、他のリージョンでサブネットからの通信の受け入れが可能になることはありません。

任意の仮想ネットワークルールは、その基盤となるエンドポイントが適用されるリージョンに限定されます。

サーバーレベルであって、データベースレベルではありません

各仮想ネットワークルールは、サーバー上の特定のデータベースだけでなく、サーバー全体に適用されます。 言い換えれば、仮想ネットワークのルールはデータベースレベルではなくサーバーレベルで適用されるのです。

セキュリティ管理ロール

仮想ネットワークサービスエンドポイントの管理においては、セキュリティ ロールが分離されています。 以下の各役割で対応が必要です:

  • ネットワーク管理者 (ネットワーク共同作成者 の役割): エンドポイントをオンにします。
  • データベース管理者 (SQL Server Contributor ロール): アクセス制御リスト (ACL) を更新し、指定されたサブネットをACLに追加します。

Azure RBAC の代替案

ネットワーク管理者とデータベース管理者の役割は、仮想ネットワークルールの管理に必要な以上の能力を持っています。 必要なのはそれらの機能の一部だけです。

Azureでロールベースアクセス制御(RBAC)を使って、必要な機能の一部だけを持つ単一のカスタムロールを作成するオプションがあります。 カスタムロールはネットワーク管理者やデータベース管理者の代わりに使うことができます。ユーザーをカスタムロールに追加すると、他の2つの主要な管理者ロールに追加するよりも、セキュリティリスクの表面積は小さくなります。

Note

場合によっては、専用SQLプールと仮想ネットワークサブネットが別々のサブスクリプションに属していることもあります。 このような場合は、次の構成を確認する必要があります。

  • ユーザーは、サービス エンドポイントの有効化や指定されたサーバーに仮想ネットワーク サブネットを追加するなど、必要な操作を開始するための権限を持っています。
  • 両方のサブスクリプションには Microsoft.Sql プロバイダーが登録されている必要があります。

Limitations

スタンドアロン専用SQLプールの場合、仮想ネットワークルール機能は以下の制限があります。

  • 論理サーバーのファイアウォールでは、各仮想ネットワークルールがサブネットを参照しています。 参照されるすべてのサブネットは専用SQLプールと同じ地理的リージョン内でホストされなければなりません。
  • 各サーバーは、任意の仮想ネットワークに対して最大128のACLエントリを持つことができます。
  • 仮想ネットワークのルールはAzure Resource Managerの仮想ネットワークにのみ適用され、クラシック展開モデルのネットワークには適用されません。
  • ファイアウォールでは、IPアドレス範囲は以下のネットワーク項目に適用されますが、仮想ネットワークルールには適用されません:
  • 両方のサブスクリプションは同じMicrosoft Entraテナントに含まれている必要があります。

サービスエンドポイントを使用する際の考慮事項

専用SQLプールのためにサービスエンドポイントを使用する場合は、以下の点を確認してください。

  • Azure Synapse AnalyticsのパブリックIPへのアウトバウンドアクセスが必要です。 ネットワークセキュリティグループ(NSG)はサービスIPへの接続を許可しなければなりません。 Sql NSGサービスタグを使うことができます。

ExpressRoute

オンプレミス環境からExpressRouteをパブリック ピアリングまたは Microsoft ピアリングに使用する場合、使用される NAT IP アドレスを特定する必要があります。 パブリックピアリングの場合、各ExpressRoute回線には、Microsoft Azureネットワークバックボーンに入る際にAzureサービストラフィックに適用される2つのNAT IPアドレスが既定で使用されます。 Microsoftピアリングでは、使用されるNAT IPアドレスは顧客またはサービスプロバイダーのいずれかから提供されます。 サービス リソースへのアクセスを許可するには、リソースの IP ファイアウォール設定でこれらのパブリック IP アドレスを許可する必要があります。 パブリック ピアリング用の ExpressRoute 回線 IP アドレスを見つけるには、Azure ポータル経由でExpressRoute のサポート チケットを起票してください。 ExpressRouteのパブリックおよびMicrosoftピアリングのNATについて詳しく知りたい方は、「AzureパブリックピアリングのNAT要件」をご覧ください。

回線からAzure Synapse Analyticsへの通信を許可するには、NATのパブリックIPアドレスに対してIPネットワークルールを作成する必要があります。

Azure Storageで仮想ネットワークサービスエンドポイントを使用する影響

Azure Storage は、Azure ストレージ アカウントへの接続を制限できる同じ機能を実装しています。 Azure Synapse Analytics が使用する Azure Storage アカウントでこの機能を使うと、問題が発生することがあります。

以下のセクションでは、影響を受けるAzure Synapse Analyticsの機能について説明します。

Azure Synapse Analytics PolyBase and COPY statement

PolyBaseとCOPY文は、Azure StorageアカウントからAzure Synapse Analyticsにデータを読み込み、高スループットのデータ取り込みに一般的に使われます。 データの読み込み元である Azure Storage アカウントが、アクセスを一連の仮想ネットワーク サブネットのみに制限している場合、PolyBase と COPY ステートメントを使用してそのストレージ アカウントに接続すると、接続が失敗します。 COPY と PolyBase を使って、仮想ネットワークで保護された Azure Storage に接続して Azure Synapse Analytics でのインポート/エクスポート シナリオを有効にするには、このセクションの手順に従ってください。

Prerequisites

  • Azure PowerShell をインストールします。 詳細については、「Azure Az PowerShell モジュールをインストールする」を参照してください。
  • 汎用v1またはAzure Blob Storageアカウントをお持ちの場合は、「汎用v2ストレージアカウントへのアップグレード」の手順に従って、まず汎用v2にアップグレードする必要があります。
  • Azure Storageアカウントのファイアウォールおよび仮想ネットワーク設定メニューで「信頼できるMicrosoft サービスがこのストレージアカウントにアクセスすることを許可する」をオンにしている必要があります。 この設定を有効にすると、PolyBaseとCOPY文が強力な認証でストレージアカウントに接続でき、ネットワークトラフィックはAzureバックボーン上に残ります。 詳細は このガイドをご覧ください。

Important

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

Steps

  1. もし独立した専用SQLプール(旧SQL DW)を持っている場合は、PowerShellを使ってSQLサーバーをMicrosoft Entra ID に登録してください:

    Connect-AzAccount
    Select-AzSubscription -SubscriptionId <subscriptionId>
    Set-AzSqlServer -ResourceGroupName your-database-server-resourceGroup -ServerName your-SQL-servername -AssignIdentity
    

    このステップは、Azure Synapse Analyticsワークスペース内の専用SQLプールでは必要ありません。 ワークスペースのシステム割り当てマネージド ID (SA-MI) は、Synapse 管理者ロールのメンバーであるため、ワークスペースの専用 SQL プールに対する昇格された特権を持っています。

  2. 「ストレージ アカウントを作成する」の手順に従って、汎用 v2 ストレージ アカウントを作成します。

    • 汎用 v1 または Blob Storage アカウントをお持ちの場合は、まず v2 にアップグレードする必要があります。その際は、汎用 v2 ストレージ アカウントへのアップグレード の手順に従ってください。
    • Azure Data Lake Storage Gen2の既知の問題については、「Azure Data Lake Storage Gen2の既知の問題」をご覧ください。
  3. ストレージアカウントのページで、 アクセス制御(IAM)を選択してください。

  4. [追加]>[ロールの割り当ての追加] を選択して、[ロールの割り当ての追加] ページを開きます。

  5. 次のロールを割り当てます。 詳細については、Azure ポータルを使用して Azure ロールを割り当てる の手順を参照してください。

    Setting Value
    Role Storage Blob データ共同作成者
    アクセス権を割り当てる ユーザー、グループ、またはサービス プリンシパル
    Members Microsoft Entra IDに登録した、専用SQLプールをホストするサーバーまたはワークスペース

    Azure portal の [ロールの割り当ての追加] ページを示すスクリーンショット。

    Note

    このステップはストレージアカウントの所有者権限を持つメンバーのみが実行できます。 さまざまなAzure組み込みロールについては、Azure built-in rolesを参照してください。

  6. Azure StorageアカウントへのPolyBase接続を有効にするには:

    1. もしこれまで作成していなければ、データベース のマスターキー を作成しましょう。

      CREATE MASTER KEY [ENCRYPTION BY PASSWORD = '<password>'];
      
    2. IDENTITY = 'Managed Service Identity' のデータベーススコープ認証情報を作成します。

      CREATE DATABASE SCOPED CREDENTIAL msi_cred WITH IDENTITY = 'Managed Service Identity';
      
      • この仕組みはマネージド IDを利用しているため、Azure StorageアクセスキーでSECRETを指定する必要はありません。 このステップは、Azure Synapse Analyticsワークスペース内の専用SQLプールでは必要ありません。 ワークスペースのシステム割り当てマネージド ID (SA-MI) は、Synapse 管理者ロールのメンバーであるため、ワークスペースの専用 SQL プールに対する昇格された特権を持っています。

      • PolyBase接続が仮想ネットワークで保護されたAzure Storageアカウントで動作するためには、IDENTITY名が「Managed Service Identity」でなければなりません。

    3. PolyBaseを使って汎用v2ストレージアカウントに接続するための abfss:// 方式で外部データソースを作成しましょう。

      CREATE EXTERNAL DATA SOURCE ext_datasource_with_abfss WITH (TYPE = hadoop, LOCATION = 'abfss://myfile@mystorageaccount.dfs.core.windows.net', CREDENTIAL = msi_cred);
      
      • すでに汎用 v1 または Blob Storage アカウントに外部テーブルが紐づいている場合は、まずそれらの外部テーブルを削除すべきです。 そして対応する外部データソースを削除します。 次に、前述のように汎用v2ストレージアカウントに接続する外部データソースを abfss:// 方式で作成します。 その後、この新しい外部データソースを使ってすべての外部テーブルを再作成します。 Generate and Publish Scripts Wizardを使って、すべての外部テーブルのcreate-scriptを簡単に生成できます。
      • abfss://スキームの詳細については、「Azure Data Lake Storage Gen2 URIの使用」をご覧ください。
      • T-SQLコマンドの詳細については、「 CREATE EXTERNAL DATA SOURCE」をご覧ください。
    4. 外部テーブルを使って通常通りクエリを行ってください。

Azure Synapse Analytics の Blob Storage への監査

Azure Synapse Analytics の監査では、SQL 監査ログを独自のストレージ アカウントに書き込めます。 このストレージアカウントが仮想ネットワークサービスエンドポイント機能を使用している場合は、VNet とファイアウォールの背後にあるストレージアカウントに監査ログを書き込む方法をご覧ください。

専用のSQLプールSQL Serverに仮想ネットワークファイアウォールルールを追加してください

この機能が強化されるずっと昔は、ファイアウォールに稼働中の仮想ネットワーク ルールを実装する前に、仮想ネットワークサービスエンドポイントを有効にする必要がありました。 エンドポイントは指定された仮想ネットワーク サブネットを専用の SQL プールに関連付けます。 2018年1月以降、 IgnoreMissingVNetServiceEndpoint フラグを設定することでこの要件を回避できます。 これで、仮想ネットワークサービスエンドポイントをオンにせずにサーバーに仮想ネットワークのファイアウォールルールを追加できます。

ファイアウォールルールを設定するだけではサーバーの安全性確保には役立ちません。 セキュリティを有効にするには、仮想ネットワーク サービス エンドポイントも有効にする必要があります。 サービスエンドポイントをオンにすると、仮想ネットワークのサブネットはオフからオンへの移行が完了するまでダウンタイムを経験します。 このダウンタイム期間は、特に大規模な仮想ネットワークの文脈で当てはまります。 IgnoreMissingVNetServiceEndpointフラグを使って、移行中のダウンタイムを減らしたり排除したりできます。

IgnoreMissingVNetServiceEndpointフラグはPowerShellを使って設定できます。 詳細は New-AzSqlServerVirtualNetworkRule をご覧ください。

Azureポータルを使って仮想ネットワークルールを作成してください

Note

これらの仮想ネットワークルール命令は、独立した専用SQLプールに適用されます。 ワークスペースネットワークの設定については、Azure Synapse Analytics IPファイアウォールルールを参照してください。

このセクションでは、Azureポータルを使ってスタンドアロンの専用SQLプール用の仮想ネットワークルールを作成する方法を学びます。 このルールは、論理サーバーに、仮想ネットワーク サービス エンドポイントとしてタグ付けされた特定のサブネットからの通信を受け入れるよう指示します。

Note

サーバーの仮想ネットワークファイアウォールルールにサービスエンドポイントを追加する場合は、まずサブネットでサービスエンドポイントが有効になっていることを確認してください。

サブネットでサービスエンドポイントが有効になっていなければ、ポータルはそれらを有効にするよう求めます。 ルールを追加した同じペインで 「有効化」 ボタンを選択してください。

Prerequisites

Azure Synapse Analyticsで使われている仮想ネットワークサービスエンドポイントタイプ名でタグ付けされたサブネットをすでに所有している必要があります。

Azure Portal の手順

  1. Azure portal にサインインする

  2. SQLサーバーを検索して選択し、次にサーバーを選択します。 [セキュリティ] で [ネットワーク] を選択します。

  3. パブリックアクセスタブで、パブリックネットワークアクセスが「選択ネットワーク」に設定されていることを確認してください。そうしないと、仮想ネットワークの設定は表示されません。 仮想ネットワークセクションで+ 既存の仮想ネットワークを追加を選択してください。

  4. 新しい「作成/更新」ペインで、Azureリソースの名前をボックスに埋めてください。

    Tip

    サブネットの正しいアドレスプレフィックスを含める必要があります。 Addressプレフィックスの値はポータルで確認できます。 すべてのリソース>あらゆるタイプ>仮想ネットワークに移動します。 フィルターは仮想ネットワークを表示します。 仮想ネットワークを選択し、次に サブネットを選択します。 ADDRESS RANGE列には必要なアドレスプレフィックスが記載されています。

  5. ファイアウォール ペインにある仮想ネットワーク ルールをご覧ください。

  6. このサーバーへの Azure サービスおよびリソースのアクセスを許可する を No に設定します。

    Important

    「Azure のサービスおよびリソースにこのサーバーへのアクセスを許可する」 にチェックを入れておくと、サーバーは Azure 境界内の任意のサブネットからの通信を受け入れます。 これは、Azure データセンター向けに定義された範囲内にあると認識されている IP アドレスのいずれかから発信される通信です。 コントロールを有効にしたままにしておくと、セキュリティの観点から過剰なアクセス権限となる可能性があります。 Microsoft Azure Virtual Networkのサービス エンドポイント機能とAzure Synapse Analyticsの仮想ネットワーク ルールは、攻撃対象領域を削減できます。

  7. 画面の下部近くにある OK ボタンを選択してください。

Note

以下のステータスまたは状態がルールに適用されます。

  • 準備完了: 開始した操作が成功したことを示します。
  • 失敗: あなたが開始した操作が失敗したことを示します。
  • 削除: Delete 操作にのみ適用され、ルールが削除され適用されなくなったことを示します。
  • 進行中: 操作が進行中であることを示します。 この状態の間は、従来のルールが適用されます。

PowerShellを使って仮想ネットワークルールを作成してください

スクリプトはPowerShellのコマンドレット New-AzSqlServerVirtualNetworkRule や az network vnet createを使って仮想ネットワークルールを作成することもできます。 詳細は New-AzSqlServerVirtualNetworkRule をご覧ください。

REST APIを使って仮想ネットワークルールを作成します

内部的には、Synapse SQL の仮想ネットワーク アクションに関する PowerShell コマンドレットが REST API を呼び出します。 REST APIを直接呼び出すこともできます。 詳細については、Virtual network rules: Operationsを参照してください。

エラー 40914 および 40615 のトラブルシューティング

接続エラー40914は、Azureポータルのファイアウォールパネルで指定された仮想ネットワークルールに関連しています。
エラー40615は似ていますが、ファイアウォール上の IPアドレスルール に関するものです。

エラー40914

メッセージテキスト: 「ログイン時に要求されたサーバー『[サーバー名]』を開けられません。 Client is not allowed to access the server. (クライアントはサーバーへのアクセスを許可されていません。)"

エラーの説明: クライアントは仮想ネットワークサーバーエンドポイントを持つサブネットに存在します。 しかしサーバーにはサブネットにデータベースと通信する権利を与える仮想ネットワークルールはありません。

エラー解決方法:Azureポータルのファイアウォールペインで、仮想ネットワークルールコントロールを使ってサブネット用の仮想ネットワークルールを追加します。

エラー 40615

メッセージテキスト: 「ログイン時に要求されたサーバー『{0}』を開けません。 Client with IP address '{1}' is not allowed to access the server. (IP アドレス '{1}' のクライアントはこのサーバーへのアクセスを許可されていません。)"

エラーの説明: クライアントはサーバーに接続権限のないIPアドレスから接続しようとしています。 サーバーファイアウォールには、クライアントが指定されたIPアドレスからデータベースへ通信できるIPアドレスルールはありません。

エラー解決: クライアントのIPアドレスをIPルールとして入力します。 このステップはAzureポータルのファイアウォールペインを使って行います。