Azure AI Search での共有プライベート リンクに関する問題のトラブルシューティング

共有プライベート リンクを使用すると、Azure AI Search で、仮想ネットワーク内の顧客リソースにアクセスするとき、プライベート エンドポイント上でセキュリティで保護された送信接続を作成できます。 この記事は、発生しうるエラーを解決するのに役立ちます。

共有プライベート リンクの作成は、検索サービスのコントロール プレーン操作です。 共有プライベート リンクの作成は、ポータルまたは Management REST API を使用して行います。 プロビジョニング中、要求の状態は "更新中" です。 操作が正常に完了すると、状態は "Succeeded" になります。 リソースへのプライベート エンドポイントが、DNS ゾーンとマッピングとともに作成されます。 このエンドポイントは、検索サービス インスタンスによって排他的に使用され、Azure AI Search を通じて管理されます。

共有プライベート リンク リソースの作成に必要な手順

次に、作成フェーズ中に発生する一般的なエラーをいくつか示します。

要求の検証エラー

  • サポートされていない SKU: 共有プライベート リンクが Basic レベル以上でサポートされています。 スキルセットを持つインデクサーの場合、最小レベルは Standard 2 (S2) です。

  • 無効な名前: 共有プライベート リンクの名前付け規則を以下に示します。

    • 長さを 1 ~ 60 文字にしてください
    • 英数字
    • 名前にアンダースコア _、ピリオド .、ハイフン - を含めることができるのは、名前の最初の文字でない場合です
  • 無効なグループ ID: グループ ID では大文字と小文字が区別され、次の表の値のいずれかでなければなりません。

    Azure リソース Group ID 利用可能な最初の API バージョン
    Azure Storage - BLOB (または) ADLS Gen 2 blob 2020-08-01
    Azure Storage - Tables table 2020-08-01
    NoSQL 用 Azure Cosmos DB Sql 2020-08-01
    Azure SQL データベース sqlServer 2020-08-01
    Azure Database for MySQL (プレビュー) mysqlServer 2020-08-01-Preview
    Azure Key Vault vault 2020-08-01
    Azure Functions (プレビュー) sites 2020-08-01-Preview

    "(プレビュー)" のマークが付いたリソースは、プレビュー バージョンの Management REST API を使用して作成する必要があります。

  • privateLinkResourceId の種類の検証: groupId と同様に、Azure AI Search により、privateLinkResourceId で "正しい" リソースの種類が指定されていることが検証されます。 有効なリソースの種類は以下のとおりです。

    Azure リソース リソースの種類 利用可能な最初の API バージョン
    Azure ストレージ Microsoft.Storage/storageAccounts 2020-08-01
    Azure Cosmos DB Microsoft.DocumentDb/databaseAccounts 2020-08-01
    Azure SQL Database Microsoft.Sql/servers 2020-08-01
    Azure Key Vault Microsoft.KeyVault/vaults 2020-08-01
    Azure Database for MySQL (プレビュー) Microsoft.DBforMySQL/servers 2020-08-01-Preview
    Azure Functions (プレビュー) Microsoft.Web/sites 2020-08-01-Preview
    Azure SQL Managed Instance (プレビュー) Microsoft.Sql/managedInstance 2020-08-01-Preview

    さらに、指定されたリソースの種類に対して、指定された groupId が有効である必要があります。 たとえば、groupId "BLOB" は、"Microsoft.Storage/storageAccounts" に対して有効であり、その他のリソースの種類では使用できません。 特定の検索管理 API バージョンについて、顧客はサポートされている API の一覧を使用して、サポートされている groupId およびリソースの種類の詳細を確認できます。

  • クォータ制限の適用: Search Service では、作成できる共有プライベート リンク リソースの個別の数と、使用されているさまざまなターゲット リソースの種類の数 (groupId に基づく) に対してクォータが課せられています。 これらは、Azure AI Search のサービスの制限に関するページのセクション「共有プライベート リンク リソースの制限」に記載されています。

デプロイの失敗

検索サービスは、共有プライベート リンクを作成する要求を開始しますが、実際の処理は、Azure Resource Manager が実行します。 デプロイの状態は、ポータル内で、またはクエリを使用して確認し、発生する可能性があるエラーに対処できます。

Azure Resource Manager デプロイに失敗した共有プライベート リンク リソースは、List および Get API 呼び出しに表示されますが、"プロビジョニング状態" は Failed になります。 Azure Resource Manager デプロイ エラーの原因が確認されたら、Failed リソースを削除し、次の表から適切な解決策を適用した後、再作成します。

