Azure Key Vault と Azure AI Search が異なる Azure テナントにある場合は、Microsoft Entra マルチテナント アプリを使用して、別のテナントのキーを使用して カスタマー マネージド キー (CMK) 暗号化 を有効にします。
[前提条件]
暗号化するコンテンツを含む検索サービスを含むテナント。 Azure AI Search は 、ロールベースのアクセス用に構成する必要があります。 CMK のサポートには、Basic 価格レベル以上が必要です。
使用したい暗号化キーと Azure Key Vault を保持する別のテナント。 ロールベースのアクセス用に Azure Key Vault を構成する必要があります。
要求を送信するための Azure CLI。
テナント A でマルチテナント Microsoft Entra アプリケーションを作成する
Azure CLI を使用して要求を送信します。 Azure AI Search を含むテナントを テナント A と参照します。
テナント ID を取得します。
az account show --query tenantId --output tsv
テナント A にサインインしていることを確認します。
az login --tenant <tenant-A-id>
アプリケーション登録を作成します。
az ad app create --display-name cross-tenant-auth --sign-in-audience AzureADMultipleOrgs
この手順のアプリ ID 出力を保存します。
マルチテナント アプリケーションにクライアント シークレットを追加する
テナント A のマルチテナント アプリケーションにクライアント シークレットを追加するには、次のコマンドを実行します。
az ad app credential reset --id <multitenant-app-id>
この手順のパスワード出力を保存します。 パスワード出力は、Azure AI Search で CMK を設定 するために必要な入力です。
クライアント シークレットの有効期限を指定するには、このコマンドに終了日パラメーターを指定します。
az ad app credential reset --id <multitenant-app-id> --end-date <end-date>
終了日パラメーターは、ISO 8601 形式の日付を受け取ります。 たとえば、
az ad app credential reset --id <multitenant-app-id> --end-date 2026-12-31
と指定します。
マルチテナント アプリケーションのテナント B にサービス プリンシパルを作成する
Azure Key Vault を含むテナントを テナント B と見なします。テナント B で、テナント A のマルチテナント アプリケーションのサービス プリンシパルを作成します。
テナント B にログインします。
az login --tenant <tenant-B-id>
最初の手順のマルチテナント アプリ ID 出力を使用して、サービス プリンシパルを作成します。
az ad sp create --id <multitenant-app-id>
このサービス プリンシパルは、テナント A のマルチテナント アプリケーションのインスタンスです。テナント B でこのサービス プリンシパルに割り当てられたロールは、テナント A のマルチテナント アプリケーションにも割り当てられます。
次のコマンドで "appOwnerOrganizationId" を確認して、テナント A と B の間のリンクを確認します。
az ad sp show --id <multitenant-app-id>
このコマンドは、サービス プリンシパルの詳細を JSON で表示します。 出力で "appOwnerOrganizationId" フィールドを探して、テナント A の ID と一致することを確認します。
このステップで、サービス プリンシパルのオブジェクト ID (
"id"
フィールドから) を保存します。 オブジェクト ID は、Azure AI Search で CMK を設定するために必要な入力です。Azure Key Vault のリソース ID を取得します。
az keyvault show --name <key-vault-name> --query id --output tsv
テナント B の キー コンテナーの Key Vault Crypto Service Encryption ユーザー ロールを新しいサービス プリンシパルに割り当てます。
az role assignment create --assignee <service-principal-object-id> --role "Key Vault Crypto Service Encryption User" --scope <key-vault-resource-id>
この割り当ての例は次のようになります。
az role assignment create --assignee 12345678-1234-1234-1234-123456789012 --role "Key Vault Crypto Service Encryption User" --scope /subscriptions/87654321-4321-4321-4321-210987654321/resourceGroups/myKeyVaultRG/providers/Microsoft.KeyVault/vaults/myCompanyKeyVault
暗号化のテスト
セットアップを検証するために、検索サービス (テナント A) にテスト インデックスを作成します。 マルチテナント アプリ ID と、"アクセス資格情報" オブジェクトに追加した資格情報を使用して、他のテナントのキー コンテナーに対して認証します。
このサンプル インデックス スキーマは、テストに使用できます。 Azure portal を使用してインデックスを追加し、この JSON を指定するか、 REST クライアント を使用してインデックスの作成要求を送信できます。
{
"name": "cross-tenant-cmk-test",
"fields": [
{
"name": "id",
"type": "Edm.String",
"key": true
}
],
"encryptionKey": {
"keyVaultUri": "https://myCompanyKeyVault.vault.azure.net/",
"keyVaultKeyName": "search-encryption-key",
"keyVaultKeyVersion": "abc123def456ghi789",
"accessCredentials": {
"applicationId": "12345678-1234-1234-1234-123456789012",
"applicationSecret": "secretValueFromStep2"
}
}
}
インデックスが正常に作成されたことを確認します。
GET https://<search-service>.search.windows.net/indexes/cross-tenant-cmk-test?api-version=2025-09-01
キーをローテーションまたは管理する方法の詳細については、「 データ暗号化用にカスタマー マネージド キーを構成する」を参照してください。