Udemy 新コース: 作って学ぶAI Builder!

Azure OpenAI をPower Platform から閉域網接続で利用する | サブネット委任 | vnet support

Power Platform はマイクロソフトが提供するSaaSなので、サービス自体のIPアドレスが固定ではなかったり、自社のプライベートネットワーク上にデプロイできるわけではありません。

ただ、Azure の豊富なAI機能であったり、Key Vault など様々なサービスにインターネットへの公開を行わず、閉域網経由で通信したいという要望があります。

それを実現するのが「サブネット委任 (subnet delegation)」という機能です。例えば、カスタムコネクタを経由してAzure OpenAI などのAPI に接続する場合、以下のようなネットワーク構成を取ることができる機能です。

https://learn.microsoft.com/ja-jp/power-platform/admin/vnet-support-overview

Power Platform はSaaS として存在しつつ、自社のサブネットにサービスをホストしているかのように許可する機能です(図の「サブネットへの委任」部分)。

これにより、接続を許可しているAzure のサービスにこのサブネット経由でアクセスできるようになります(図の「アクセス許可」の部分)。

他のサービスとの比較

プライベートネットワーク (閉域網) 接続を実現する方法としては、他にもオンプレミスデータゲートウェイ(ODGW)を経由する方法があります。

サービス提供形態保守性マネージド環境
オンプレミスデータ
ゲートウェイ(ODGW)経由
IaaSVMを立て、ODGW経由で接続するため、
VMのサイジングから保守・運用に至るまで自社で
運用する必要がある
不要
サブネット委任サービスMicrosoft によるマネージドサービス必要
図1: オンプレミスデータゲートウェイとサブネット委任の比較

ただし、ODGW経由では、自前でVMをデプロイして、そのサーバーのアーキテクチャ設計からお守りと、何から何まで自社で検討・構築・保守・運用する必要があり、かつ、そのVM 維持費用はコスト負担になるため課題となっていました。

今回のサブネット委任は、それらを根本から解決するサービスです。

類似のサービス

全く別のサービスですが、名称が似ているサービスとして、仮想ネットワーク データ ゲートウェイがあります。

仮想ネットワークゲートウェイは、オンプレミスのデータ ゲートウェイを設定せずに、仮想ネットワーク内から Azure および Power Platform サービスにアクセスできるようにするマネージド ゲートウェイです。

仮想ネットワークゲートウェイはサブネット委任と比較して、適用対象が異なるサービスです。

サービス対象サービス
サブネット委任※次の図3をご覧ください
仮想ネットワーク
ゲートウェイ
Power BI
Power Platform データフローの
ETL (抽出、変換、読み込み) ワークロード用
図2: 仮想ネットワークゲートウェイとサブネット委任の比較

Power BI および Power Platform データフローの ETL (抽出、変換、読み込み) ワークロード用に最適化されています。

リリース状況

現在サブネット委任は、基盤となる機能としては一般提供されています。

ただし、サブネット委任経由で通信できる「委任可能なサービス」によって、リリース状況が異なりますのでご注意ください。

エリア委任可能なサービスリリース状況
DataverseDataverse プラグイン一般提供
コネクタSQL Server
Azure SQL Data Warehouse
Azure キュー
カスタム コネクタ
Azure Key Vault
HTTP with Microsoft Entra ID
Azure File Storage
Azure BLOBストレージ
プレビュー
図3: サブネット委任の対象サービスとリリース状況

最新の情報については、Microsoft Learn にサブネット委任に関するリリース状況の説明がありますので、こちらからご確認ください。

https://learn.microsoft.com/power-platform/admin/vnet-support-overview

今回は、セットアップ方法についてご紹介いたします。

Microsoft 公式のセットアップガイド

正式なセットアップはこちらを参考にしてください。

https://learn.microsoft.com/power-platform/admin/vnet-support-setup-configure