デプロイ エラーの原因 説明 解像度
"LinkedAuthorizationFailed" このエラー メッセージは、クライアントが、検索サービス上に共有プライベート リンクを作成するためのアクセス許可を持っているものの、リンクされたスコープに対してアクション "privateEndpointConnectionApproval/action" を実行するアクセス許可は持っていないことを示しています。 要求のプライベート リンク ID を再確認して、URI にエラーや省略がないことを確認します。 Azure AI Search と Azure PaaS リソースが別々のサブスクリプションにあり、かつ REST またはコマンド ライン インターフェイスを使用している場合は、そのアクティブな Azure アカウントが Azure PaaS リソース用であることを確認します。 REST クライアントの場合は、期限切れのベアラー トークンを使用していないことと、トークンがアクティブなサブスクリプションで有効であることを確認します。
ネットワーク リソース プロバイダーがターゲット リソースのサブスクリプションに登録されていない プライベート エンドポイント (および関連付けられている DNS マッピング) は、Microsoft.Network リソース プロバイダー (RP) を使用して、ターゲット リソース (ストレージ アカウント、Azure Cosmos DB、Azure SQL など) 向けに作成されます。 ターゲット リソースをホストするサブスクリプション ("ターゲット サブスクリプション") が Microsoft.Network RP に登録されていない場合、Azure Resource Manager デプロイは失敗するおそれがあります。 この RP をターゲット サブスクリプションに登録する必要があります。 リソース プロバイダーの登録を、Azure portal 、PowerShell、または CLI を使用して行います。
ターゲット リソースの groupId が無効 Azure Cosmos DB アカウントが作成されたら、データベース アカウントの API の種類を指定できます。 Azure Cosmos DB にはいくつかの異なる種類の API が用意されていますが、Azure AI Search では、共有プライベート リンク リソースの groupId として "Sql" のみがサポートされています。 Sql 以外のデータベース アカウントを参照する privateLinkResourceId に対して種類が "Sql" の共有プライベート リンクが作成されると、groupId の不一致が原因で Azure Resource Manager デプロイは失敗します。 Azure Cosmos DB アカウントの Azure リソース ID は、使用されている API の種類を特定するのに十分ではありません。 Azure AI Search によってプライベート エンドポイントの作成が試行され、Azure Cosmos DB によって拒否されます。 指定された Azure Cosmos DB リソースの privateLinkResourceId が、種類が "Sql" である API のデータベース アカウント用であることを確認する必要があります
ターゲット リソースが見つからない privateLinkResourceId で指定されたターゲット リソースの存在は、Azure Resource Manager デプロイの開始時にのみ確認されます。 ターゲット リソースが使用できなくなった場合、デプロイは失敗します。 指定されたサブスクリプションとリソース グループにターゲット リソースが存在し、移動も削除もされていないことを確認する必要があります。
一時的、またはその他のエラー Azure Resource Manager デプロイは、インフラストラクチャが停止した場合やその他の予期しない理由により、失敗することがあります。 これはまれであり、通常は一時的な状態を示します。 後でこのリソースの作成をもう一度お試しください。 問題が引き続き発生する場合は、Azure サポートにお問い合わせください。

バッキング プライベート エンドポイントの承認に関する問題

プライベート エンドポイントは、共有プライベート リンク作成要求で指定されているターゲット Azure リソースに対して作成されます。 これは、非同期 Azure Resource Manager デプロイ操作の最後の手順の 1 つですが、Azure AI Search では、ネットワーク構成の一部としてプライベート エンドポイントのプライベート IP アドレスをリンクする必要があります。 このリンクが完了すると、共有プライベート リンク リソースの provisioningState は、最終成功状態 Succeeded になります。 お客様は、状態が Succeeded に移行して初めて、承認または拒否 (または一般にバッキング プライベート エンドポイントの構成を変更) する必要があります。 その前に何らかの方法でプライベート エンドポイントを変更すると、デプロイ操作が不完全になり、共有プライベート リンク リソースが (直ちに、または通常は数時間以内に) Failed 状態で終了する場合があります。

Search Service ネットワーク接続の変更が "更新中" 状態で停止している

共有プライベート リンクとプライベート エンドポイントは、検索サービスの "パブリック ネットワーク アクセス" が [無効] になっている場合に使用されます。 通常、ネットワーク接続の変更は、要求が受け入れられた後、数分で成功します。 状況によっては、Azure AI Search で接続の変更操作が完了するのに数時間かかる場合があります。

パブリック ネットワーク アクセスを [無効] に変更しているスクリーンショット。

接続の変更操作にかなりの時間がかかっている場合は、数時間お待ちください。 接続の変更操作には、DNS レコードの更新などの操作が含まれているため、想定以上に時間がかかる場合があります。

パブリック ネットワーク アクセスが変更されると、既存の共有プライベート リンクとプライベート エンドポイントが正しく機能しなくなる可能性があります。 接続の変更操作中に既存の共有プライベート リンクとプライベート エンドポイントが動作しなくなった場合は、操作が完了するまで数時間お待ちください。 それでも動作しない場合は、削除して再作成してみてください。

