For the complete documentation index, see llms.txt. Markdown versions of all docs pages are available by appending .md to any docs URL.
アクセス制御について
AccessPolicy がレジストリ操作、チャット呼び出し、実行時のエージェント間呼び出しなど、すべてのレイヤーでアクセスを制御する方法について説明します。
Solo Enterprise for agentregistry は、レジストリおよびその AI アーティファクトへのアクセスを保護し、レジストリユーザーとデプロイされたエージェントが実行できる操作を制御するために、多層アプローチを採用しています。
アクセス制御レイヤー
アクセスは 3 つのレイヤーで実施され、それぞれが前のレイヤーの上に構築されます。
レイヤー 1: 認証
Solo Enterprise for agentregistry は、Keycloak、Okta、Auth0 などの外部 OIDC 準拠 ID プロバイダー(IdP)に依存して、レジストリでユーザーを認証します。レジストリへのすべてのリクエストは、IdP によって発行および署名された有効な JWT を保持している必要があります。レジストリはすべてのリクエストで IdP の JWKS 公開鍵に対してトークンを検証します。トークンが欠落しているか無効な場合、ポリシーが評価される前に 401 Unauthorized で拒否されます。
OIDC 設定では、システムの異なる部分にそれぞれ機能する 4 つの個別クライアントを使用します。
| クライアント | タイプ | 目的 |
|---|---|---|
ar-backend | コンフィデンシャル | レジストリサーバーがアクセストークンを検証するために使用します。ar-cli-interactive、ar-cli-password、または ar-ui に発行されたすべてのトークンは aud クレームに ar-backend を含む必要があります。そうでない場合、リクエストは拒否されます。 |
ar-cli-interactive | パブリック | インタラクティブなログイン用の arctl CLI で使用されます。デバイス認可付与フロー(RFC 8628)を介してユーザーを認証します。ユーザーはブラウザーで URL を開くよう求められます。 |
ar-cli-password | パブリック | CI/CD パイプラインでのスクリプトによるユーザー認証に使用される arctl CLI で使用されます。ユーザー名とパスワードを使用したパスワード資格情報付与で認証します。 |
ar-ui | パブリック | ブラウザーベースのレジストリ UI で使用されます。PKCE を使用した認可コードフローでユーザーを認証します。 |
OIDC セットアップの例については、OIDC プロバイダーをセットアップするを参照してください。
レイヤー 2: ユーザー認可
トークンが正常に検証された後、レジストリは JWT からロールクレームを抽出してユーザーの権限を決定します。ロールに使用するクレームは、次のいずれかの Helm 値または環境変数で設定できます。
| Helm 値 | 環境変数 | デフォルト | 説明 |
|---|---|---|---|
oidc.roleClaim | RBAC_ROLE_CLAIM | Groups | ロール情報を抽出する JWT クレームへのドットパスです。たとえば、ルートレベルのクレームには roles を、ネストされたクレームには realm.roles などの形式を使用できます。未設定の場合、ロールは Groups ルートレベルクレームから抽出されます。oidc.roleMapper が設定されている場合、この設定は無視されます。 |
oidc.roleMapper | RBAC_ROLE_MAPPER_CEL_EXPR | – | JWT クレームマップからロールを抽出する CEL 式です。ドットパスアプローチでロール情報を抽出できない高度なシナリオで使用します。 |
クレームからロール情報が抽出された後、Solo Enterprise for agentregistry はレジストリにログインしようとするユーザーのタイプを検証します。Solo Enterprise for agentregistry は次のユーザータイプを区別します。
| ユーザータイプ | Helm 値 | 環境変数 | 説明 |
|---|---|---|---|
| スーパーユーザー | oidc.superuserRole(デフォルト: admin) | RBAC_ROLE_CLAIM | ロールがこの値に一致するユーザーはすべてのポリシーチェックをバイパスし、レジストリへのフルアクセスを持ちます。AccessPolicy は不要です。デフォルトでは、スーパーユーザーロールは admin に設定されているため、JWT から抽出されたロール情報が admin と一致する場合、そのユーザーはスーパーユーザーとみなされ、レジストリへのフルアクセスが付与されます。 |
| その他のユーザー | N/A | N/A | デフォルトではアクセスなし。ロールが必要とする特定の操作を付与する AccessPolicy を作成する必要があります。AccessPolicy の spec.principals[].name フィールドは適用されるために抽出されたロールと一致する必要があります。一致する AccessPolicy がない場合、そのロールからのすべてのリクエストは拒否されます。たとえば、レジストリへのリーダーロールとライターロールに対して別々の AccessPolicy リソースを作成できます。 |
次の例は、developers ロールにすべてのエージェントとランタイムへの読み取りアクセスを付与し、それらのユーザーがチャット UI で myagent エージェントを呼び出せるようにする AccessPolicy を示しています。
apiVersion: ar.dev/v1alpha1
kind: AccessPolicy
metadata:
name: developers
spec:
description: "Access policy for the developers group"
principals:
- kind: Role
name: developers # must match the OIDC group claim value
rules:
- actions:
- "registry:read" # controls catalog access
resources:
- kind: agent
name: "*"
- kind: runtime
name: "*"
- actions:
- "runtime:*" # controls chat invocation
resources:
- kind: agent
name: myagent # restrict chat to a specific agent| フィールド | 説明 |
|---|---|
spec.principals[].kind | ユーザースコープのポリシーには Role に設定します。レジストリは、JWT に spec.principals[].name と等しいクレーム値が含まれるリクエストにポリシーを照合します。 |
spec.principals[].name | oidc.roleClaim Helm 値で設定された OIDC グループクレーム値(デフォルト: Groups)と一致する必要があります。たとえば、JWT に Groups: ["developers"] クレームを持つユーザーにこのポリシーを照合するには developers に設定します。 |
spec.rules[].actions | ユーザーが実行できる操作です。付与するカタログアクセスのタイプを制御するには registry:<verb> を使用します。サポートされる動詞: read、publish、edit、deploy、delete、admin、*。チャット UI でエージェントを呼び出せるようにするには runtime:* または runtime:invoke を使用します。 |
spec.rules[].resources[].kind | ルールが適用されるレジストリアーティファクトのタイプです。サポートされる種類: agent、server、runtime。 |
spec.rules[].resources[].name | ルールが適用される特定のアーティファクトの名前です。そのタイプのすべてのインスタンスにルールを適用するには "*" を使用します。 |
Tip
アーティファクト承認モードを有効にすることで、管理者以外のユーザーに追加のレビューゲートを追加できます。有効にすると、エージェントや MCP サーバーなどの AI アーティファクトに対する作成、更新、削除操作はすぐに適用されずにステージングされます。管理者ユーザーはカタログで変更が表示される前にリクエストを承認する必要があります。詳細については、アーティファクト承認を参照してください。
レイヤー 3: エージェントのランタイム認可
デプロイ済みのエージェントがランタイムで実行できる操作 (他のエージェントの呼び出しや MCP ツールの呼び出しなど) を制御するには、AccessPolicy リソースと RuntimeAccessPolicy リソースを使用します。使用するリソースの種類は、エージェントが動作するランタイムによって異なります。
| ランタイム | リソース | 備考 |
|---|---|---|
| Solo Enterprise for kagent | spec.principals[].kind フィールドを Role ではなく Deployment に設定した AccessPolicy | エージェントに対して AccessPolicy を適用するには、Solo Enterprise for agentregistry と併せて Solo Enterprise for Istio と Solo Enterprise for agentgateway をインストールする必要があります。AccessPolicy は kagent の AccessPolicy に変換され、さらに xDS を介して agentgateway のウェイポイント設定へ変換されます。すべての MCP ツール呼び出しとエージェント間リクエストはウェイポイントを通過し、ターゲットに到達する前に AccessPolicy が適用されます。 |
| AWS Bedrock AgentCore | RuntimeAccessPolicy | spec.config.gatewayRef でランタイムにリンクされたマネージドゲートウェイが必要です。エージェントが MCP ツールを呼び出すと、トラフィックはゲートウェイ経由でルーティングされ、ターゲットに到達する前に RuntimeAccessPolicy が評価されます。 |
AWS Bedrock AgentCore
AgentCore ランタイムでは、RuntimeAccessPolicy リソースを使用して、どのエージェントデプロイがどの MCP サーバーおよびツールを呼び出せるかを制御します。次の例では、myagent デプロイが mymcp MCP サーバーの echo ツールを呼び出すことを許可し、そのサーバー上の他のすべてのツールをブロックします。
apiVersion: ar.dev/v1alpha1
kind: RuntimeAccessPolicy
metadata:
name: myagent-mymcp-echo
spec:
rules:
- from:
- kind: Deployment
name: myagent
to:
- kind: MCPServer
name: mymcp
mcpTools:
- echo| フィールド | 説明 |
|---|---|
spec.rules[].from[].kind | 呼び出し元のエージェントデプロイを指定するには Deployment に設定します。 |
spec.rules[].from[].name | このルールがアウトバウンドアクセスを許可するエージェントデプロイの名前。 |
spec.rules[].to[].kind | ターゲットの種類。カタログの MCP サーバーを対象にするには MCPServer を使用します。 |
spec.rules[].to[].name | ターゲットの MCP サーバーまたはデプロイの名前。その種類のすべてのインスタンスへのアクセスを許可するには "*" を使用します。 |
spec.rules[].to[].mcpTools | 任意。エージェントが呼び出せるツール名のリスト。省略すると、ターゲットサーバー上のすべてのツールが許可されます。 |
Solo Enterprise for kagent
Solo Enterprise for kagent ランタイムでは、AccessPolicy リソースを使用し、spec.principals[].kind フィールドをエージェントの Deployment にスコープして、エージェントのランタイムアクセスを制御します。次の例では、myagent デプロイが k8s-agent エージェントを呼び出し、runtime-mcp MCP サーバーの get_object ツールを呼び出すことを許可します。
apiVersion: ar.dev/v1alpha1
kind: AccessPolicy
metadata:
name: k8s-agent-policy
spec:
description: "Runtime access policy for k8s-agent"
principals:
- kind: Deployment
name: myagent
rules:
- actions:
- "runtime:invoke"
resources:
- kind: agent
name: k8s-agent
- kind: server
name: runtime-mcp
subresources:
- tool/get_objectランタイム認可の設定例については、エージェントのランタイム認可を参照してください。
レイヤーの連携
sequenceDiagram
participant User as ユーザー
participant Agent as エージェント
participant IdP as IdP (Keycloak / Okta)
participant AR as agentregistry
participant GW as ゲートウェイ
participant Target as MCP サーバー / エージェント
Note over User,AR: レイヤー 1 -- 認証
User->>IdP: ログイン(デバイスフロー、パスワードクレデンシャル (CI/CD)、または PKCE)
IdP-->>User: 署名済み JWT (Groups: ["developers"], aud: ar-backend)
User->>AR: API リクエスト(Bearer トークン)
AR->>IdP: JWKS(公開鍵)を取得
IdP-->>AR: 公開鍵
AR->>AR: トークン署名を検証し、aud = ar-backend を確認
Note over AR: レイヤー 2 -- ユーザー認可 (kind: Role)
AR->>AR: Groups クレームを読み取り → AccessPolicy プリンシパルと照合
AR->>AR: registry:* / runtime:* ルールを評価
AR-->>User: レスポンス(カタログまたはチャット)
Note over Agent,Target: レイヤー 3 -- エージェントのランタイム認可 (kind: Agent)
Agent->>GW: MCP ツール呼び出しまたはエージェント呼び出し
GW->>GW: 呼び出しエージェント → AccessPolicy プリンシパルと照合
GW->>GW: runtime:invoke ルールを評価
alt 許可
GW->>Target: リクエストを転送
else 拒否
GW-->>Agent: 403 Forbidden
end