Microsoft Foundry での認証と承認

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 の操作は、コントロール プレーンとデータ プレーンという 2 つのカテゴリに分かれています。 Azure は、リソース管理 (コントロール プレーン) と運用ランタイム (データ プレーン) を分離します。 そのため、コントロール プレーンを使用してサブスクリプション内のリソースを管理し、データ プレーンを使用してリソースの種類のインスタンスによって公開される機能を使用します。 コントロール プレーンとデータ プレーンの詳細については、 Azure コントロール プレーンとデータ プレーンに関するページを参照してください。 Foundry では、コントロール プレーン操作とデータ プレーン操作は明確に区別されます。 次の表では、2 つの違い、Foundry のスコープ、ユーザーの一般的な操作、ツールと機能の例、それぞれを使用する承認画面について説明します。

平面 Foundry のスコープ 一般的な操作 ツールの例 認証対象範囲
コントロールプレーン リソース、プロジェクト、ネットワーク、暗号化、接続の設定と構成 リソースの作成または削除、ロールの割り当て、キーのローテーション、Private Link の設定 Azure portal, Azure CLI, ARM テンプレート, Bicep, Terraform Azure RBAC アクション
データ プレーン モデル推論、エージェントの対話、評価ジョブ、およびコンテンツの安全性呼び出しの実行と使用 チャットの完了、埋め込み生成、ジョブの微調整の開始、エージェント メッセージの送信、アナライザーと分類子の操作 SDK、REST API、Foundry ポータルのプレイグラウンド Azure RBAC データアクションズ

Bicep、Terraform、SDK のすべてのサンプルについては、 GitHub for Foundry の foundry-samples リポジトリを 参照してください。

次の一覧と図は、コントロール プレーンアクションとデータプレーンアクションの分離を詳細に示しています。 Foundry 内のコントロール プレーン アクションは次のとおりです。

  • Foundry リソースの作成
  • Foundry プロジェクトの作成
  • アカウントキャパビリティホストの作成
  • プロジェクト機能ホストの作成
  • モデルの展開
  • アカウントとプロジェクトの接続の作成

Foundry 内のデータ プレーン アクションは次のとおりです。

  • エージェントの構築
  • 評価の実行
  • トレースと監視
  • 微調整

次の図は、Foundry でのコントロール プレーンとデータ プレーンの分離のビューと、ロールベースのアクセス制御 (RBAC) の割り当て、およびユーザーがコントロール プレーンまたはデータ プレーンまたはその両方で持つ可能性のあるアクセスを示しています。 図に示すように、RBAC "アクション" はコントロール プレーンに関連付けられますが、RBAC "dataActions" はデータ プレーンに関連付けられています。

コントロール プレーン操作とデータ プレーン操作と関連する RBAC サーフェスの分離を示す図。

認証方法

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 を使用してキーレス認証を構成する」を参照してください。

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 ロールを示します。

シナリオ 一般的な組み込みロール ノート
事前にデプロイされたモデルを使用してエージェントを構築する Foundry ユーザー データ プレーンの使用のみ。管理書き込みはありません。
デプロイの管理またはモデルの微調整 Foundry Project Manager モデル デプロイの作成と更新が含まれます。
キーのローテーションまたはリソースの管理 Foundry アカウント所有者 高い特権。最小限の特権を持つカスタム ロールを検討してください。
リソースの管理、デプロイの管理、エージェントの構築 Foundry 所有者 コントロール プレーンとデータ プレーンアクセスの両方を必要とするユーザー向けの高い特権を持つセルフサービス ロール。 可観測性が必要な場合は、Azure Monitor Reader と組み合わせます。
可観測性、トレース、監視 Foundry ユーザー(最低限) Application Insights に Azure Monitor 閲覧者を追加します。

重要

Foundry RBAC ロールの名前が最近変更されました。 Foundry User, Foundry Owner, Foundry Account Owner、および Foundry Project Manager は、以前は、AZURE AI ユーザー、Azure AI 所有者、Azure AI アカウント所有者、および AZURE AI Project Manager という名前でした。 名前の変更がロールアウトされている間、以前の名前が表示される場合があります。ロール ID とコア アクセス許可は、名前の変更によって変更されません。

