プライベート リンクを経由した送信接続の作成
この記事では、Azure AI 検索から Azure 仮想ネットワーク内で実行されている Azure リソースへのプライベートな発信呼び出しを構成する方法について説明します。
プライベート接続を設定すると、検索サービスは、インターネットに開かれているポートではなく、仮想ネットワークの IP アドレスに接続できます。 接続用に作成されたオブジェクトは、 共有プライベート リンクと呼ばれます。 接続では、検索サービスは共有プライベート リンクを内部的に使って、ネットワーク境界内の Azure リソースに到達します。
共有プライベート リンクは、使用量に基づいて課金されるプレミアム機能です。 共有プライベート リンクを設定すると、プライベート エンドポイントの料金が Azure 請求書に追加されます。 共有プライベート リンクを使用すると、受信アクセスと送信アクセスのデータ転送レートも請求されます。 料金の詳細については、「Azure Private Link の価格」をご覧ください。
Note
SQL Managed Instance へのプライベート インデクサー接続を設定する場合は、代わりにこの記事を参照して、このリソースの種類に固有の手順を確認してください。
共有プライベート リンクを使用する場合
Azure AI 検索は、次のシナリオで他の Azure リソースへの送信呼び出しを行います。
- ベクター化のための Azure OpenAI、Azure AI Vision、または Azure AI Foundry モデル カタログへのインデクサー接続またはクエリ接続
- サポートされているデータ ソースへのインデクサー接続
- インデクサー (スキルセット) が、エンリッチメントのキャッシュ、デバッグ セッションの状態、またはナレッジ ストアへの書き込みのために Azure Storage に接続
- 課金目的での Azure AI サービスへのインデクサー (スキルセット) 接続
- Azure Key Vault へ暗号化キーを要求
- Azure Functions または同様のリソースに対するカスタム スキルを要求
共有プライベート リンクは、Azure から Azure への接続でのみ機能します。 OpenAI または別の外部モデルに接続する場合は、接続はパブリック インターネット経由である必要があります。
共有プライベート リンクは操作用であり、Azure 仮想ネットワークで実行される Azure リソースまたはクライアント用にプライベート エンドポイントを介してアクセスされるデータ用です。
共有プライベート リンク:
- Azure AI Search ツール、API、または SDK を使用して作成済み
- Azure リソース所有者によって承認済み
- 特定の Azure リソースへのプライベート接続で Azure AI Search によって内部的に使用される
作成したプライベート リンクを使用できるのは検索サービスだけです。リソースとサブリソースの組み合わせごとに、サービスに作成できる共有プライベート リンクは 1 つのみです。
プライベート リンクを設定すると、検索サービスがそのリソースに接続するたびに自動的に使われます。 接続文字列を変更したり、要求の発行に使うクライアントを変更したりする必要はありませんが、接続に使われるデバイスは、Azure リソースのファイアウォールで認可された IP を使って接続する必要があります。
Azure Private Link と Azure AI Search を一緒に使用するシナリオは 2 つあります。
シナリオ 1: Azure への "送信" (インデクサー) 接続でプライベート接続が必要な場合に、共有プライベート リンクを作成します。
シナリオ 2: 仮想ネットワークで実行されているクライアントからのプライベート "受信" 接続の検索を構成します。
この記事では、1 番目のシナリオについて説明します。
どちらのシナリオも Azure Private Link に依存していますが、それぞれ独立しています。 プライベート エンドポイント用に独自の検索サービスを構成しなくても、共有プライベート リンクを作成できます。
制限事項
シナリオの共有プライベート リンクを評価する場合、これらの制約に注意してください。
共有プライベート リンクで使用されるリソースの種類の一部は、プレビュー段階です。 プレビュー リソース (Azure Database for MySQL または Azure SQL Managed Instance) に接続する場合は、プレビュー バージョンの管理 REST API を使用して共有プライベート リンクを作成します。 これらのバージョンには、
2020-08-01-preview
、2021-04-01-preview
、2024-03-01-preview
、および2024-06-01-preview
が含まれます。 最新のプレビュー API をお勧めします。インデクサーの実行では、検索サービスに固有のプライベート実行環境を使用する必要があります。 プライベート エンドポイント接続は、マルチテナント コンテンツ処理環境からはサポートされていません。 この要件の構成設定については、この記事で説明されています。
共有プライベート リンク リソースの各レベルでの制限を確認します。
前提条件
仮想ネットワークで実行するように構成された、サポートされている Azure リソース。
階層とリージョンの要件を持つ Azure AI 検索サービス (ワークロード別):
ワークロード 階層の要件 リージョンの要件 サービス作成の要件 スキルセットのないインデクサー Basic 以上 なし なし 埋め込みスキルを含むスキルセット (垂直統合) Basic 以上 大容量リージョン 2024 年 4 月 3 日より後 他の組み込みまたはカスタム スキルを使うスキルセット Standard 2 (S2) 以上 なし 2024 年 4 月 3 日より後 Azure AI 検索と Azure リソースの両方に対するアクセス許可:
リソース アクセス許可 Azure AI Search Microsoft.Search/searchServices/sharedPrivateLinkResources/write
Microsoft.Search/searchServices/sharedPrivateLinkResources/read
Microsoft.Search/searchServices/sharedPrivateLinkResources/operationStatuses/read
他の Azure リソース プライベート エンドポイント接続を承認するためのアクセス許可。 たとえば、Azure Storage では、 Microsoft.Storage/storageAccounts/privateEndpointConnectionsApproval/action
が必要です。
サポートされているリソースの種類
次のリソースの共有プライベート リンク リソースを作成できます。
リソースの種類 | サブリソース (またはグループ ID) |
---|---|
Microsoft.Storage/storageAccounts 1 | blob 、table 、dfs , file |
Microsoft.DocumentDB/databaseAccounts 2 | Sql |
Microsoft.Sql/servers 3 | sqlServer |
Microsoft.KeyVault/vaults | vault |
Microsoft.DBforMySQL/servers (プレビュー) | mysqlServer |
Microsoft.Web/sites 4 | sites |
Microsoft.Sql/managedInstances (プレビュー) 5 | managedInstance |
Microsoft.CognitiveServices/accounts 6 7 | openai_account |
Microsoft.CognitiveServices/accounts 8 | cognitiveservices_account |
1 Azure Storage と Azure AI Search が同じリージョンにある場合、ストレージへの接続は Microsoft バックボーン ネットワーク経由で行われます。この構成では共有プライベート リンクが冗長になります。 ただし、Azure Storage のプライベート エンドポイントが既に設定されている場合は、共有プライベート リンクも設定する必要があります。そうでない場合、ストレージ側で接続が拒否されます。 また、検索のさまざまなシナリオで複数のストレージ形式を使用している場合は、サブリソースごとに個別の共有プライベート リンクも作成します。
2 Microsoft.DocumentDB/databaseAccounts
リソースの種類は、Azure Cosmos DB for NoSQL へのインデクサー接続に使用されます。 プロバイダー名とグループ ID では、大文字と小文字が区別されます。
3 リソースの種類 Microsoft.Sql/servers
は、Azure SQL データベースへの接続に使用されます。 現在、Azure Synapse SQL への共有プライベート リンクのサポートは存在しません。
4 リソースの種類 Microsoft.Web/sites
は、App Service と Azure Functions に使用されます。 Azure AI Search のコンテキストでは、Azure 関数がより可能性の高いシナリオとなります。 Azure 関数は、カスタム スキルのロジックをホストする目的で一般的に使用されます。 Azure 関数には、従量課金プラン、Premium プラン、専用 App Service ホスティング プランがあります。 現時点では、App Service Environment (ASE)、Azure Kubernetes Service (AKS)、Azure API Management はサポートされていません。
5 手順については、「SQL Managed Instance の共有プライベート リンクの作成」を参照してください。
6 リソースの種類 Microsoft.CognitiveServices/accounts
は、垂直統合実装時の Azure OpenAI 埋め込みモデルへのベクタライザーとインデクサーの接続に使われます。 2024 年 11 月 19 日の時点で、Azure AI Foundry モデル カタログの埋め込みモデルや Azure AI Vision マルチモーダル API への共有プライベート リンクはサポートされていません。
7 Azure OpenAI に対する共有プライベート リンクは、パブリック クラウドでのみサポートされています。 Microsoft Azure Government などの他のクラウド オファリングでは、openai_account
グループ ID の共有プライベート リンクはサポートされていません。
8 Azure AI マルチサービス アカウントへの接続のための共有プライベート リンクは (2024 年 11 月現在) サポートされるようになりました。 Azure AI 検索は、課金のために Azure AI マルチサービスに接続します。 これらの接続は、共有プライベート リンクを介してプライベートにできるようになりました。 共有プライベート リンクは、スキルセット定義で、マネージド ID (キーレス構成) を構成している場合にのみサポートされます。
1 - 共有プライベート リンクを作成する
Azure portal、Management REST API、Azure CLI、または Azure PowerShell を使用して、共有プライベート リンクを作成します。
いくつかのヒントを次に示します。
- プライベート リンクにはわかりやすい名前を付けます。 Azure PaaS リソースでは、共有プライベート リンクは、他のプライベート エンドポイントと共に表示されます。 "shared-private-link-for-search" のような名前にすると、その使用方法を通知できます。
このセクションでこれらの手順を完了すると、保留中の状態でプロビジョニングされた共有プライベート リンクが作成されます。 リンクの作成には数分かかります。 動作可能にするには、作成後にリソース所有者が要求を承認する必要があります。
Azure portal にサインインし、ご利用の検索サービスを探します。
左側のナビゲーション ウィンドウの [設定] で [ネットワーク] を選択します。
[共有プライベート アクセス] ページで、[+ 共有プライベート アクセスの追加] を選択します。
[マイ ディレクトリ内の Azure リソースに接続します] または [リソース ID を使って Azure リソースに接続します] を選びます。
最初のオプション (推奨) を選択すると、Azure portal が適切な Azure リソースの選択をサポートし、リソースのグループ ID やリソースの種類など、他のプロパティを自動入力します。
2 番目のオプションを選択した場合は、Azure リソース ID を手動で入力し、この記事の冒頭にあるリストから適切なグループ ID を選択します。
プロビジョニングの状態が "更新中" であることを確認します。
リソースが正常に作成されると、リソースのプロビジョニング状態が "成功" に変わります。
共有プライベート リンクの作成ワークフロー
成功した場合、202 Accepted
応答が返されます。 発信プライベート エンドポイントを作成するプロセスは長時間実行される (非同期の) 操作です。 これには、次のリソースのデプロイが含まれます。
プライベート IP アドレスが割り当てられた、
"Pending"
状態のプライベート エンドポイント。 このプライベート IP アドレスは、検索サービス固有のプライベート インデクサー実行環境の仮想ネットワークに割り当てられたアドレス空間から取得されます。 プライベート エンドポイントが承認されると、Azure AI Search から Azure リソースへのすべての通信は、プライベート IP アドレスとセキュリティで保護されたプライベート リンク チャネルから行われます。グループ ID に基づく、リソースの種類のプライベート DNS ゾーン。 このリソースをデプロイすると、プライベート リソースへの DNS 参照で、プライベート エンドポイントに関連付けられた IP アドレスが使用されるようになります。
2 - プライベート エンドポイント接続を承認する
プライベート エンドポイント接続の承認は、Azure PaaS 側で付与されます。 リソース所有者による明示的な承認が必要です。 次の手順では、Azure portal を使った承認ついて説明します。ただし、Azure PaaS 側からプログラムにより接続を承認するためのリンクもいくつかあります。
- Azure Storage で、プライベート エンドポイント接続 - Put を使用します
- Azure Cosmos DB で、プライベート エンドポイント接続 - 作成または更新を使用します
- Azure OpenAI で、 プライベート エンドポイント接続の作成または更新を使用します
Azure portal を使って、次の手順を実行します。
Azure PaaS resource.text の [ネットワーク] ページを開きます。
プライベート エンドポイント接続のリストを示すセクションを見つけます。 ストレージ アカウントの例を次に示します。
接続を選択し、[承認] を選択します。 Azure portal で状態が更新されるまでには、数分かかる場合があります。
プライベート エンドポイントが承認されると、Azure AI Search によって、それに対して作成された DNS ゾーンに必要な DNS ゾーン マッピングが作成されます。
[ネットワーク] ページ上で [プライベート エンドポイント] のリンクはアクティブですが、これは解決されません。
このリンクを選択するとエラーが発生します。 "The access token is from the wrong issuer"
と must match the tenant associated with this subscription
のステータス メッセージが表示されるのは、バックエンド プライベート エンドポイント リソースは Microsoft が管理するテナント内で Microsoft によってプロビジョニングされるのに対し、このリンクされたリソース (Azure AI 検索) はユーザーのテナント内にあるためです。 仕様により、プライベート エンドポイント接続リンクを選んでプライベート エンドポイント リソースにアクセスすることはできません。
共有プライベート リンクの状態を調べるには、次のセクションの手順のようにします。
3 - 共有プライベート リンクの状態を確認する
Azure AI Search 側で、検索サービスの [ネットワーク] ページの [共有プライベート アクセス] ページに再びアクセスすることで、要求の承認を確認できます。 接続状態が承認されているはずです。
別の方法として、共有プライベート リンク リソース - GET を使用して接続の状態を取得することもできます。
az rest --method get --uri https://management.azure.com/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/contoso/providers/Microsoft.Search/searchServices/contoso-search/sharedPrivateLinkResources/blob-pe?api-version=2024-07-01
これにより、JSON が返されます。接続状態は "properties" セクションの下の "status" として表示されます。 ストレージ アカウントの例を次に示します。
{
"name": "blob-pe",
"properties": {
"privateLinkResourceId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/contoso/providers/Microsoft.Storage/storageAccounts/contoso-storage",
"groupId": "blob",
"requestMessage": "please approve",
"status": "Approved",
"resourceRegion": null,
"provisioningState": "Succeeded"
}
}
リソースのプロビジョニング状態 (properties.provisioningState
) が "成功" で、接続状態 (properties.status
) が "承認済み" の場合、共有プライベート リンク リソースが機能し、プライベート エンドポイント経由で通信するようにインデクサーを構成できることを意味します。
4 - プライベート環境で実行されるようにインデクサーを構成する
インデクサーの実行は、検索サービス固有のプライベート環境、または複数の顧客に対して高コストのスキルセット処理をオフロードするために内部的に使用されるマルチテナント環境のいずれかで発生します。
実行環境は透過的ですが、ファイアウォール規則の構築やプライベート接続の確立を開始した後は、インデクサーの実行を考慮する必要があります。 プライベート接続の場合は、常にプライベート環境で実行されるようにインデクサーの実行を構成します。
このステップでは、REST API を使用して、インデクサーをプライベート環境で実行するように構成する方法を示します。 Azure portal 内では、JSON エディターを使用して実行環境を設定することもできます。
Note
この手順は、プライベート エンドポイント接続が承認される前に実行できます。 ただし、プライベート エンドポイント接続が承認されるまで、セキュリティで保護されたリソース (ストレージ アカウントなど) との通信を試行するすべての既存のインデクサーは、一時的なエラー状態になり、新しいインデクサーの作成に失敗します。
通常どおりに、データ ソース定義、インデックス、およびスキルセット (使用している場合) を作成します。 共有プライベート エンドポイントを使用する場合、これらの定義にはプロパティがありません。
前の手順で作成したデータ ソース、インデックス、スキルセットを指すインデクサーを作成します。 また、インデクサーの構成プロパティ
executionEnvironment
をprivate
に設定して、インデクサーがプライベート実行環境で実行されるように強制します。{ "name": "indexer", "dataSourceName": "blob-datasource", "targetIndexName": "index", "parameters": { "configuration": { "executionEnvironment": "private" } }, "fieldMappings": [] }
インデクサーが正しく作成されると、プライベート エンドポイント接続を介してそれが Azure リソースに接続されます。 インデクサーの状態は、インデクサーの状態 API を使用して監視できます。
Note
既存のインデクサーがある場合は、PUT API 経由で executionEnvironment
を private
に設定するか、Azure portal 内で JSON エディターを使用して、それらを更新できます。
5 - 共有プライベート リンクをテストする
まだ行っていない場合、Azure PaaS リソースがパブリック インターネットからの接続を拒否していることを確認します。 接続が受け入れられる場合は、Azure PaaS リソースの [ネットワーク] ページで DNS 設定を確認します。
プライベート エンドポイントへのインデクサー接続など、送信要求シナリオを呼び出すことができるツールを選択します。 [データのインポート] ウィザードを使用する方法は簡単ですが、REST クライアントと REST API を使用して精度を高めることもできます。 検索サービスがプライベート接続用に構成されていないと仮定すると、検索への REST クライアント接続はパブリック インターネット経由で行うことができます。
接続文字列をプライベート Azure PaaS リソースに設定します。 共有プライベート リンクの接続文字列の形式は変更されません。 検索サービスでは、内部的に共有プライベート リンクを呼び出します。
インデクサー ワークロードの場合、接続文字列はデータ ソース定義にあります。 データ ソースの例を次に示します。
{ "name": "my-blob-ds", "type": "azureblob", "subtype": null, "credentials": { "connectionString": "DefaultEndpointsProtocol=https;AccountName=<YOUR-STORAGE-ACCOUNT>;AccountKey=..." }
インデクサー ワークロードでは、インデクサー定義で実行環境を設定することを忘れないでください。 インデクサー定義の例を次に示します。
"name": "indexer", "dataSourceName": "my-blob-ds", "targetIndexName": "my-index", "parameters": { "configuration": { "executionEnvironment": "private" } }, "fieldMappings": [] }
インデクサーを実行します。 インデクサーの実行が成功し、検索インデックスが設定された場合、共有プライベート リンクは機能しています。
トラブルシューティング
"データ ソースの資格情報が無効です" でインデクサーの作成が失敗した場合は、接続をデバッグする前に、共有プライベート リンクの承認状態を確認してください。 状態が
Approved
の場合は、properties.provisioningState
プロパティを確認します。Incomplete
の場合は、基になる依存関係に問題がある可能性があります。 この場合は、共有プライベート リンクを再作成するためにPUT
要求を再発行します。 また、承認ステップを繰り返す必要がある場合もあります。インデクサーが常に、または断続的に失敗する場合は、インデクサーの
executionEnvironment
プロパティを確認します。 値はprivate
に設定する必要があります。 このプロパティを設定しておらず、インデクサーが過去に正常に実行された場合は、検索サービスが独自にプライベート環境を使用していることが原因です。 システムに負荷がかかっている場合、検索サービスはマルチテナント環境から処理を移動します。共有プライベート リンクの作成中にエラーが発生した場合は、サービスの制限を確認して、ご利用のレベルのクォータ内であることを確認してください。
次のステップ
プライベート エンドポイントと他のセキュリティで保護された接続方法の詳細については、次を参照してください。