生成AIエージェントのAPIエンドポイント・コール・ツールのガイドライン

外部アプリケーション・プログラミング・インタフェース(API)およびOCI APIと対話およびコールするためのAPIエンドポイント・コール・ツールを生成AIエージェントに定義します。

このトピックで説明する情報は、OCI仮想クラウド・ネットワーク(VCNs)、サブネットおよびセキュリティ・ルール、OCIコンピュート・インスタンスへのアプリケーションのデプロイ方法、およびREpresentational State Transfer Application Programming Interface (REST API)の操作の基本を理解していることを前提としています。

開始方法の概要を次に示します。

  1. リクエストおよびレスポンスの形式と使用可能な操作を定義するOpenAPIスキーマを作成します。必要に応じて、x-requires-approvalヘッダーをスキーマに含めます。
  2. 認証方式の構成。使用する認証タイプに応じて、指定する必要がある資格証明のボールト・シークレットを作成します。
  3. OCIネットワーク・リソースを設定します。仮想クラウド・ネットワーク(VCN)が必要です。
  4. IAMポリシーを確認し、必要なポリシーを追加します。たとえば、NetworkingおよびVaultです。

APIスキーマ

API操作の構造と動作は、JSONまたはYAMLで記述されたOpenAPIスキーマで定義する必要があります。

コンソールを使用して生成AIエージェントでAPIエンドポイント・コール・ツールを作成する場合は、テキスト・ボックスにコピー・アンド・ペーストしてスキーマを手動でアップロードするか、オブジェクト・ストレージにアップロードされたスキーマを選択できます。

最大ファイル・サイズおよびサポートされるバージョンは次のとおりです。

  • バージョン:
    • OpenAPI: 3.0以降
    • JSON: RFC 8259で定義されている標準JSONスキーマ
    • YAML: バージョン1.2以降
  • 最大ファイル・サイズ:
    • インライン貼り付け: 1,000,000文字
    • Object Storageのファイル: 20MB
JSONでのAPIスキーマの例
{
  "openapi": "3.0.0",
  "info": {
    "title": "Object Storage API",
    "version": "1.0.0",
    "description": "API to create an Object Storage bucket in Oracle Cloud."
  },
  "servers": [
    {
      "url": "https://objectstorage.<region>.oraclecloud.com"
    }
  ],
  "paths": {
    "/n/yourNamespace/b": {
      "post": {
        "summary": "Create a Bucket",
        "operationId": "createBucket",
        "parameters": [
          {
            "name": "namespaceName",
            "in": "path",
            "required": true,
            "description": "The Object Storage namespace used for the request.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "bucket_name": {
                    "type": "string",
                    "description": "The name of the bucket to create."
                  },
                  "compartment_ocid": {
                    "type": "string",
                    "description": "The OCID of the compartment where the bucket will be created."
                  },
                  "storage_tier": {
                    "type": "string",
                    "enum": [
                      "Standard",
                      "Archive"
                    ],
                    "description": "The storage tier for the bucket."
                  }
                },
                "required": [
                  "bucket_name",
                  "compartment_ocid"
                ],
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Bucket created successfully.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "bucket_name": {
                      "type": "string"
                    },
                    "namespace": {
                      "type": "string"
                    },
                    "time_created": {
                      "type": "string",
                      "format": "date-time"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid input."
          },
          "500": {
            "description": "Internal server error."
          }
        }
      }
    }
  }
}
YAMLのAPIスキーマの例
openapi: "3.0.0"
info:
	title: "Object Storage API"
	version: "1.0.0"
	description: "API to create an Object Storage bucket in Oracle Cloud."

servers:
	- url: "https://objectstorage.<region>.oraclecloud.com"