前提条件

  • Power Platform のマネージド環境が有効になっている
  • Power Platform とAzure 仮想ネットワークが同じGeoに存在、または新規作成できる
  • PowerShell の操作に慣れており、エンタープライズポリシーを適用できる
  • 同じテナント内にAzure サブスクリプションとPower Platform がある
  • Azure OpenAI が同じリージョンに存在している

マネージド環境の有効化

接続する環境はマネージド環境である必要があります。

こちらの記事を参考にマネージド環境を有効化してください。

サブネット委任の設定

作成するリソース

最終的に作成するリソースは以下のとおりです。

ただし、Key Vault とAzure OpenAIは直接的にはサブネット委任に関わりませんので、接続したいサービスに応じてリソースを作成してください。

セットアップにはおおよそ1時間ぐらいかかるかと思います。

リソースプロバイダーの設定

Power Platform のリソースプロバイダーを設定します。

Power Platform が登録されたことを確認します。

仮想ネットワークとサブネットの作成

もし仮想ネットワークとサブネットがある場合、それを利用することができます。

利用できるIPアドレスの範囲が/24以上である必要があります。

もし作成する場合は、例えば以下のように作成します。

2つの日本リージョン(東日本、西日本)の両方にセットで仮想ネットワークとサブネットを作成します。

マーケットプレイスからVirtual Network と検索して選択します。

西日本リージョンの場合このように作成しておきます。

東日本リージョンの場合はJapan East をリージョンに指定してください。

ネットワーク名サブネットサブネットの目的IPv4 アドレスの範囲リージョン
vnet-1subnet-1Default10.0.0/16東日本
secondary-vnet-1subnet-1Default10.0.0/16西日本
図4: 仮想ネットワークの設定

Azure OpenAI から接続できるように、接続可能なサービスタグを追加します。

プライマリのリージョンとセカンダリのリージョンの両方のサブネットにサービスタグを追加します。

追加するサービスタグはMicrosoft.CognitiveServicesです。

Azure OpenAI の作成

仮想ネットワークからのみアクセスできるAzure OpenAI サービスをデプロイします。

マーケットプレイスからAzure OpenAI と検索してデプロイします。

ネットワークには一旦プライマリのネットワークを指定しておきます。

あとでセカンダリも登録することができます。

デプロイ後、こちらから既存のフェイルオーバー用のネットワークを追加します。

セカンダリのネットワークを指定して追加します。

Azure OpenAI から利用するキーコンテナーの作成

Azure OpenAI のAPI キー情報を安全に管理するためにAzure Key Vault を作成します。

こちらも仮想ネットワーク経由でのみアクセスできるように設定します。

マーケットプレイスでは以下のようなサービス名で見つけられます。

今回はJapan East にデプロイすることとします。

選択されたネットワークからしかアクセスできないこととします。

キーコンテナーに仮想ネットワークを追加します。

キーコンテナーに関しては複数のネットワークを一度に登録することができます。
また、東日本リージョンにデプロイしても、東日本リージョンと西日本リージョンにある仮想ネットワークの両方に接続することができます。

有効化を待ってから追加を行います。

仮想ネットワークのみとすると、コンテナにキーを登録する際にも影響が及びます。例えば、Azure ポータルからでもシークレットを登録できなくなります。そのため、そのタイミングだけ許可したりして、ただちに切り替えるか、特定のIPアドレスのみ許可するなどが良いでしょう。

ここまでで、接続したいサービスをすべて仮想ネットワークに接続しておく必要があります。

ここからエンタープライズポリシーの設を行うため、仮想ネットワークへの参加が制限される場合があります。

PowerShell サンプルスクリプトのダウンロード

GitHub 上に実行ができるスクリプトが提供されています。

プライマリとセカンダリの両方に実施する必要があります。

まずは、関連するPowerShell のコードをGitHub から全てダウンロードします。

以下よりモジュールを取得することができます。

https://github.com/microsoft/PowerApps-Samples/tree/master/powershell/enterprisePolicies