通常、共有プライベート リンク リソースは、要求が受け入れられてから数分後に最終状態 (Succeeded または Failed) になります。

まれに、Azure AI Search で共有プライベート リンク リソースの状態を最終状態 (Succeeded または Failed) に正しくマークできない場合があります。 これは通常、予期しないエラーが原因で発生します。 共有プライベート リンク リソースは、最終状態以外の状態で数時間以上 "スタック" した場合、自動的に Failed 状態に遷移します。

共有プライベート リンク リソースが最終状態に移行していないことを確認した場合は、Failed になるのを数時間待ってから、削除と再作成を行ってください。 または、待機する代わりに、別の共有プライベート リンク リソースを別の名前で作成することもできます (他のすべてのパラメーターは同じままにします)。

既存の共有プライベート リンク リソースは、Create API または Update API を使用して更新できます。 検索では、共有プライベート リンク リソースの限られた更新のみが可能です。この API を使用して更新できるのは、要求メッセージだけです。

  • 既存の共有プライベート リンク リソース (privateLinkResourceIdgroupId など) の "コア" プロパティを更新することはできません。これは常にサポートされません。 要求メッセージ以外のプロパティを変更する必要がある場合は、共有プライベート リンク リソースを削除して再作成することをお勧めします。

  • 共有プライベート リンク リソースの要求メッセージの更新は、Succeeded のプロビジョニング状態に達した場合にのみ可能です。

顧客は、Delete API を使用して、既存の共有プライベート リンク リソースを削除できます。 作成 (または更新) のプロセスと同様に、これは 4 つの手順を含む非同期操作です。

  1. 共有プライベート リンク リソースを削除するよう検索サービスに要求します。

  2. 検索サービスにより、リソースが存在しており、削除に有効な状態にあることが検証されます。 その場合は、リソースを削除するために Azure Resource Manager の削除操作が開始されます。

  3. Search により、操作の完了に対してクエリが実行されます (通常は数分かかります)。 この時点で、共有プライベート リンク リソースのプロビジョニング状態は "削除中" になります。

  4. 操作が正常に完了すると、バッキング プライベート エンドポイントおよび関連付けられているすべての DNS マッピングが削除されます。 リソースは List 操作の一部として表示されません。このリソースに対して Get 操作を試行すると、"404 Not Found" エラーになります。

共有プライベート リンク リソースの削除に必要な手順

削除フェーズ中に発生する一般的なエラーを以下に示します。

エラーの種類 説明 解像度
リソースが最終状態以外の状態である 最終状態 (Succeeded または Failed) ではない共有プライベート リンク リソースは削除できません。 共有プライベート リンク リソースは、最大 8 時間、最終状態以外の状態のままスタックすることがあります (めったにありません)。 リソースが最終状態に達するまで待ち、削除要求をもう一度お試しください。
削除操作が "競合" エラーで失敗した 共有プライベート リンク リソースを削除する Azure Resource Manager 操作が、privateLinkResourceId ("ターゲット RP") で指定されたターゲット リソースのリソース プロバイダーに到達してから、プライベート エンドポイントと DNS マッピングを削除できるようになります。 顧客は、Azure リソース ロックを利用して、リソースに対する変更を防止できます。 Azure Resource Manager がターゲット RP に到達すると、ターゲット RP では、(プライベート エンドポイントに関する詳細をそのメタデータから削除するために) ターゲット リソースの状態を変更する必要があります。 ターゲット リソース (またはそのリソース グループかサブスクリプション) にロックが構成されている場合、Azure Resource Manager 操作は "競合" (および該当する詳細情報) で失敗します。 共有プライベート リンク リソースは削除されません。 顧客は、削除操作を再試行する前に、ターゲット リソースのロックを解除する必要があります。 : この問題は、顧客が、"ロックされた" ターゲット リソースを参照する共有プライベート リンク リソースを使用して Search Service を削除しようとした場合にも発生するおそれがあります。
削除操作に失敗した まれに、非同期 Azure Resource Manager 削除操作が失敗する場合があります。 この操作が失敗した場合、非同期操作の状態に対してクエリを実行すると、顧客に対してエラー メッセージと該当する詳細情報が表示されます。 後で操作をもう一度お試しください。問題が解決しない場合は、Azure サポートにお問い合わせください。
リソースが "削除中" 状態でスタックする まれに、共有プライベート リンク リソースが "削除中" 状態で最大 8 時間スタックする場合があります。これは、Search RP で致命的なエラーが発生したことが原因であるおそれがあります。 8 時間待って、リソースが Failed 状態に遷移してから、要求を再発行します。

次のステップ

共有プライベート リンク リソースと、そのリソースを使用して保護されたコンテンツへの安全なアクセスを確保する方法の詳細については、こちらをご覧ください。