paths:
	/n/yourNamespace/b:
		post:
			summary: "Create a Bucket"
			operationId: "createBucket"
			parameters:
				- name: namespaceName
					in: path
					required: true
					description: "The Object Storage namespace used for the request."
					schema:
						type: string
			requestBody:
				required: true
				content:
					application/json:
						schema:
							type: object
							properties:
								bucket_name:
									type: string
									description: "The name of the bucket to create."
								compartment_ocid:
									type: string
									description: "The OCID of the compartment where the bucket will be created."
								storage_tier:
									type: string
									enum:
										- Standard
										- Archive
									description: "The storage tier for the bucket."
							required:
								- bucket_name
								- compartment_ocid
							additionalProperties: false
			responses:
				"200":
					description: "Bucket created successfully."
					content:
						application/json:
							schema:
								type: object
								properties:
									bucket_name:
										type: string
									namespace:
										type: string
									time_created:
										type: string
										format: date-time
				"400":
					description: "Invalid input."
				"500":
					description: "Internal server error."

ヒューマンインザループ承認

状態を変更する可能性があるAPI操作の場合は、x-requires-approvalヘッダーをスキーマに含めることをお薦めします。これは、ツール・アクションに人間同士(HITL)の承認が必要であることを示します。重要な操作に人間を関与させることは、通常、次の操作タイプに推奨されます。これは、不当な変更を引き起こす可能性があるためです。

  • POST
  • PUT
  • PATCH
  • DELETE

YAML AIスキーマにx-requires-approvalを含める例:

parameters:
  - in: header
    name: x-requires-approval
    required: false
    schema:
      type: string
    description: 
      Indicates that this operation requires human approval before execution.

x-requires-approvalヘッダー・シグナルを生成AIエージェントに含めて、エージェント・ツール・コールでAPIエンドポイントを実行する前に、ヒューマンから確認を要求する必要があることを通知します。

承認ヘッダーがスキーマに含まれている場合、ヘッダーは次のようになります。

  • 軌跡ステップで必要なアクションHumanApprovalRequiredActionをトリガーします
  • 人間の監視なしに意図しない副作用を防止
  • 書き込み、更新、または削除を行う操作を実行するツールを安全に使用できます。

認証

生成AIエージェントでは、APIエンドポイント・コール・ツールは、API操作の実行リクエスト時に認証を使用するか、認証を使用しないように構成できます。

サポートされている認証メカニズム、および認証タイプに対して実行する必要がある前提条件タスクについては、次の各項を参照してください。

APIキー認証

APIキーを必要とするパブリックおよびプライベートAPIエンドポイント用。

APIキーは、APIプロバイダのプラットフォームから取得される一意の識別子です。アプリケーションやサービスなどのクライアントがAPIにリクエストを行うと、そのAPIキーを使用してクライアントの認証が行われます。

生成AIエージェントでは、APIキー認証は次のタイプでサポートされます。

  • ヘッダー: HTTPリクエストのヘッダーにAPIキーを渡します。

    APIヘッダー・パラメータは、リクエストまたはレスポンスに関する追加のメタデータを提供するために、HTTPリクエストまたはレスポンスに含まれるキーと値のペアです。

  • 問合せパラメータ: APIキーを問合せパラメータとしてURLに直接渡します。

    問合せパラメータは、リクエストを行うときにWebサーバーに追加情報を提供するために使用される、URLの最後にアタッチされた定義済のパラメータ・セット(キーと値のペア)です。

APIキーを格納するシークレットをOCI Vaultに作成します。シークレットの作成に関するヘルプが必要な場合は、Vaultサービス・ドキュメントのシークレットの作成を参照してください。

APIキー認証を使用してAPIエンドポイント・コール・ツールを構成する場合は、キーの場所(ヘッダーまたは問合せパラメータ)、キー名およびAPIキーを持つボールト・シークレットを指定します。

「Vaultシークレットのポリシー」も参照してください。

基本認証

ユーザー名とパスワードを使用してパブリックおよびプライベートAPIエンドポイントをコールする場合。

Basic認証では、ユーザー名とパスワードの資格証明が次の必須形式で使用されます。

<your-username>:<your-password>

OCI Vaultでシークレットを作成し、必要な形式で資格証明を格納します。シークレットの作成に関するヘルプが必要な場合は、Vaultサービス・ドキュメントのシークレットの作成を参照してください。

Basic認証を使用してAPIエンドポイント・コール・ツールを構成する場合は、ボールト・シークレットを指定します。

