Microsoft Foundry での認証と承認は、プリンシパルが ID を証明し、操作を実行するアクセス許可を取得する方法を制御します。 Foundry は、操作をコントロール プレーン (リソース管理) とデータ プレーン (ランタイムの使用) に分割し、それぞれに独自の認証とロールベースのアクセス制御 (RBAC) サーフェスを使用します。
Foundry では、Microsoft Entra IDと API キーの 2 つの認証方法がサポートされています。 Microsoft Entra IDでは、条件付きアクセス、マネージド ID、詳細な RBAC が有効になります。 API キーは迅速なプロトタイプ作成に使用できますが、ユーザーごとの追跡可能性がありません。 この記事では、これらのメソッドを比較し、ID をロールにマップし、一般的な最小特権のシナリオについて説明します。
重要
運用ワークロードにMicrosoft Entra IDを使用して、条件付きアクセス、マネージド ID、および最小限の特権 RBAC を有効にします。 API キーは迅速な評価に便利ですが、粒度の粗いアクセスを提供します。
前提 条件
- Azure サブスクリプション。 お持ちでない場合は、 無料アカウントを作成してください。
- カスタム サブドメインが構成されたMicrosoft Foundry リソース。
- Azure RBAC の概念の理解。
- ロールを割り当てるには、適切なスコープで 所有者 ロールまたは ユーザー アクセス管理者 ロールが必要です。
- (省略可能)プログラムによる認証用にAzure CLIまたはPython 用 Azure SDKをインストールします。
- (省略可能)コード サンプルのPython パッケージ:
pip install azure-identity requests
コントロール プレーンとデータ プレーン
Azure操作は、コントロール プレーンとデータ プレーンの 2 つのカテゴリに分けられます。 Azureは、リソース管理 (コントロール プレーン) と運用ランタイム (データ プレーン) を分離します。 そのため、コントロール プレーンを使用してサブスクリプション内のリソースを管理し、データ プレーンを使用してリソースの種類のインスタンスによって公開される機能を使用します。 コントロール プレーンとデータ プレーンの詳細については、「Azure コントロール プレーンとデータ プレーンを参照してください。 Foundry では、コントロール プレーン操作とデータ プレーン操作は明確に区別されます。 次の表では、2 つの違い、Foundry のスコープ、ユーザーの一般的な操作、ツールと機能の例、それぞれを使用する承認画面について説明します。
| 平面 | Foundry のスコープ | 一般的な操作 | ツールの例 | 承認画面 |
|---|---|---|---|---|
| コントロールプレーン | リソース、プロジェクト、ネットワーク、暗号化、接続の設定と構成 | リソースの作成または削除、ロールの割り当て、キーのローテーション、Private Linkの設定 | Azure ポータル、Azure CLI、ARM テンプレート、Bicep、Terraform | AZURE RBAC アクション |
| データ プレーン | モデル推論、エージェントの対話、評価ジョブ、およびコンテンツの安全性呼び出しの実行と使用 | チャットの完了、埋め込み生成、ジョブの微調整の開始、エージェント メッセージの送信、アナライザーと分類子の操作 | SDK、REST API、Foundry ポータルのプレイグラウンド | AZURE RBAC dataActions |
Bicep、Terraform、SDK のすべてのサンプルについては、Foundry の GitHub の
次の一覧と図は、コントロール プレーンアクションとデータプレーンアクションの分離を詳細に示しています。 Foundry 内のコントロール プレーン アクションは次のとおりです。
- Foundry リソースの作成
- Foundry プロジェクトの作成
- アカウントキャパビリティホストの作成
- Project機能ホストの作成
- モデルの展開
- アカウントとプロジェクトの接続の作成
Foundry 内のデータ プレーン アクションは次のとおりです。
- エージェントの構築
- 評価の実行
- トレースと監視
- 微調整
次の図は、Foundry でのコントロール プレーンとデータ プレーンの分離のビューと、ロールベースのアクセス制御 (RBAC) の割り当て、およびユーザーがコントロール プレーンまたはデータ プレーンまたはその両方で持つ可能性のあるアクセスを示しています。 図に示すように、RBAC "アクション" はコントロール プレーンに関連付けられますが、RBAC "dataActions" はデータ プレーンに関連付けられています。
認証方法
Foundry では、Microsoft Entra ID (トークンベース、キーレス) と API キーがサポートされます。
Microsoft Entra ID
Microsoft Entra IDは、https://ai.azure.com/.default をスコープにした OAuth 2.0 ベアラー トークンを使用します。
Microsoft Entra IDを以下の場合で使用します。
- 運用ワークロード。
- 条件付きアクセス、多要素認証 (MFA)、Just-In-Time アクセス。
- 最小限の特権 RBAC とマネージド ID の統合。
利点: きめ細かなロールの割り当て、プリンシパルごとの監査、制御可能なトークンの寿命、自動シークレット管理、サービスのマネージド ID。
制限事項: 初期セットアップの複雑さが高くなります。 ロールベースのアクセス制御 (RBAC) を理解する必要があります。 Foundry の RBAC の詳細については、Microsoft Foundry の
API キー
API キーは、Foundry リソースをスコープとした静的シークレットです。
次の場合に API キーを使用します。
- ラピッドプロトタイピング。
- 単一シークレットローテーションが許容される分離されたテスト環境。
利点: シンプルで言語に依存せず、トークンの取得を必要としません。
制限事項: ユーザー ID を表現できない、きめ細かくスコープを設定することが困難、監査が困難です。 一般に、エンタープライズ運用ワークロードでは受け入れられないので、Microsoftでは推奨されません。
キーレス認証の有効化の詳細については、「
Microsoft Entra IDで認証する (Python)
次の例は、azure-identity ライブラリを使用してMicrosoft Entra IDで認証し、Foundry エンドポイントに要求を行う方法を示しています。
from azure.identity import DefaultAzureCredential
import requests
# Create a credential object using DefaultAzureCredential
# This automatically uses environment variables, managed identity, or Azure CLI credentials
credential = DefaultAzureCredential()
# Get an access token for the Cognitive Services scope
token = credential.get_token("https://ai.azure.com/.default")
# Use the token in your API request
headers = {
"Authorization": f"Bearer {token.token}",
"Content-Type": "application/json"
}
# Replace with your Foundry endpoint
endpoint = "https://<your-resource-name>.cognitiveservices.azure.com"
# Example: List deployments (adjust the path for your specific API)
response = requests.get(f"{endpoint}/openai/deployments?api-version=2024-10-21", headers=headers)
print(response.json())
予期される出力: モデルのデプロイを一覧表示する JSON 応答、または資格情報が不足しているか、ロールの割り当てが構成されていない場合の認証エラー。
リファレンス: DefaultAzureCredential | azure-identity ライブラリ
API キーを使用した認証 (Python)
次の例は、API キーを使用して認証する方法を示しています。 このアプローチは、迅速なプロトタイプ作成にのみ使用します。運用環境にはMicrosoft Entra IDをお勧めします。
import requests
# Replace with your actual API key and endpoint
api_key = "<your-api-key>"
endpoint = "https://<your-resource-name>.cognitiveservices.azure.com"
headers = {
"api-key": api_key,
"Content-Type": "application/json"
}
# Example: List deployments
response = requests.get(f"{endpoint}/openai/deployments?api-version=2024-10-21", headers=headers)
print(response.json())
警告
API キーはリソースへのフル アクセスを提供し、特定のユーザーやアクションにスコープを設定することはできません。 キーを定期的に回転させ、ソースコード管理にコミットしないようにします。
予想される出力: モデルのデプロイを一覧表示する JSON 応答、または API キーが無効な場合は 401 エラー。
リファレンス: API アクセス キーのローテーション
機能サポート マトリックス
Foundry でサポートされている API キーと Microsoft Entra IDの機能を理解するには、次のマトリックスを参照してください。
| 能力または機能 | API キー | Microsoft Entra ID | ノート |
|---|---|---|---|
| 基本的なモデル推論 (チャット、埋め込み) | はい | はい | 完全にサポートされています。 |
| 微調整操作 | はい | はい | Entra IDは、プリンシパルごとの監査を追加します。 |
| エージェントサービス | いいえ | はい | マネージド ID ツールへのアクセスにはEntra IDを使用します。 |
| 評価 | いいえ | はい | Entra IDを使用します。 |
| コンテンツの安全性分析の呼び出し | はい | はい | RBAC を使用して、リスクの高い操作を制限します。 |
| バッチ分析ジョブ (コンテンツ理解) | はい | はい | 大規模スケールでの使用に適しているため、Entra ID が推奨されます。 |
| ポータルのプレイグラウンドの使用状況 | はい | はい | Playground では、プロジェクト接続モードが使用されます。 |
| Private Linkによるネットワーク分離 | はい | はい | Entra IDは条件付きアクセスを追加します。 |
| 最小特権の原則: 組み込みロールとカスタム ロール | いいえ | はい | キーはリソースごとに完全に適用されるか、まったく適用されません。 |
| マネージド ID (システムまたはユーザー割り当て) | いいえ | はい | シークレットレス認証を有効にします。 |
| 要求ごとのユーザー割り当て | いいえ | はい | トークンには、テナント ID とオブジェクト ID が含まれています。 |
| 失効 (即時) | キーの回転 | ロールの削除またはプリンシパルの無効化 | 短いトークンの有効期間が適用されます。 |
| 自動化パイプラインでのサポート | はい (シークレット) | はい (サービス プリンシパルまたはマネージド ID) | Entra IDはシークレットローテーションを減らします。 |
| アシスタントAPI | はい | はい | Entra IDを使用することをお勧めします。 |
| バッチ推論 | はい | はい | |
| ツールボックス | いいえ | はい | マネージド ID ツールへのアクセスにはEntra IDを使用します。 |
ID の種類
Azureリソースとアプリケーションは、それぞれ特定のシナリオ向けに設計された、異なる ID の種類を使用して認証されます。 ユーザー プリンシパルは人間のユーザーを表し、サービス プリンシパルはアプリケーションまたは自動化されたプロセスを表し、マネージド ID はAzureリソースが他のサービスにアクセスするための安全で資格情報のない方法を提供します。 これらの違いを理解することは、対話型サインイン、アプリ間通信、またはワークロードの自動化に適した ID を選択するのに役立ちます。
Azureでは、次の ID の種類がサポートされています。
| ID の種類 | 説明 |
|---|---|
| ユーザー プリンシパル | Microsoft Entra IDの個々のユーザー |
| サービス プリンシパル (アプリの登録) | クライアント シークレットまたは証明書を使用するアプリケーション ID |
| マネージド ID (システム割り当て) | Azureプラットフォームによって自動的に管理されるリソース バインド ID。 |
| マネージド ID (ユーザー割り当て) | 複数のリソースにアタッチするスタンドアロン ID。 |
組み込みロールの概要
Foundry で、組み込みロールを使用して、ユーザーに対して許可されるアクションを分離します。 ほとんどの企業では、組み込みロールの制御アクションとデータ プレーン アクションの分離が必要です。 他のユーザーは、必要なロールの割り当ての数を最小限に抑えるために、データとコントロール プレーンの役割を組み合わせることを期待しています。 次の表に、各シナリオに最適なシナリオと、対応する組み込みの Foundry ロールを示します。
| シナリオ | 一般的な組み込みロール | ノート |
|---|---|---|
| 事前にデプロイされたモデルを使用してエージェントを構築する | Azure AI ユーザー | データ プレーンの使用のみ。管理書き込みはありません。 |
| デプロイの管理またはモデルの微調整 | Azure AI プロジェクトマネージャー | モデル デプロイの作成と更新が含まれます。 |
| キーのローテーションまたはリソースの管理 | Azure AI アカウント所有者 | 高い特権。最小限の特権を持つカスタム ロールを検討してください。 |
| リソースの管理、デプロイの管理、エージェントの構築 | Azure AI 所有者 | コントロール プレーンとデータ プレーンアクセスの両方を必要とするユーザー向けの高い特権を持つセルフサービス ロール。 可観測性が必要な場合は、Azure Monitor Reader と組み合わせます。 |
| 可観測性、トレース、監視 | Azure AI ユーザー (最小) | Application InsightsにAzure Monitor閲覧者を追加します。 |
組み込みロールの内訳と、コントロールとデータ プレーンのアクションを理解するには、次の図を確認します。
ヒント
組み込みロールがユース ケースに対して余分なアクセス許可を付与する場合は、カスタム ロールを作成します。
Microsoft Entra IDを設定する
Foundry でEntra ID認証を設定する方法の概要については、「キーレス認証の構成を参照してください。
Microsoft Foundry リソースにカスタム サブドメインが構成されていることを確認します。 「カスタム サブドメイン」を参照してください。 トークン ベースの認証にはカスタム サブドメインが必要です。
必要な組み込みロールまたはカスタム ロールを各プリンシパルに割り当てます。 ロールを割り当てるには、ターゲット スコープで 所有者 または ユーザー アクセス管理者 ロールが必要です。 一般的なロールの割り当て:
- Azure AI ユーザー: 事前にデプロイされたモデルを使用してビルドしてテストする必要がある開発者向け。
- Azure AI Project Manager: プロジェクトを作成してデプロイを管理する必要があるチーム リーダー向け。
- Azure AI アカウント所有者: 完全なリソース管理を必要とし、データ プレーンアクセスにAzure AI ユーザーを条件付きで割り当てることができる管理者向け。
- Azure AI 所有者: 完全なリソース管理とデータ プレーン アクセスの両方を必要とするユーザー向け。 Azure AI ユーザー ロールを割り当てる CLI コマンドの例:
az role assignment create \ --assignee <principal-id> \ --role "Azure AI User" \ --scope /subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.CognitiveServices/accounts/<resource-name>ロールの割り当てを確認するには、
az role assignment list --assignee <principal-id> --scope <resource-scope>を実行し、ロールが出力に表示されていることを確認します。(省略可能)サービス プリンシパルの場合は、アプリの登録を作成し、クライアント シークレットまたは証明書を追加し、テナント ID、クライアント ID、シークレットまたは証明書をメモします。
(省略可能)マネージド ID の場合は、呼び出し元サービスでシステム割り当て ID を有効にするか、ユーザー割り当て ID をアタッチしてから、Foundry リソースでロールを割り当てます。
すべての呼び出し元がトークン認証を使用した後、キーベースの認証を削除します。 必要に応じて、デプロイ テンプレートでローカル認証を無効にします。
一般的な認証エラーのトラブルシューティング
| エラー | 原因 | 解像 度 |
|---|---|---|
| 401 未認証 | トークンが見つからないか期限切れです。無効な API キー | トークン取得スコープが https://ai.azure.com/.defaultされていることを確認します。 キーベースの認証を使用する場合は、API キーを再生成します。 |
| 403 禁止 | RBAC ロールの割り当てが見つからない | リソースまたはプロジェクトのスコープで適切な組み込みロール (たとえば、Azure AI ユーザー) を割り当てます。 |
| AADSTS700016 | テナントにアプリケーションが見つかりません | アプリの登録が正しいテナントに存在し、クライアント ID が正しいことを確認します。 |
| カスタム サブドメインが必要 | リソースでは、カスタム サブドメインの代わりにリージョン エンドポイントが使用されます | Foundry リソースで カスタム サブドメイン を構成します。 トークンベースの認証には、カスタム サブドメインが必要です。 |