マネージド ID を使用して Azure Storage へのインデクサー接続を設定する

この記事では、接続文字列で資格情報を指定する代わりに、マネージド ID を使用して Azure Storage アカウントへのインデクサー接続を設定する方法を説明します。

システム割り当てマネージド ID またはユーザー割り当てマネージド ID (プレビュー) を使用できます。 マネージド ID は Microsoft Entra のログイン ID であり、Azure Storage のデータにアクセスするには Azure でのロールの割り当てが必要です。

Note

ストレージがネットワークで保護されており、かつ検索サービスと同じリージョンにある場合は、システム割り当てマネージド ID と、信頼されたサービスとしての接続、またはリソース インスタンス ルールを使用した接続のいずれかのネットワーク オプションを使用する必要があります。

前提条件

  • 検索サービス用のマネージド ID を作成します。

  • Azure Storage でロールを割り当てます。

    • Blob Storage と ADLS Gen2 へのデータ読み取りアクセスのためには [ストレージ BLOB データ閲覧者] を選択します。

    • Table Storage および File Storage へのデータ読み取りアクセスのためには [閲覧者とデータ] を選択します。

  • インデクサーの概念構成についてよく理解しておく必要があります。

ヒント

C# のコード例については、GitHub の「Microsoft Entra ID を使用して Data Lake Gen2 のインデックスを付ける」を参照してください。

データ ソースを作成する

データ ソースを作成し、システム割り当てマネージド ID またはユーザー割り当てマネージド ID (プレビュー) のいずれかを指定します。

システム割り当てマネージド ID

REST API、Azure portal、および .NET SDK では、システム割り当てマネージド ID の使用がサポートされています。

システム割り当てマネージド ID を使用して接続する場合は、データソース定義に対して、"credentials" プロパティの形式を変更するだけで済みます。 アカウント キーまたはパスワードのない ResourceId を指定します。 ResourceId には、ストレージ アカウントのサブスクリプション ID、ストレージ アカウントのリソース グループ、およびストレージ アカウント名を含める必要があります。

以下に、データ ソースの作成 REST API とマネージド ID 接続文字列を使用し、ストレージ アカウントのデータにインデックスを付けるためにデータ ソースを作成する方法の例を示します。 マネージド ID 接続文字列の形式は、REST API、.NET SDK、および Azure portal において同じです。

POST https://[service name].search.windows.net/datasources?api-version=2023-11-01
Content-Type: application/json
api-key: [admin key]

{
    "name" : "blob-datasource",
    "type" : "azureblob",
    "credentials" : { 
        "connectionString" : "ResourceId=/subscriptions/[subscription ID]/resourceGroups/[resource group name]/providers/Microsoft.Storage/storageAccounts/[storage account name]/;" 
    },
    "container" : { 
        "name" : "my-container", "query" : "<optional-virtual-directory-name>" 
    }
}   

ユーザー割り当てマネージド ID (プレビュー)

2021-04-30-preview REST API では、ユーザー割り当てマネージド ID に基づく接続がサポートされています。 ユーザー割り当てマネージド ID を使用して接続する場合、データソースの定義に対する変更は次の 2 つとなります。

  • まず、"credentials" プロパティの形式は、アカウント キーまたはパスワードを持たない ResourceId です。 ResourceId には、ストレージ アカウントのサブスクリプション ID、ストレージ アカウントのリソース グループ、およびストレージ アカウント名を含める必要があります。 この形式は、システム割り当てマネージド ID の形式と同じです。

  • 次に、ユーザー割り当てマネージド ID のコレクションを含む "identity" プロパティを追加します。 データ ソースを作成するとき、ユーザー割り当てマネージド ID を 1 つだけ指定する必要があります。 それを、"userAssignedIdentities" という型に設定します。

以下に、プレビュー段階にあるデータ ソースの作成または更新 REST API を使用してインデクサー データ ソース オブジェクトを作成する方法の例を示します。

POST https://[service name].search.windows.net/datasources?api-version=2021-04-30-preview
Content-Type: application/json
api-key: [admin key]

{
    "name" : "blob-datasource",
    "type" : "azureblob",
    "credentials" : { 
        "connectionString" : "ResourceId=/subscriptions/[subscription ID]/resourceGroups/[resource group name]/providers/Microsoft.Storage/storageAccounts/[storage account name]/;" 
    },
    "container" : { 
        "name" : "my-container", "query" : "<optional-virtual-directory-name>" 
    },
    "identity" : { 
        "@odata.type": "#Microsoft.Azure.Search.DataUserAssignedIdentity",
        "userAssignedIdentity" : "/subscriptions/[subscription ID]/resourcegroups/[resource group name]/providers/Microsoft.ManagedIdentity/userAssignedIdentities/[managed identity name]" 
    }
}   

インデックスの作成

インデックスでは、検索に使用する、ドキュメント内のフィールド、属性、およびその他の構成要素を指定します。

ここでは、BLOB から抽出されたテキストを格納するために、検索可能な content フィールドを含む Create Index REST API を示します。

POST https://[service name].search.windows.net/indexes?api-version=2023-11-01
Content-Type: application/json
api-key: [admin key]

{
        "name" : "my-target-index",
        "fields": [
        { "name": "id", "type": "Edm.String", "key": true, "searchable": false },
        { "name": "content", "type": "Edm.String", "searchable": true, "filterable": false, "sortable": false, "facetable": false }
        ]
}

インデクサーを作成する

インデクサーはデータ ソースをターゲットの検索インデックスに接続し、データ更新を自動化するスケジュールを提供します。 インデックスとデータ ソースを作成したら、インデクサーを作成して実行する準備は完了です。 インデクサーが成功した場合、接続構文とロールの割り当ては有効です。

次に、BLOB インデクサー定義を使用して Create Indexer REST API を呼び出す方法を示します。 要求を送信すると、インデクサーが実行されます。

POST https://[service name].search.windows.net/indexers?api-version=2023-11-01
Content-Type: application/json
api-key: [admin key]

{
    "name" : "blob-indexer",
    "dataSourceName" : "blob-datasource",
    "targetIndexName" : "my-target-index"
}

ストレージ アカウントのネットワークで保護されたデータにアクセスする

Azure ストレージ アカウントは、ファイアウォールと仮想ネットワークを利用することでさらにセキュリティを強化できます。 ファイアウォールまたは仮想ネットワークによってセキュリティで保護されているストレージ アカウントのコンテンツのインデックスを作成する場合は、信頼されたサービスとして Azure Storage へのインデクサー接続を行う方法に関するページを参照してください。

関連項目