「Vaultシークレットのポリシー」も参照してください。

Bearer認証

Bearerトークンを使用してプライベートAPIエンドポイントをコールする場合。

Bearerトークンは、保護されたリソースへのアクセスを許可または付与するためにOAuth 2.0認証で使用されるアクセス・トークンです。Bearer認証は、クライアントがAuthorizationヘッダーのリクエストの一部としてBearerトークンを送信する認証方法です。この認証方法は、リクエストを認証するために検証されます。APIキーなどの存続期間が長いトークンを使用することをお薦めします。

OCI Vaultにシークレットを作成してトークンを格納します。シークレットの作成に関するヘルプが必要な場合は、Vaultサービス・ドキュメントのシークレットの作成を参照してください。

Bearer認証を使用してAPIエンドポイント・コール・ツールを構成する場合は、ボールト・シークレットを指定します。

「Vaultシークレットのポリシー」も参照してください。

IDCS認証

Oracle Identity Cloud Service (IDCS)の機密アプリケーション・クライアント資格証明を使用してプライベートAPIエンドポイントをコールする場合。

機密アプリケーションは、OAuth 2.0を使用してクライアント・アプリケーションを安全に認証および認可するように設計されています。クライアント資格証明は、クライアント・アプリケーションに登録されている機密アプリケーションのクライアントIDおよびクライアント・シークレットです。

アイデンティティ・ドメインでOCI IAMを使用して、機密アプリケーションを作成します。アイデンティティ・ドメインに機密アプリケーションを作成するには、Identity Domain Administratorロールまたはアプリケーション管理者ロールが必要です。

機密アプリケーションを作成するには、次のようにします。

  1. ナビゲーション・メニューを開き、「アイデンティティおよびセキュリティ」を選択します。「アイデンティティ」で、「ドメイン」を選択します。
  2. コンパートメント内のドメインのリストから、機密アプリケーションを作成するドメインを選択します。
  3. 機密アプリを作成してアクティブ化します

    OAuth構成の場合は、「クライアント構成」を選択し、クライアント資格証明を使用します。

    ヘルプが必要な場合は、アイデンティティ・ドメインを使用するOCI IAMのドキュメントで、機密アプリケーションの作成を参照してください。

  4. 機密アプリケーションで生成されたクライアントIDおよびクライアント・シークレット値をコピーします。値を安全な場所に保管します。
  5. OCI Vaultで、機密アプリケーションのクライアント・シークレットを格納するシークレットを作成します。IDCS認証を使用してAPIエンドポイント・コール・ツールを構成する場合は、ボールト・シークレットを指定する必要があります。
    ノート

    エージェント・サービス・テナンシからのクロスリージョン・コールはサポートされていません。たとえば、IDCS認証で構成されたAPIエンドポイント・コール・ツールがリージョンAにある場合、マスター・リージョンBのボールトを選択しないでください。

    シークレットの作成に関するヘルプが必要な場合は、Vaultサービス・ドキュメントのシークレットの作成を参照してください。

    「Vaultシークレットのポリシー」も参照してください。

OCIリソース・プリンシパルの認証

オブジェクト・ストレージやネットワーキングなどのOCI APIをコールする場合のみ。

リソース・プリンシパルを使用すると、サービスは明示的な資格証明を必要とせずに、OCIおよびOCIサービス・リソースで安全に認証できます。OCI IAMポリシーは、アクセスの認証に使用されます。たとえば:

// To enable Object Storage access in all compartments in the tenancy
allow any-user to manage object-family in tenancy where any {request.principal.type='genaiagent'} 

記述するIAMポリシーは、コールしているOCIサービスAPIと、動的グループを使用しているかどうかによって異なります。OCIサービスのポリシーを参照してください。

ネットワーク・リソース

生成AIエージェントでAPIエンドポイント・コール・ツールを作成する場合は、仮想クラウド・ネットワーク(VCN)とサブネットを選択する必要があります。

ターゲットURLがプライベートかパブリックかに関係なく、APIエンドポイント・コール・ツールによって行われたすべてのリクエストはサブネットを経由します。これには、サードパーティ・プロバイダへのRESTコール、VCNでホストされる内部サービス、およびOCIパブリックAPIが含まれます。

