はじめに
OCI Enterprise AI(Generative AI)で、IAMポリシーを使って推論可能なモデルを制限できるようになりました。
ちなみに、OCI の生成AI の API サービスは、これまで、OCI Generative AI 、日本語だと「生成AI」という名前でしたが、これからは、OCI Enterprise AI という名前になるようです。ホームページのサービスの紹介などは既に変わっているところもありますが、コンソールやドキュメントはまだ Generative AI(生成AI)のままになっています。
本題に戻ると、これまでもOCI Enterprise AI(Generative AI)サービス全体やChat API を使えるか、使えないかの権限は設定できましたが、モデルごとに設定することはできませんでした。
今回追加された target.model.id 条件を使うことで、次のような制御ができます。
- 特定のモデルだけ推論を許可する
- 複数のモデルを明示的に許可する
- モデルIDのパターンを指定して許可する
- 指定したモデルを除外する
どんなときに便利かというと、例えば、推論は日本国内に閉じたいという要件があったとします。OCIの大阪リージョンで提供されているモデルを調べてみるとエンドポイントは大阪だけれども推論は海外で行われるというモデルも存在しています。こうしたモデルをユーザーが間違って使ってしまわないように特定のモデルだけを使えるようにすることができます。
今回は、Japan Central(Osaka)リージョンのコンソールを使って、openai.gpt-oss-120b だけ推論できるユーザーを作成して動作を確認してみました。
この機能については、次の公式ドキュメントも参照してください。
今回確認する内容
次の状態を作ります。
| 項目 | 設定値 |
|---|---|
| リージョン | Japan Central(Osaka)ap-osaka-1
|
| コンパートメント | GenAI-ModelAccess-Lab |
| グループ | GenAIModelRestrictedUsers |
| テストユーザー | genai-model-limit-tester |
| 推論を許可するモデル | openai.gpt-oss-120b |
| 推論を許可しないモデル | 上記以外のすべてのモデル |
確認するポイントは次の3つです。
- テストユーザーがコンソールでコンパートメントとモデルを選択できること
-
openai.gpt-oss-120bでは推論できること - それ以外のモデルでは推論できないこと
なお、今回設定したポリシーはリージョン条件を付けていません。操作は大阪リージョンで行いますが、IAMポリシー自体は対象モデルが提供されるすべてのリージョンに適用されます。
この機能のポイント
推論を許可するポリシーには、次の条件を指定します。
where target.model.id = 'openai.gpt-oss-120b'
target.model.id 条件の対象となる推論リソースは次の3つです。
generative-ai-chatgenerative-ai-text-embeddinggenerative-ai-text-rerank
今回は generative-ai-family に条件を付けますが、この条件で制限されるのはモデル推論です。generative-ai-family に含まれる他の管理操作までモデルID単位で制限するものではありません。
また、OCI IAMの許可は累積されます。別のグループを通じて無条件の use generative-ai-family や use generative-ai-chat が付与されていると、今回のモデル制限は実質的に効かなくなります。検証には、他の権限を持たない専用ユーザーを使うのが確実です。
コンパートメントを作成する
OCI Consoleで Identity & Security → Compartments を開き、検証用コンパートメントを作成します。
| 項目 | 設定値 |
|---|---|
| Name | GenAI-ModelAccess-Lab |
| Description | Temporary compartment for target.model.id allowlist validation |
| Parent Compartment | ルートまたは検証用の親コンパートメント |
作成後、状態が Active になっていることを確認します。
グループを作成する
Identity & Security → Domains → Default → User Management を開き、次のグループを作成します。
| 項目 | 設定値 |
|---|---|
| Name | GenAIModelRestrictedUsers |
| Description | Temporary group for target.model.id allowlist validation |
既存のユーザーは追加せず、今回作成するテストユーザーだけを所属させます。
テストユーザーを作成する
同じIdentity Domainで Users を開き、テストユーザーを作成します。
| 項目 | 設定値 |
|---|---|
| Username | genai-model-limit-tester |
| テスト担当者が受信できるメールアドレス |
作成したユーザーを GenAIModelRestrictedUsers グループに追加します。
このユーザーが Administrators や、Generative AIの広い権限を持つ別のグループに所属していないことも確認しておきます。
コンソールへサインインできるように、アクティベーションメールまたはパスワード再設定メールからパスワードを設定します。
IAMポリシーを作成する
Identity & Security → Policies を開き、ルート・コンパートメントにポリシーを作成します。
| 項目 | 設定値 |
|---|---|
| Name | GenAIModelAllowlistTest |
| Description | Temporary policy for validating target.model.id model allowlist |
Manual Editorで次の4文を設定します。
Allow group GenAIModelRestrictedUsers to inspect compartments in tenancy
Allow group GenAIModelRestrictedUsers to inspect generative-ai-model in tenancy
Allow group GenAIModelRestrictedUsers to inspect generative-ai-endpoint in tenancy
Allow group GenAIModelRestrictedUsers to use generative-ai-family in compartment GenAI-ModelAccess-Lab
where target.model.id = 'openai.gpt-oss-120b'
それぞれの役割は次のとおりです。
| ポリシー | 用途 |
|---|---|
inspect compartments |
コンソールでコンパートメントを一覧、選択する |
inspect generative-ai-model |
ListModels を実行してモデルを一覧表示する |
inspect generative-ai-endpoint |
ListEndpoints を実行してエンドポイントを一覧表示する |
条件付き use generative-ai-family
|
指定したModel IDだけ推論を許可する |
ListModels と ListEndpoints には target.model.id が含まれません。そのため、条件付きの use generative-ai-family だけでは一覧取得の条件が成立しません。
公式ドキュメントには、コンソールでモデルを一覧、選択するための最小権限として inspect generative-ai-model が記載されています。一方、今回の検証では inspect generative-ai-endpoint がない状態だとChat Playgroundのモデル一覧の読み込みがエラーになりました。この権限を追加すると正常に表示されました。
コンソールのモデル選択欄は、オンデマンドモデルだけでなくモデル・エンドポイントも扱います。今回の環境では、その一覧を構成する際に ListEndpoints の権限も必要になったと考えられます。
inspect generative-ai-endpoint が許可する操作については、API-Level Permissions for Endpointsで確認できます。
非Default Domainにグループを作成した場合は、4文すべてのグループ名を次の形式に変更します。
<identity-domain-name>/GenAIModelRestrictedUsers
テストユーザーでコンソールへサインインする
管理者のセッションと混ざらないように、別のブラウザ・プロファイルまたはシークレット・ウィンドウを使います。
- テストユーザーでOCI コンソールへサインインします
- 右上のリージョンを Japan Central(Osaka) に切り替えます
- Analytics & AI → AI Services → Generative AI を開きます
- Playground → Chat を開きます
- コンパートメントに
GenAI-ModelAccess-Labを選択します
モデル一覧には openai.gpt-oss-120b 以外のモデルも表示されます。inspect は一覧表示の権限なので、表示されること自体は正常です。実際に推論できるかどうかは、送信時に条件付き use ポリシーで判定されます。
許可したモデルを確認する
モデルに openai.gpt-oss-120b を選択し、簡単なプロンプトを送信します。
次の文字列だけを返してください MODEL_ACCESS_TEST_OK
モデルから応答が返れば成功です。応答が指定文字列と完全に一致しなくても、認可エラーにならず応答が返れば、アクセス制御の確認としては成功と判断できます。
今回の検証では、openai.gpt-oss-120b の推論に成功しました。
許可していないモデルを確認する
次に、モデル一覧から openai.gpt-oss-120b 以外のモデルを選択し、同じプロンプトを送信します。
今回は推論リクエストが拒否され、chat 404のコールに失敗しました: Authorization failed or requested resource not found.というエラーが表示されました。
一覧に表示されていることと、推論できることは別の権限であると確認できました。
検証結果
結果は次のとおりです。
| 確認項目 | 結果 |
|---|---|
| コンパートメントを選択できる | 成功 |
| モデル一覧を表示できる | 成功 |
openai.gpt-oss-120b で推論できる |
成功 |
| その他のモデルで推論できない | 成功 |
target.model.id を使うことで、モデル一覧をユーザーに見せたまま、実際に利用できるモデルだけを制限できました。
リージョンも限定したい場合
今回の検証ではリージョンを限定していませんが、Generative AIの一覧取得と推論は request.region 条件で大阪リージョンに限定できます。
大阪リージョンのRegion Identifierは ap-osaka-1、IAMポリシーで使用する3文字のRegion Keyは KIX です。
Allow group GenAIModelRestrictedUsers to inspect compartments in tenancy
Allow group GenAIModelRestrictedUsers to inspect generative-ai-model in tenancy
where request.region = 'KIX'
Allow group GenAIModelRestrictedUsers to inspect generative-ai-endpoint in tenancy
where request.region = 'KIX'
Allow group GenAIModelRestrictedUsers to use generative-ai-family in compartment GenAI-ModelAccess-Lab
where all {
request.region = 'KIX',
target.model.id = 'openai.gpt-oss-120b'
}
コンパートメントはリージョナル・リソースではないため、inspect compartments は無条件のままにしています。
既存の無条件ポリシーを残したまま、リージョン条件付きポリシーを追加しても制限にはなりません。OCI IAMの許可は累積されるため、リージョンを限定するときは既存の文を条件付きの文へ置き換えます。
うまくいかない場合に確認すること
コンパートメントが表示されない場合は、次の点を確認します。
-
inspect compartments in tenancyが設定されているか - ユーザーが正しいグループに所属しているか
- 非Default Domainの場合、ポリシーにIdentity Domain名を指定しているか
モデル一覧を取得できない場合は、次の点を確認します。
-
inspect generative-ai-modelが設定されているか -
inspect generative-ai-endpointが設定されているか - IAM変更後に数分待ち、サインアウトしてから再度サインインしたか
- コンソールで正しいリージョンを選択しているか
許可していないモデルで推論できてしまう場合は、他のグループを含めて、無条件の use または manage が付与されていないか確認します。
対象となるリソースは次のとおりです。
generative-ai-familygenerative-ai-chatgenerative-ai-text-embeddinggenerative-ai-text-rerank
おわりに
target.model.id 条件によって、OCI Enterprise AI(Generative AI)で利用できるモデルをIAMポリシーから制御できることを確認しました。
モデルの選択肢が増えると、利用料金、データの取り扱い、社内で承認したモデルなどを考慮した制御が必要になります。アプリケーション側でモデル名を隠すだけではなく、IAMで推論そのものを制限できるのは使いやすいですね。
実際にコンソールで試す際は、モデルの inspect に加えてエンドポイントの inspect が必要になる場合がある点と、別のポリシーから広い権限が付与されていないかを確認しておくとスムーズです。