一括ダウンロード

ソースコードを一式ダウンロードするには以下のリンクが利用できます。

https://github.com/microsoft/PowerApps-Samples/archive/refs/heads/master.zip

利用する部分のみのダウンロード

ただし非常に容量が大きく時間がかかってしまうため、推奨としては必要なコードのみ入手するのが良いかと思います。

Visual Studio Code での作業を行っている方はenterprisePolicies配下のデータをダウンロードしてください。

もし、Webブラウザ上で実施している方はファイルまでたどって行くとダウンロードすることができます。

ブラウザからスクリプトを準備する方はその要領で以下の項目をダウンロードしましょう。

ダウンロードしたファイルは、GitHub と同じようなフォルダ階層にして、ps1ファイルを保存しましょう。

Power Shell 実行の流れ

ダウンロードできまして、準備ができたらPowerShell 実行の流れを確認します。以下の流れで実行していきます。

実行順ファイル名目的
1InstallPowerAppsCmdlets.ps1モジュールのインストール
2SetupSubscriptionForPowerPlatform.ps1サブスクリプションの登録
3SetupVnetForSubnetDelegation.ps1委任の設定
4CreateSubnetInjectionEnterprisePolicy.ps1エンタープライズポリシーの設定
5NewSubnetInjection.ps1サブネットへの委任の実行
図5: PowerShell 実行順

1. モジュールのインストール

PowerShell モジュールを最初にインストールします。

InstallPowerAppsCmdlets.ps1 を実行します。

2. サブスクリプションの登録

SetupSubscriptionForPowerPlatform.ps1 を実行します。

実行後、このようなログが吐き出されます。

Subscription registered for Microsoft.PowerPlatform
Registering the subscription for feature enterprisePoliciesPreview for Microsoft.PowerPlatform
Subscription registered for feature enterprisePoliciesPreview for Microsoft.PowerPlatform
   Tenant: Geek Fujiwara (xxxx-83fa-xxxx-xxxxx-xxxxxxxx)

SubscriptionName SubscriptionId                       Account               Environment
---------------- --------------                       -------               -----------
geek             f7451da2-xxxx-xxxx-xxxx-545430xxxx xxxx@xxxx.com AzureCloud

3. 委任の設定

SubnetInjection\SetupVnetForSubnetDelegation.ps1 を実行します。

このような内容を質問されますので、以下のように回答します。

virtualNetworkSubscriptionId はサブスクリプションIDを指定します。

virtualNetworkSubscriptionId: xxxx-9e56-4ff3-xxxx-xxxx 
virtualNetworkName: vnet-1
subnetName: subnet-1

プライマリ、セカンダリ両方にそれぞれ実行します。こちらのようにログが吐き出されます。

with a developer tool that supports Azure single sign on.'
Getting virtual network vnet-1
Virtual network reterieved
Getting virtual network subnet subnet-1
Virtual network subnet reterieved
Adding delegation for Microsoft.PowerPlatform/enterprisePolicies to subnet Microsoft.Azure.Commands.Network.Models.PSSubnet.Name in vnet vnet-1

Added delegation for Microsoft.PowerPlatform/enterprisePolicies to subnet Microsoft.Azure.Commands.Network.Models.PSSubnet in vnet vnet-1
ResourceGroupName Name   Location  ProvisioningState EnableDdosProtection
----------------- ----   --------  ----------------- --------------------
GeekAI            vnet-1 japaneast Succeeded         False

4. エンタープライズポリシーの設定

SubnetInjection\CreateSubnetInjectionEnterprisePolicy.ps1 を実行します。

以下のようなことを質問されます。それぞれこんな感じで回答します。

  • ポリシー名はここで名前をつけます。
  • primaryVnetIdsecondaryVnetId はAzure ポータルにて、仮想ネットワークのプロパティから取得できます。リソースIDが該当します。