OCIで必要なネットワーキング・リソースを設定します。

VCNとサブネット
  • 仮想クラウド・ネットワーク(VCN)が必要です。

  • プライベート・サブネットまたはパブリック・サブネットを持つことができます。プライベート・サブネットをお薦めします。

  • プライベート・サブネットにはNATゲートウェイが必要です。

  • パブリック・サブネットにはインターネット・ゲートウェイが必要です。環境設定によっては、パブリック・サブネットにインターネット・ゲートウェイおよびNATゲートウェイが必要な場合があります。

    認証なしでパブリックAPIをコールする場合は、すべてのポート・トラフィックがエグレスに対して有効になっているNATゲートウェイに対してパブリック・サブネットが設定されていることを確認してください。

プライベートDNSのAPIゲートウェイ

APIゲートウェイは、プライベート・インスタンス上のアプリケーションへのトラフィック用に作成できます。

プライベートDNSのAPIゲートウェイを作成するときに、「プライベート」タイプを選択します。

プライベート・サブネットで、次の2つのエグレス・ルールが使用可能であることを確認します:

  • ポート443は、通信のためにAPIゲートウェイによって使用されます。
  • プライベート・アプリケーションがホストされているポート。APIゲートウェイは、このポート(9090など)にリクエストを送信します。

プライベート・エンドポイントでIDCS認証を使用する場合は、ベースURLをOpenAPIスキーマのAPIゲートウェイ・サービスURLに置き換えてください。APIゲートウェイは、プライベート・サブネットで実行されているインスタンスを指している必要があります。

プライベート・ネットワーク設定
VCN:
  • 必要なリージョンおよびコンパートメントにVCNを作成します。

  • VCNのCIDRブロック(10.0.0.0/16など)を指定します。

  • VCNのDNS解決を有効にすることを選択できます。

プライベート・サブネット:
  • VCNと同じコンパートメントを選択して、作成したVCNにプライベート・サブネットを作成します。

  • サブネットのCIDRブロックを指定します(たとえば、10.0.1.0/24)。

  • サブネットのDNS解決を有効にすることを選択できます。

プライベート・コンピュート・インスタンス:
  • VCNおよびサブネットと同じコンパートメントに、作成したVCNおよびプライベート・サブネットを選択して、プライベート・コンピュート・インスタンスを作成します。

  • SSHでインスタンスにアクセスする場合は、SSH公開キーを指定します。

エグレス・ルール:

  • 必要なサービス(オブジェクト・ストレージ、外部APIなど)へのアウトバウンド接続を許可します。

  • HTTPSの場合は、TCPポート443を開きます。

イングレス・ルールは次のとおりです。

  • OCIプラットフォームIP範囲からのみインバウンド・トラフィックを許可します。

  • 必要なポート(通常はTCP 443)に制限します。

イングレスUDPルール:

  • UDPポート53のイングレス・ルールを追加します。

    UDPルールをエージェント・サービスのデフォルト・セキュリティ・リストおよび(顧客) VCNサブネットに追加して、DNSのリダイレクションと解決を許可します。

パブリック・ネットワーク設定

同様のイングレスおよびエグレス制限を設定しますが、インターネットに公開されます。厳密なアクセス制御リスト(ACL)を使用します。

DNS解決

プライベート・アプリケーションのDNS解決を容易にするには:

  • DNSトラフィックのファイアウォール/セキュリティ・リストで、UDPポート53を許可します。

  • プライベート・アプリケーション・エンドポイントにトラフィックを転送するようにDNS転送/ルールを構成します。

  • イングレスUDPポート53が、エージェント・サービスと(顧客の)VCNサブネット・セキュリティ・リストの両方で開かれていることを確認します。

OCIプラットフォームが、プライベート・アプリケーションに関連付けられたドメイン名を解決できることを確認します。

ネットワーク参照ドキュメント

ヘルプが必要な場合は、次のサービスドキュメントを参照してください。

IAMポリシー

