Overview
このガイドでは、 Atlas Agent Engine APIへのアプリケーションを認証するための認証情報を管理する方法を学習できます。 Atlas Agent Engine は、 APIルートでAPIキーとサービスアカウントアクセストークンを受け入れます。これらの認証情報は、プロジェクトおよび組織のマネジメント ルートと、エージェント呼び出しルートで機能します。
代わりに、agentengine CLI を使用して自分のアカウントを認証するには、「 インストールと認証 」を参照してください。
注意
パブリック プレビュー中のAPI安定性
Atlas Agent のパブリックAPI は、パブリック プレビュー中に変更される可能性があります。エンドポイント、リクエスト形式、レスポンス形式は、下位互換性のある移行パスがないと変更される可能性があります。オートメーションが依存する agentengine CLI バージョンを固定し、アップグレードする前にリリースノートを確認します。
パブリック プレビュー中に適用されるすべての制限を確認するには、 「 MongoDB Atlas Agent の制限 」を参照してください。
サービス アカウントによる認証
サービス アカウントは、人ではなく、プロジェクトまたは組織に属するアカウントです。アプリケーションサーバーが自分のユーザーに代わってエージェントを呼び出す場合は、サービスアカウントを使用して、アプリケーションが個々の認証情報に依存しないようにします。
重要
サービス アカウント メモリ ID
サービス アカウントが 配置されたエージェントを呼び出す場合、Atlas Agent Engine はサービス アカウントの ID をランタイムメモリの ID として使用します。プラットフォームは、呼び出しリクエストまたは agentengine invoke --user-id フラグが提供するエンドユーザーの user_id 値を無視します。
この解決済み ID は、自動変換、記録、抽出、統合、app.memory 操作で使用されます。その結果、同じサービス アカウントを認証する呼び出しは 1 つのメモリ ユーザー スコープを共有します。
この制限は、サービス アカウントが呼び出す配置されたエージェントにのみ適用されます。スタンドアロンの、プロジェクトスコープのメモリ サービスは影響を受けません。このサービスは、呼び出し元からの明示的な user_id と session_id 値を引き続き受け入れます。
エンドユーザーごとにメモリを分離するには、アプリケーションからスタンドアロンのメモリサービスを呼び出し、各呼び出しに明示的なuser_id とsession_id 値を渡します。詳しくは、「 スタンドアロン メモリ サービスの使用 」を参照してください。
サービス アカウントの作成
このセクションでは、 API、 UI、 agentengine CLI を使用してサービス アカウントを作成する方法について説明します。
プロジェクト スコープのサービス アカウントを作成するには、プロジェクトの PROJECT_OWNER ロールが必要です。
APIの使用
サービスアカウントを作成するには、/api/v1/projects/{id}/service-accounts エンドポイントに POSTリクエストを送信します。
次のリクエストでは、$SESSION_TOKEN は Atlas Agent Engine にログインするための独自のセッション トークンです。サービス アカウントのアクセス トークンを使用してサービス アカウントを管理することはできません。 Atlas Agent Engine はセッション トークンから新しいサービス アカウントの所有者を定義するため、サービス アカウントを作成、ローテーション、非アクティブ化、または制限するすべてのリクエストは、必要なロールを持つサインイン ユーザーから送信される必要があります。
curl -s "https://agentengine.mongodb.com/api/v1/projects/$PROJECT_ID/service-accounts" \ -X POST \ -H "Authorization: Bearer $SESSION_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "name": "my-app-server", "description": "Invokes agents from the support app", "roles": ["PROJECT_OWNER"], "secret_expires_after_hours": 2160 }'
secret_expires_after_hoursフィールドは任意で、デフォルトでは 2160 時間、つまり 90 日になります。応答は、次の出力のようになります。
{ "client_secret": "ae_sa_sk_...", "service_account": { "client_id": "ae_sa_id_...", "name": "my-app-server", "is_active": true } }
重要
Atlas Agent Engine がクライアントシークレットを表示したら、クライアントシークレットを保存します。 Atlas Agent Engine は、作成時にのみシークレットを表示します。
サービス アカウントクライアントID は ae_sa_id_ から始まり、クライアントシークレットは ae_sa_sk_ から始まります。組織スコープのサービス アカウントを作成するには、ORG_GROUP_CREATOR ロールが必要です。 /api/v1/organizations/{id}/service-accounts エンドポイントに POSTリクエストを送信します。
curl -s "https://agentengine.mongodb.com/api/v1/organizations/$ORG_ID/service-accounts" \ -X POST \ -H "Authorization: Bearer $SESSION_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "name": "my-app-server", "description": "Invokes agents from the support app", "roles": ["ORG_GROUP_CREATOR"], "secret_expires_after_hours": 2160 }'
応答の形式は、プロジェクト スコープの応答と同じです。
UI の使用
Atlas Agent Engine UIでサービス アカウントを作成および管理できます。プロジェクト スコープのサービス アカウントの場合は、プロジェクトナビゲーションで [Service Accounts] をクリックします。組織スコープのサービス アカウントの場合は、Organization Settings に移動し、Service Accounts をクリックします。
CLI の使用
agentengine CLI を使用してサービス アカウントを作成および管理することもできます。次のコマンドは、プロジェクト スコープのサービス アカウントを作成します。
agentengine service-account create my-app-server \ --project-id $PROJECT_ID \ --role PROJECT_OWNER \ --description "Invokes agents from the support app"
組織スコープのサービス アカウントを作成するには、--project-id ではなく --org-id を渡します。どちらも渡しない場合、CLI は現在のログイン状態のプロジェクトを使用し、プロジェクトが選択されていない場合は組織にフォールバックします。
次のフラグを使用できます。
Flag | 説明 |
|---|---|
| (必須)サービス アカウントに付与するロールです。このフラグは 1 つのロールのみを受け入れます。プロジェクト スコープのアカウントの場合は、 |
| サービス アカウントのプロジェクト スコープ。 |
| サービス アカウントの組織スコープ。 |
| 人間が判読可能なサービス アカウントの説明。 |
| シークレットの有効期間( |
| 認証情報を使用できるアドレスを制限します。デフォルトは未制限です。 |
service-account コマンドには、同じスコープ フラグを受け入れる list、get、rotate、delete サブコマンドも用意されています。
アクセス トークンのリクエスト
アクセス トークンのクライアントIDとクライアントシークレットを交換するには、POSTリクエストを/api/v1/oauth/token エンドポイントに送信します。次の例に示すように、認証情報をHTTP基本認証情報 として、またはリクエスト本文の client_id フィールドと client_secret フィールドとして渡します。
curl -s "https://agentengine.mongodb.com/api/v1/oauth/token" \ -X POST \ -u "$CLIENT_ID:$CLIENT_SECRET" \ -d "grant_type=client_credentials"
grant_typeフィールドはclient_credentials 値のみを受け入れます。応答は、次の出力のようになります。
{ "access_token": "...", "token_type": "Bearer", "expires_in": 3600 }
アクセス トークンの有効期間は 1 時間です。現在のトークンの有効期限が切れる前に新しいトークンをリクエストします。 Atlas Agent Engine は、各サービス アカウントのトークンリクエストのレートを制御し、クライアントがトークンをリクエストしすぎる場合は 429 エラーコードを返します。
アクセス トークンを使用したエージェントの呼び出し
アクセス トークンを使用してエージェントを呼び出すには、 呼び出しリクエストの Authorization ヘッダーにアクセス トークンを送信します。
curl -s "https://agentengine.mongodb.com/api/v1/projects/$PROJECT_ID/workspaces/$WORKSPACE_ID/invoke" \ -X POST \ -H "Authorization: Bearer $ACCESS_TOKEN" \ -H "Content-Type: application/json" \ -d '{"message": "Hello, agent!"}'
プロジェクト スコープのサービス アカウントは、自分のプロジェクトでのみ機能できます。リクエストパスが他のプロジェクトを指定する場合、Atlas Agent Engine はそのリクエストを拒否します。組織スコープのサービス アカウントは、自分の組織内のプロジェクトに名前を付ける必要があります。
ORG_GROUP_CREATOR ロールだけでは、組織内のすべてのプロジェクトへのアクセス権が付与されるわけではありません。 ORG_GROUP_CREATOR ロールを持つ組織スコープのサービス アカウントは、Atlas Agent Engine が管理するプロジェクトでのみエージェントを呼び出すことができます。 Atlas ベースのプロジェクトでエージェントを呼び出すには、PROJECT_OWNER ロールを持つプロジェクトスコープのサービスアカウントを使用します。
サービス アカウントのローテーションと非アクティブ化
サービス アカウントのシークレットを置き換えるには、アカウントのスコープのローテーション エンドポイントに POSTリクエストを送信します。プロジェクト スコープのアカウントには、次のエンドポイントを使用します。
curl -s "https://agentengine.mongodb.com/api/v1/projects/$PROJECT_ID/service-accounts/$CLIENT_ID/rotate" \ -X POST \ -H "Authorization: Bearer $SESSION_TOKEN" \ -H "Content-Type: application/json" \ -d '{"secret_expires_after_hours": 2160}'
組織スコープのアカウントには、次のエンドポイントを使用します。
curl -s "https://agentengine.mongodb.com/api/v1/organizations/$ORG_ID/service-accounts/$CLIENT_ID/rotate" \ -X POST \ -H "Authorization: Bearer $SESSION_TOKEN" \ -H "Content-Type: application/json" \ -d '{"secret_expires_after_hours": 2160}'
secret_expires_after_hoursフィールドは任意で、デフォルトは 2160 時間です。デフォルトのを受け入れるには、リクエスト本文を省略します。応答は作成応答と同じ形式で、新しいシークレットが含まれます。以前のシークレットは、最大 7 日間、または独自の有効期限が切れるまで有効のままです。
以前のシークレットをすぐに非アクティブ化するには、シークレットを再度ローテーションするか、アカウントを非アクティブ化します。どちらのアクションも、前のシークレットの認証を停止します。侵害される可能性のあるシークレットを取り消す必要がある場合は、これらの 1 つを使用します。
サービス アカウントを無効化するには、アカウントのスコープのエンドポイントに DELETEリクエストを送信します。プロジェクト スコープのアカウントには、次のエンドポイントを使用します。
curl -s "https://agentengine.mongodb.com/api/v1/projects/$PROJECT_ID/service-accounts/$CLIENT_ID" \ -X DELETE \ -H "Authorization: Bearer $SESSION_TOKEN"
組織スコープのアカウントには、次のエンドポイントを使用します。
curl -s "https://agentengine.mongodb.com/api/v1/organizations/$ORG_ID/service-accounts/$CLIENT_ID" \ -X DELETE \ -H "Authorization: Bearer $SESSION_TOKEN"
サービス アカウントを非アクティブ化すると、そのアカウントはトークンをリクエストできなくなり、すでに保持しているトークンは次のリクエストで失敗します。
サービス アカウント ロール
サービス アカウントのロールは 1 つだけです。以下の表は、各スコープでサービス アカウントに割り当てることができるロールを示しています。
スコープ | ロール |
|---|---|
プロジェクト |
|
組織 |
|
どちらのスコープでもエージェントを呼び出せますが、すべてのロールではエージェントを呼び出せません。エージェントを呼び出すには、プロジェクト単位のサービスアカウントに PROJECT_OWNER ロールが必要で、組織単位のサービスアカウントには ORG_GROUP_CREATOR ロールが必要です。サービス アカウントに PROJECT_READ_ONLY と ORG_READ_ONLY ロールを割り当てることはできますが、どちらのロールを持つサービスアカウントでもエージェントを呼び出すことはできません。エージェントを呼び出さないサービス アカウントには、読み取り専用ロールのみを割り当てます。 Atlas Agent Engine は、サービス アカウントのステータスとロールを すべてのリクエストで再評価するため、ロールの変更または非アクティブ化はアカウントの次のリクエストに適用されます。
IPアドレスの制限
サービス アカウントのトークンを使用できるIPアドレスを制限するには、 IP アクセス リストを設定します。許可されたIPアドレスと CIDR ブロックの完全なリストを含む、アカウントのスコープのエンドポイントに PUTリクエストを送信します。プロジェクト スコープのアカウントには、次のエンドポイントを使用します。
curl -s "https://agentengine.mongodb.com/api/v1/projects/$PROJECT_ID/service-accounts/$CLIENT_ID/ip-access-list" \ -X PUT \ -H "Authorization: Bearer $SESSION_TOKEN" \ -H "Content-Type: application/json" \ -d '{"ip_access_list": ["203.0.113.0/24"]}'
組織スコープのアカウントには、次のエンドポイントを使用します。
curl -s "https://agentengine.mongodb.com/api/v1/organizations/$ORG_ID/service-accounts/$CLIENT_ID/ip-access-list" \ -X PUT \ -H "Authorization: Bearer $SESSION_TOKEN" \ -H "Content-Type: application/json" \ -d '{"ip_access_list": ["203.0.113.0/24"]}'
このリクエストは、 IP アクセス リスト全体を置き換えます。 IP制限を削除するには、エンドポイントに空の配列を送信します。 Atlas Agent Engine は、リストにないアドレスからのサービスアカウントのアクセストークンを使用するリクエストを拒否します。 IP アクセス リストはトークン リクエストを制限しません。
次のステップ
これらの認証情報を使用して配置されたエージェントを呼び出す方法については、「 エージェントの呼び出し 」を参照してください。