外部モデルプロバイダーをモデルプロバイダーサービスとして登録し、アクセスを許可し、Unity AI Gatewayの機能を設定し、削除します。
Requirements
- モデル プロバイダー サービスを作成するスキーマの
CREATE SERVICE、加えて、そのカタログとスキーマのUSE CATALOGとUSE SCHEMA。 - 登録する外部プロバイダーの資格情報 (OpenAI API キーや AWS アクセス キー ペアなど)。
- OpenAIやMicrosoft Foundry Azure鍵や秘密ではなくサービス認証情報で認証するには、既存のサービス認証情報とそれに
ACCESSが必要です。 サービス認証でAzure OpenAIまたはMicrosoft Foundryを認証する方法を参照してください。
モデルプロバイダーサービスの作成
モデル プロバイダー サービスと モデル サービス は、Unity カタログ スキーマ内で 1 つの名前名前空間を共有します。 スキーマ内のモデル サービスで既に使用されている場合は、モデル プロバイダー サービスの名前を使用できません。その逆も同様です。
モデルプロバイダーサービスは、Unity AI Gateway UIやCatalog Explorer、またはREST API、Azure Databricks SDK、Azure Databricks CLI、Terraformを使ってプログラム的に作成できます。
UI
- 次のいずれかの操作を行います。
- ワークスペースのサイドバーで 「AI Gateway」をクリックし、「 Providers 」タブを開き、「 Provider」をクリックします。
- カタログエクスプローラーで、モデルプロバイダーサービスを作成したいスキーマに移動し、「Create>Service」をクリックし、「Create a service」ダイアログで「Model provider service」を選択します。
- モデル プロバイダー サービスの名前を入力し、作成するカタログとスキーマを選択します。 カタログ エクスプローラーから開始すると、カタログとスキーマがカタログ エクスプローラーによって事前入力されます。
- プロバイダーの種類を選択し、プロバイダーの接続の詳細と資格情報を入力します。
- Create をクリックしてください。 Azure Databricksは、資格情報を暗号化して格納します。 この時点以降、UI には表示されません。
REST API
POSTを/api/2.1/unity-catalog/model-provider-servicesに送信し、parentとmodel_provider_service_idをクエリパラメータとして渡します。
provider_typeと正確に一致するプロバイダーブロックを1つ設定します。targets到達可能な上流モデルを許可リストし、秘密は平文としてインラインで提供されます。
databricks api post \
"/api/2.1/unity-catalog/model-provider-services?parent=schemas/main.default&model_provider_service_id=my_provider" \
--json '{
"comment": "Routes to a custom OpenAI-compatible provider",
"config": {
"provider_type": "EXTERNAL_MODEL_PROVIDER_TYPE_CUSTOM",
"targets": [
{ "model": "gpt-4o", "native_api_types": ["openai/v1/chat/completions"] }
],
"custom": {
"direct": {
"base_url": "https://api.example.com/v1",
"api_key": { "plaintext": "dummy-api-key" }
}
}
}
}'
CLI
親スキーマとリーフ名を渡し、設定に --jsonを添えて提供します。
provider_typeと正確に1つの一致するプロバイダーブロックを設定し、targets到達可能な上流モデルを許可リストし、秘密は平文としてインラインで提供されます。 CLIをインストールするには、「 Databricks CLIのインストールまたは更新」をご覧ください。
databricks ai-gateway create-model-provider-service schemas/main.default my_provider --json '{
"comment": "Routes to a custom OpenAI-compatible provider",
"config": {
"provider_type": "EXTERNAL_MODEL_PROVIDER_TYPE_CUSTOM",
"targets": [
{ "model": "gpt-4o", "native_api_types": ["openai/v1/chat/completions"] }
],
"custom": {
"direct": {
"base_url": "https://api.example.com/v1",
"api_key": { "plaintext": "dummy-api-key" }
}
}
}
}'
Terraform
DatabricksのTerraformプロバイダーとdatabricks_ai_gateway_model_provider_serviceリソースを使ってモデルプロバイダーサービスを作成・管理します。 APIキーを sensitive = true 変数に通すことで、実際のキーをソース管理から遠ざける( -var または TF_VAR_provider_api_key 環境変数で設定してください):
variable "provider_api_key" {
type = string
sensitive = true
}
resource "databricks_ai_gateway_model_provider_service" "example" {
parent = "schemas/main.default"
model_provider_service_id = "my_provider"
comment = "Routes to a custom OpenAI-compatible provider"
config = {
provider_type = "EXTERNAL_MODEL_PROVIDER_TYPE_CUSTOM"
targets = [{
model = "gpt-4o"
native_api_types = ["openai/v1/chat/completions"]
}]
custom = {
direct = {
base_url = "https://api.example.com/v1"
api_key = { plaintext = var.provider_api_key }
}
}
}
}
Python SDK
Databricks SDK for Pythonでモデルプロバイダーサービスを作成・管理:
from databricks.sdk.service import catalog as c
model_provider_service = w.ai_gateway.create_model_provider_service(
parent="schemas/main.default",
model_provider_service_id="my_provider",
model_provider_service=c.ModelProviderService(
comment="Routes to a custom OpenAI-compatible provider",
config=c.ModelProviderServiceConfig(
provider_type=(
c.ModelProviderServiceConfigExternalModelProviderType
.EXTERNAL_MODEL_PROVIDER_TYPE_CUSTOM
),
targets=[
c.ModelProviderServiceConfigModelTargetConfig(
model="gpt-4o",
native_api_types=["openai/v1/chat/completions"],
)
],
custom=c.ModelProviderServiceConfigCustomProviderConfig(
direct=c.ModelProviderServiceConfigCustomProviderDirectConfig(
base_url="https://api.example.com/v1",
api_key=c.ModelProviderServiceConfigProviderSecret(
plaintext="dummy-api-key"
),
)
),
),
),
)
Go SDK (ソフトウェア開発キット)
Databricks SDK for Goでモデルプロバイダーサービスを作成・管理:
modelProviderService, err := w.AiGateway.CreateModelProviderService(ctx,
catalog.CreateModelProviderServiceRequest{
Parent: "schemas/main.default",
ModelProviderServiceId: "my_provider",
ModelProviderService: catalog.ModelProviderService{
Comment: "Routes to a custom OpenAI-compatible provider",
Config: &catalog.ModelProviderServiceConfig{
ProviderType: catalog.ModelProviderServiceConfigExternalModelProviderTypeExternalModelProviderTypeCustom,
Targets: []catalog.ModelProviderServiceConfigModelTargetConfig{{
Model: "gpt-4o",
NativeApiTypes: []string{"openai/v1/chat/completions"},
}},
Custom: &catalog.ModelProviderServiceConfigCustomProviderConfig{
Direct: &catalog.ModelProviderServiceConfigCustomProviderDirectConfig{
BaseUrl: "https://api.example.com/v1",
ApiKey: &catalog.ModelProviderServiceConfigProviderSecret{
Plaintext: "dummy-api-key",
},
},
},
},
},
})
Java SDK
Databricks SDK for Javaでモデルプロバイダーサービスを作成・管理:
ModelProviderServiceConfig config =
new ModelProviderServiceConfig()
.setProviderType(
ModelProviderServiceConfigExternalModelProviderType
.EXTERNAL_MODEL_PROVIDER_TYPE_CUSTOM)
.setTargets(
Collections.singletonList(
new ModelProviderServiceConfigModelTargetConfig()
.setModel("gpt-4o")
.setNativeApiTypes(
Collections.singletonList("openai/v1/chat/completions"))))
.setCustom(
new ModelProviderServiceConfigCustomProviderConfig()
.setDirect(
new ModelProviderServiceConfigCustomProviderDirectConfig()
.setBaseUrl("https://api.example.com/v1")
.setApiKey(
new ModelProviderServiceConfigProviderSecret()
.setPlaintext("dummy-api-key"))));
ModelProviderService modelProviderService =
w.aiGateway()
.createModelProviderService(
new CreateModelProviderServiceRequest()
.setParent("schemas/main.default")
.setModelProviderServiceId("my_provider")
.setModelProviderService(
new ModelProviderService()
.setComment("Routes to a custom OpenAI-compatible provider")
.setConfig(config)));
JS SDK
Databricks AI Gateway SDK for JavaScript でモデルプロバイダーサービスを作成・管理:
import { ModelProviderServiceConfig_ExternalModelProviderType as ProviderType } from '@databricks/sdk-aigateway/v1';
const created = await client.createModelProviderService({
parent: 'schemas/main.default',
modelProviderServiceId: 'my_provider',
modelProviderService: {
comment: 'Routes to a custom OpenAI-compatible provider',
config: {
providerType: ProviderType.EXTERNAL_MODEL_PROVIDER_TYPE_CUSTOM,
targets: [{ model: 'gpt-4o', nativeApiTypes: ['openai/v1/chat/completions'] }],
provider: {
$case: 'custom',
custom: {
providerMode: {
$case: 'direct',
direct: {
baseUrl: 'https://api.example.com/v1',
authMode: {
$case: 'apiKey',
apiKey: {
value: { $case: 'plaintext', plaintext: 'dummy-api-key' },
},
},
},
},
},
},
},
},
});
プロバイダーとその認証方法の完全な一覧については、外部モデルプロバイダーを管理する(モデルプロバイダーサービス)を参照してください。
サービス認証でAzure OpenAIまたはMicrosoft Foundryを認証する
Azure OpenAIやMicrosoft Foundryプロバイダーは、APIキーやMicrosoft Entra IDのサービスプリンシパルクライアント秘密を保存する代わりに、サービス認証情報で認証できます。 サービス認証はUnity Catalogが管理するAzureのアイデンティティを保持するため、長期存在するシークレットがモデルプロバイダーサービスにコピーされることはありません。Azure Databricksはそのアイデンティティから短命トークンを取得して各リクエストを認証します。
モデル プロバイダー サービスを作成するで説明されているように、モデル プロバイダー サービスを作成してください。 プロバイダータイプとしてAzure OpenAIまたはMicrosoft Foundryを選択し、エンドポイントの基本URLを含む接続詳細を入力します。 次に 、認証メソッド を サービス認証に 設定し、APIキーやクライアントシークレットを入力する代わりに認証情報を選択してください。 サービス認証情報は秘密のみを置き換えるため、エンドポイントのベースURLは依然として必要です。
次の要件を確認します。
モデルプロバイダーサービスの 所有者 はサービス認証情報に
ACCESSを持っています。 Azure Databricksはリクエストを送る際に所有者のアクセスを再確認するため、プロバイダーが使用されている間は所有者がアクセス権を保持しなければなりません。 取り消すと、プロバイダーにEXECUTEを持っている発信者も含めて、全員の問い合わせが停止します。 所有者に認証情報へのアクセスを付与するには:GRANT ACCESS ON SERVICE CREDENTIAL <service-credential-name> TO `<model-provider-service-owner>`;認証情報の目的は保存ではなく サービスにあります。
認証情報はリクエストが来るワークスペースで利用可能です。 ワークスペースのバインディングは依然として適用されるため、認証情報が拘束されていないワークスペースからのリクエストはそこで失敗します。モデルプロバイダーサービス自体はメタストアを共有するどのワークスペースからでもアクセス可能です。
サービス認証のAzureアイデンティティは、あなたが問い合わせる予定のAzure OpenAIまたはMicrosoft Foundryのデプロイメントを呼び出す権限を持っています。 サービス資格情報を作成するには、「 サービス資格情報の作成」を参照してください。
プロバイダーに問い合わせる電話は、他のプロバイダーと同じ助成金が必要です。 サービス認証情報の権限は不要で、それが認証情報自体を手の届かない状態にしています。
モデルプロバイダーサービスは内部識別子で認証情報を追跡するため、クエリ失敗なく資格情報を変更できます。
認証情報を削除するとクエリは失敗し、モデルプロバイダーサービスが参照している警告もありません。 この認証情報への参照がないか確認してから削除してください。
既存のモデルプロバイダーサービスをサービス認証情報とAPIキーやクライアントシークレット認証の間で切り替えることはできません。 代わりに新しいモデルプロバイダーサービスを作成しましょう。
カスタムプロバイダーAPIキーをヘッダーで送信します
カスタムプロバイダーはデフォルトでAPIキーをベアラートークンとして送信します。 エンドポイントが特定のヘッダーのキーを期待する場合は、APIキーヘッダー認証を使い、自分でヘッダー名を付けましょう。 Azure Databricksは各アウトバウンドリクエストでキーを<header name>: <header value>として送信します。
モデル プロバイダー サービスを作成するで説明されているように、モデル プロバイダー サービスを作成してください。 プロバイダータイプとして Custom を選択し、 Authメソッド を APIキーヘッダー に設定し、エンドポイントが期待する ヘッダー名 ( X-API-Key や Ocp-Apim-Subscription-Keyなど)と ヘッダーの値を入力します。
この 2 つの方法は相互排他的です。カスタムプロバイダーは、ベアラー トークンまたは名前付きヘッダーのいずれか一方のみを使用し、両方を同時に使用することはありません。 ヘッダー認証は正確に1つのヘッダーを扱います。
ヘッダー名は有効なHTTPヘッダー名でなければなりません。文字、数字、文字 !#$%&'*+-.^_`|~、最大255文字まで。 スペース、コロン、スラッシュ、改行など、他の文字は除外されます。
モデルプロバイダーサービスへのアクセスを付与する
デフォルトでは、モデルプロバイダーのサービスオーナーのみがクエリ可能です。 他のユーザーがモデルプロバイダー サービスにクエリを実行できるようにするには、そのサービスに対する EXECUTE に加えて、そのカタログとスキーマに対する USE CATALOG と USE SCHEMA を付与します。 モデル プロバイダー サービスが推論テーブルにログを記録する場合は、テーブルに SELECT を付与して、ログに記録された要求と応答を読み取るようにします。
UI
- カタログエクスプローラーでモデルプロバイダーサービスを開くか、 AI Gateway にアクセスしてサービスを選択してください。
- [アクセス許可] タブに移動します。
- [許可] をクリックします。
- アクセス権を付与するユーザー、グループ、またはサービス プリンシパルを選択します。
- EXECUTE 特権を選択します。
- [許可] をクリックします。
REST API
databricks api patch \
"/api/2.1/unity-catalog/permissions/model_provider_service/main.default.my_provider" \
--json '{
"changes": [
{ "principal": "data-team", "add": ["EXECUTE"] }
]
}'
CLI
Databricks CLIで EXECUTE を付与してください。 CLIをインストールするには、「 Databricks CLIのインストールまたは更新」をご覧ください。
databricks grants update model_provider_service main.default.my_provider \
--json '{"changes": [{"principal": "data-team", "add": ["EXECUTE"]}]}'
Terraform
databricks_grantとEXECUTEリソースを使用した付与:
resource "databricks_grant" "example" {
model_provider_service = "main.default.my_provider"
principal = "data-team"
privileges = ["EXECUTE"]
}
Python SDK
Databricks SDKによるPythonの助成EXECUTE:
from databricks.sdk.service import catalog as c
w.grants.update(
securable_type="model_provider_service",
full_name="main.default.my_provider",
changes=[c.PermissionsChange(principal="data-team", add=[c.Privilege.EXECUTE])],
)
Go SDK (ソフトウェア開発キット)
Databricks SDK for GoでEXECUTEを付与する:
_, err := w.Grants.Update(ctx, catalog.UpdatePermissions{
SecurableType: "model_provider_service",
FullName: "main.default.my_provider",
Changes: []catalog.PermissionsChange{{
Principal: "data-team",
Add: []catalog.Privilege{catalog.PrivilegeExecute},
}},
})
Java SDK
w.grants().update(
new UpdatePermissions()
.setSecurableType("model_provider_service")
.setFullName("main.default.my_provider")
.setChanges(Arrays.asList(
new PermissionsChange().setPrincipal("data-team").setAdd(Arrays.asList(Privilege.EXECUTE)))));
アクセスの付与および発見の詳細については、「 外部モデルプロバイダーへのアクセスを発見・統治する(モデルプロバイダーサービス)」をご覧ください。
機能の構成
モデル プロバイダー サービスは Unity AI Gateway を介してルーティングされるため、他の Unity AI Gateway トラフィックに使用するのと同じガバナンス機能と監視機能を適用します。
- 推論ログ。 Unity カタログ テーブルへの要求と応答をログに記録します。 推論テーブルへのリクエストとレスポンスのログ記録を参照してください。
- レート制限。 容量とコストを管理するために、1 分あたりのクエリ数を上限とします。 「 モデルおよびMCPサービスへのレート制限適用」を参照してください。
- サービス ポリシー。 サービスポリシーを付与することで、安全でないコンテンツのブロックや機密データの編集など、各やり取りの内容を管理できます。 AI セキュリティ保護可能なリソースのサービス ポリシーとサービス ポリシーの作成とアタッチに関する説明を参照してください。
モデルプロバイダーサービスの更新
所有者であるか、MANAGE を持っている必要があります。 プロバイダータイプは不変です。
UI
Unity AI Gateway UIまたはカタログエクスプローラーからモデルプロバイダーサービスの設定を編集してください。 変更は現地で適用されます。
REST API
databricks api patch \
"/api/2.1/unity-catalog/model-provider-services/main.default.my_provider?update_mask=comment" \
--json '{"comment": "Updated: routes to a custom provider"}'
CLI
databricks ai-gateway update-model-provider-service model-provider-services/main.default.my_provider comment \
--json '{"comment": "Updated: routes to a custom provider"}'
Terraform
databricks_ai_gateway_model_provider_serviceリソースのcomment(または他の可変フィールド)を編集して再適用してください。 変更は現地で適用されます。
Python SDK
from databricks.sdk.service import catalog as c
from google.protobuf.field_mask_pb2 import FieldMask
updated = w.ai_gateway.update_model_provider_service(
name="model-provider-services/main.default.my_provider",
update_mask=FieldMask(paths=["comment"]),
model_provider_service=c.ModelProviderService(
comment="Updated: routes to a custom provider"
),
)
Go SDK (ソフトウェア開発キット)
updated, err := w.AiGateway.UpdateModelProviderService(ctx,
catalog.UpdateModelProviderServiceRequest{
Name: "model-provider-services/main.default.my_provider",
UpdateMask: *fieldmask.New([]string{"comment"}),
ModelProviderService: catalog.ModelProviderService{
Comment: "Updated: routes to a custom provider",
},
})
Java SDK
ModelProviderService updated =
w.aiGateway()
.updateModelProviderService(
new UpdateModelProviderServiceRequest()
.setName("model-provider-services/main.default.my_provider")
.setUpdateMask(FieldMask.newBuilder().addPaths("comment").build())
.setModelProviderService(
new ModelProviderService()
.setComment("Updated: routes to a custom provider")));
JS SDK
import { modelProviderServiceFieldMask } from '@databricks/sdk-aigateway/v1';
const updated = await client.updateModelProviderService({
modelProviderService: {
name: 'model-provider-services/main.default.my_provider',
comment: 'Updated: routes to a custom provider',
},
updateMask: modelProviderServiceFieldMask('comment'),
});
モデル プロバイダー サービスを削除する
所有者であるか、MANAGE を持っている必要があります。
UI
Unity AI Gateway UIまたはカタログエクスプローラーでモデルプロバイダーサービスを開き、kebabメニューから 削除 を選択します。
REST API
databricks api delete "/api/2.1/unity-catalog/model-provider-services/main.default.my_provider"
CLI
databricks ai-gateway delete-model-provider-service model-provider-services/main.default.my_provider
Terraform
terraform destroyを実行するか、リソースブロックを削除して再適用してください。
Python SDK
w.ai_gateway.delete_model_provider_service(
name="model-provider-services/main.default.my_provider"
)
Go SDK (ソフトウェア開発キット)
err := w.AiGateway.DeleteModelProviderService(ctx,
catalog.DeleteModelProviderServiceRequest{
Name: "model-provider-services/main.default.my_provider",
})
Java SDK
w.aiGateway()
.deleteModelProviderService(
new DeleteModelProviderServiceRequest()
.setName("model-provider-services/main.default.my_provider"));
JS SDK
await client.deleteModelProviderService({
name: 'model-provider-services/main.default.my_provider',
});