subscriptionId: xxxx-xxxx-xxxx-xxxx-xxxxxx
resourceGroup: GeekAI
enterprisePolicyName: pppolicy-subnet-1
enterprisePolicylocation: japan 
primaryVnetId: /subscriptions/xxxxxx-xxxx-xxxx-xxxx-xxxxxx/resourceGroups/GeekAI/providers/Microsoft.Network/virtualNetworks/vnet-1
primarySubnetName: subnet-1
secondaryVnetId: /subscriptions/xxxxxx-xxxx-xxxx-xxxx-xxxxxx/resourceGroups/GeekAI/providers/Microsoft.Network/virtualNetworks/secondary-vnet-1
secondarySubnetName: subnet-1

以下のようにログが出力されます。

リソースID ResourceIdは後で利用するのでメモしておきます。

Policy created
{
  "ResourceId": "/subscriptions/xxxx-xxxx-xxxx-xxxx-xxxx/resourceGroups/GeekAI/providers/Microsoft.PowerPlatform/enterprisePolicies/pppolicy-subnet-1",
  "Id": "/subscriptions/xxxx-xxxx-xxxx-xxxx-xxxx/resourceGroups/GeekAI/providers/Microsoft.PowerPlatform/enterprisePolicies/pppolicy-subnet-1",
  "Identity": null,
  "Kind": "NetworkInjection",
  "Location": "japan",
  "ManagedBy": null,
  "ResourceName": "pppolicy-subnet-1",
  "Name": "pppolicy-subnet-1",
  "ExtensionResourceName": null,
  "ParentResource": null,
  "Plan": null,
  "Properties": {
    "systemId": "/regions/japan/providers/Microsoft.PowerPlatform/enterprisePolicies/xxxx-xxxx-xxxx-xxxx-xxxx",
    "healthStatus": "Undetermined",
    "networkInjection": {
      "virtualNetworks": [
        {
          "id": "/subscriptions/xxxx-xx-xx-xx-xx/resourceGroups/GeekAI/providers/Microsoft.Network/virtualNetworks/vnet-1",
          "subnet": {
            "name": "subnet-1"
          }
        },
        {
          "id": "/subscriptions/xx-9e56-xx-xx-xxxx/resourceGroups/GeekAI/providers/Microsoft.Network/virtualNetworks/secondary-vnet-1",
          "subnet": {
            "name": "subnet-1"
          }
        }
      ]
    }
  },
  "ResourceGroupName": "GeekAI",
  "Type": "Microsoft.PowerPlatform/enterprisePolicies",
  "ResourceType": "Microsoft.PowerPlatform/enterprisePolicies",
  "ExtensionResourceType": null,
  "Sku": null,
  "Tags": {},
  "TagsTable": null,
  "SubscriptionId": "xxxx-xx-xxx-xxx-xxxx",
  "CreatedTime": null,
  "ChangedTime": null,
  "ETag": null
}

5. ポリシーの適用

SubnetInjection\NewSubnetInjection.ps1 を実行します。

先ほど取得したエンタープライズポリシーのリソースIDをpolicyArmId に渡します。

環境IDenvironmentIdはPower Platform 管理センターなどから入手します。

cmdlet NewSubnetInjection at command pipeline position 1
Supply values for the following parameters:
environmentId: xxxx-xxxx-xxxx-xxxx-xxxx
policyArmId: /subscriptions/xxxx-xxxx-xxxx-xxxx-xxxx/resourceGroups/GeekAI/providers/Microsoft.PowerPlatform/enterprisePolicies/pppolicy-subnet-1

次に質問されるOperationLink は実行しなくてOKです。

ここまでで、エンタープライズポリシーの設定を行うことができました。実際にサブネット委任が行われたかはPower Platform 管理センターにて確認することができます。

履歴を開きます。

実際に実行できていることがわかります。

ここからは委任に対応しているサービスで接続することができます。

以上、ご参考になれば幸いです。

参考: カスタムコネクタの作成

1 COMMENT

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

Index