組み込みロールの内訳と、コントロールとデータ プレーンのアクションを理解するには、次の図を確認します。

組み込みロールを Foundry のコントロール プレーン アクションとデータ プレーン アクションにマッピングする図。

ヒント

組み込みロールがユース ケースに対して余分なアクセス許可を付与する場合は、カスタム ロールを作成します。

Microsoft Entra ID を設定する

Foundry で Entra ID 認証を設定する方法の概要については、「 キーレス認証の構成」を参照してください。

  1. Microsoft Foundry リソースにカスタム サブドメインが構成されていることを確認します。 「カスタム サブドメイン」を参照してください。 トークン ベースの認証にはカスタム サブドメインが必要です。

  2. 必要な組み込みロールまたはカスタム ロールを各プリンシパルに割り当てます。 ロールを割り当てるには、ターゲット スコープで 所有者 または ユーザー アクセス管理者 ロールが必要です。 一般的なロールの割り当て:

    • Foundry ユーザー: 事前にデプロイされたモデルを使用してビルドおよびテストする必要がある開発者向け。
    • Foundry Project Manager: プロジェクトを作成してデプロイを管理する必要があるチーム リーダー向け。
    • Foundry アカウント所有者: 完全なリソース管理を必要とし、データ プレーン アクセスに Foundry ユーザーを条件付きで割り当てることができる管理者向け。
    • Foundry Owner: すべてのリソースの管理とデータ プレーンへのアクセスの両方を必要とするユーザー向け。 Foundry ユーザー ロールを割り当てる CLI コマンドの例:
    az role assignment create \
      --assignee <principal-id> \
      --role "53ca6127-db72-4b80-b1b0-d745d6d5456d" \
      --scope /subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.CognitiveServices/accounts/<resource-name>
    

Note

Foundry RBAC ロールの名前が最近変更されたため、名前変更ロールアウト中の問題を回避するには、コード内のロール名の代わりにロール定義 ID (GUID) を使用します。

  • Foundry ユーザー: 53ca6127-db72-4b80-b1b0-d745d6d5456d
  • ファウンドリ所有者: c883944f-8b7b-4483-af10-35834be79c4a
  • Foundry アカウント所有者: e47c6f54-e4a2-4754-9501-8e0985b135e1
  • Foundry Project Manager: eadc314b-1a2d-4efa-be10-5d325db5065e

ロールの割り当てを確認するには、 az role assignment list --assignee <principal-id> --scope <resource-scope> を実行し、ロールが出力に表示されていることを確認します。

  1. (省略可能)サービス プリンシパルの場合は、アプリの登録を作成し、クライアント シークレットまたは証明書を追加し、テナント ID、クライアント ID、シークレットまたは証明書をメモします。
  2. (省略可能)マネージド ID の場合は、呼び出し元サービスでシステム割り当て ID を有効にするか、ユーザー割り当て ID をアタッチしてから、Foundry リソースでロールを割り当てます。
  3. すべての呼び出し元がトークン認証を使用した後、キーベースの認証を削除します。 必要に応じて、デプロイ テンプレートでローカル認証を無効にします。

リファレンス: Foundry の Azure ロール | 割り当てる

一般的な認証エラーのトラブルシューティング

エラー 原因 解決方法
401 未認証 トークンが見つからないか期限切れです。無効な API キー トークン取得スコープが https://ai.azure.com/.defaultされていることを確認します。 キーベースの認証を使用する場合は、API キーを再生成します。
403 禁止 RBAC ロールの割り当てが見つからない リソースまたはプロジェクトスコープで適切な組み込みロール (Foundry User など) を割り当てます。
AADSTS700016 テナントにアプリケーションが見つかりません アプリの登録が正しいテナントに存在し、クライアント ID が正しいことを確認します。
カスタム サブドメインが必要 リソースでは、カスタム サブドメインの代わりにリージョン エンドポイントが使用されます Foundry リソースで カスタム サブドメイン を構成します。 トークンベースの認証には、カスタム サブドメインが必要です。