コンテンツにスキップ
これは最新の機能を備えた最新リリースですが、長期サポートは提供されません。サポートを継続するには、新しいリリースごとにアップグレードするか、四半期ごとの安定版リリースをご利用ください。

For the complete documentation index, see llms.txt. Markdown versions of all docs pages are available by appending .md to any docs URL.

アクセス制御について

Page as Markdown

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-interactivear-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.roleClaimRBAC_ROLE_CLAIMGroupsロール情報を抽出する JWT クレームへのドットパスです。たとえば、ルートレベルのクレームには roles を、ネストされたクレームには realm.roles などの形式を使用できます。未設定の場合、ロールは Groups ルートレベルクレームから抽出されます。oidc.roleMapper が設定されている場合、この設定は無視されます。
oidc.roleMapperRBAC_ROLE_MAPPER_CEL_EXPRJWT クレームマップからロールを抽出する CEL 式です。ドットパスアプローチでロール情報を抽出できない高度なシナリオで使用します。

クレームからロール情報が抽出された後、Solo Enterprise for agentregistry はレジストリにログインしようとするユーザーのタイプを検証します。Solo Enterprise for agentregistry は次のユーザータイプを区別します。

ユーザータイプHelm 値環境変数説明
スーパーユーザーoidc.superuserRole(デフォルト: adminRBAC_ROLE_CLAIMロールがこの値に一致するユーザーはすべてのポリシーチェックをバイパスし、レジストリへのフルアクセスを持ちます。AccessPolicy は不要です。デフォルトでは、スーパーユーザーロールは admin に設定されているため、JWT から抽出されたロール情報が admin と一致する場合、そのユーザーはスーパーユーザーとみなされ、レジストリへのフルアクセスが付与されます。
その他のユーザーN/AN/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[].nameoidc.roleClaim Helm 値で設定された OIDC グループクレーム値(デフォルト: Groups)と一致する必要があります。たとえば、JWT に Groups: ["developers"] クレームを持つユーザーにこのポリシーを照合するには developers に設定します。
spec.rules[].actionsユーザーが実行できる操作です。付与するカタログアクセスのタイプを制御するには registry:<verb> を使用します。サポートされる動詞: readpublisheditdeploydeleteadmin*。チャット UI でエージェントを呼び出せるようにするには runtime:* または runtime:invoke を使用します。
spec.rules[].resources[].kindルールが適用されるレジストリアーティファクトのタイプです。サポートされる種類: agentserverruntime
spec.rules[].resources[].nameルールが適用される特定のアーティファクトの名前です。そのタイプのすべてのインスタンスにルールを適用するには "*" を使用します。

Tip

アーティファクト承認モードを有効にすることで、管理者以外のユーザーに追加のレビューゲートを追加できます。有効にすると、エージェントや MCP サーバーなどの AI アーティファクトに対する作成、更新、削除操作はすぐに適用されずにステージングされます。管理者ユーザーはカタログで変更が表示される前にリクエストを承認する必要があります。詳細については、アーティファクト承認を参照してください。

レイヤー 3: エージェントのランタイム認可

デプロイ済みのエージェントがランタイムで実行できる操作 (他のエージェントの呼び出しや MCP ツールの呼び出しなど) を制御するには、AccessPolicy リソースと RuntimeAccessPolicy リソースを使用します。使用するリソースの種類は、エージェントが動作するランタイムによって異なります。

ランタイムリソース備考
Solo Enterprise for kagentspec.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 AgentCoreRuntimeAccessPolicyspec.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
  

次のステップ