「サービスを使用する前にポリシーを追加」の説明に従って、すべての生成AIエージェント・リソースへのアクセス権をユーザーに付与してください。

次の項も確認し、必要なポリシーを記述します。

ネットワーキングのポリシー

集約リソース・タイプvirtual-network-familyのポリシーが必要です。

次のポリシーを使用して、テナンシ内のすべてのコンパートメントのネットワーキングへのアクセスを有効にするか、特定のコンパートメントへのアクセスを制限できます。

// To enable access to all compartments in the tenancy
allow group <group-name> to manage virtual-network-family in tenancy 
// To enable access to a specific compartment in the tenancy
allow group <group-name> to manage virtual-network-family in compartment <compartment-name> 
OCIサービスのポリシー

APIエンドポイント・コール・ツールを作成し、OCIリソース・プリンシパル認証を使用するようにツールを構成する場合は、ポリシーを追加して、エージェントがコールするOCIサービスのAPI操作にアクセスするための適切な権限を付与する必要があります。

リファレンス: アイデンティティ・ドメインを使用するIAMでの詳細なサービス・ポリシー・リファレンス

必要なOCI IAMポリシーは、コールしているOCIサービスAPIと、動的グループを使用しているかどうかによって異なります。

動的グループの使用
  1. 動的グループを作成し、次の一致ルールを追加します。

    ALL {resource.type='genaiagent'}

    ヘルプが必要な場合は、動的グループの作成を参照してください。

  2. リソース・タイプへの適切なアクセス・レベルを動的グループに付与するポリシーを追加します。たとえば、オブジェクト・ストレージ・サービスAPIをコールするには、manage object-familyまたはread objectsを使用します。

    • デフォルトのアイデンティティ・ドメインでは、次のポリシーを使用できます。

      allow dynamic-group <dynamic-group-name> 
      to <verb> <resource type> in compartment <compartment-name>
      
      allow dynamic-group <dynamic-group-name> 
      to <verb> <resource type> in tenancy
    • Oracle Identity Cloud Service (IDCS)ドメイン名および動的グループ名を指定して、デフォルトではないアイデンティティ・ドメインで次のポリシーを使用します:

      allow dynamic-group '<idcs-domain-name>/<dynamic-group-name>' 
      to <verb> <resource type> in compartment <compartment-name>
      
      allow dynamic-group '<idcs-domain-name>/<dynamic-group-name>' 
      to <verb> <resource type> in tenancy

動的グループを使用しない

リソース・タイプに適切なレベルのアクセス権を付与するポリシーを追加します。たとえば、オブジェクト・ストレージ・サービスAPIをコールするには、manage object-familyまたはread objectsを使用します。

allow any-user to <verb> <resource type> in tenancy where any {request.principal.type='genaiagent'}

Vaultシークレットのポリシー

使用する認証方法では、OCI Vaultシークレットに格納されている資格証明の指定が必要になる場合があります。

ボールト・シークレットにアクセスするIAMポリシーは、動的グループを使用しているかどうかによって異なります。

動的グループの使用
  1. 動的グループを作成し、次の一致ルールを追加します。

    ALL {resource.type='genaiagent'}

    ヘルプが必要な場合は、動的グループの作成を参照してください。

  2. デフォルトのアイデンティティ・ドメインでは、次のポリシーを使用できます。

    • allow dynamic-group <dynamic-group-name> 
      to read secret-family in compartment <compartment-name>
      
      allow dynamic-group <dynamic-group-name> 
      to read secret-family in tenancy
    • Oracle Identity Cloud Service (IDCS)ドメイン名および動的グループ名を指定して、デフォルトではないアイデンティティ・ドメインで次のポリシーを使用します:

      allow dynamic-group '<idcs-domain-name>/<dynamic-group-name>' 
      to read secret-family in compartment <compartment-name>
      
      allow dynamic-group '<idcs-domain-name>/<dynamic-group-name>' 
      to read secret-family in tenancy

動的グループを使用しない

次のポリシーを使用できます。

allow any-user to read secret-family in tenancy where any {request.principal.type='genaiagent'}