概要
このドキュメントでは、Alibaba Cloud IDaaS エージェントの ID セキュリティ機能を使用して、エージェント中心の ID とアクセスの管理システムを構築する方法について説明します。このソリューションにより、エージェントのデジタル ID を安全に管理し、API キーや OAuth トークンなどのアクセス認証情報を一元管理し、エージェントがユーザーまたは自身を代表して大規模言語モデル、サードパーティサービス、および社内サービスに安全にアクセスできるようになります。
利用シーン
AI エージェントが普及するにつれ、さまざまな外部サービスに安全にアクセスする必要性が高まっています。
-
大規模言語モデルサービス:エージェントが AI 推論を実行するために大規模言語モデルを呼び出す必要があります。この例では Model Studio を使用します。
-
サードパーティサービス:エージェントがサードパーティサービスにアクセスする必要があります。この例では Amap MCP Server を使用します。
-
社内エンタープライズサービス:エージェントが社内エンタープライズサービスにアクセスする必要があります。この例では Function Compute にデプロイされたサービスを使用します。
コード内に認証情報をハードコードしたり、設定ファイルに保存したりする従来の方法には、認証情報の漏洩やローテーションの困難さなど、セキュリティリスクがあります。このソリューションでは、IDaaS を使用して以下を実現します。
-
IDaaS 内で認証情報を一元管理し、エージェントが実行時に動的に認証情報を取得できるようにします。
-
M2M(Machine-to-Machine)ID 認証を使用して、認証済みのエージェントのみが認証情報を取得できるようにします。
-
動的にアクセストークンを発行して、きめ細かなアクセス制御を実現します。
ソリューションアーキテクチャ
ワークフロー
ワークフロー
|
フェーズ |
説明 |
主要な認証情報 |
|
ユーザー認証 |
ユーザーが SSO 経由でサインインし、エージェントへのアクセス用のアクセストークン (AT_u) を取得します。 |
AT_u (aud:エージェントのオーディエンス識別子、scope:権限範囲) |
|
ユーザー本人確認 |
エージェントが AT_u とその権限を検証します。 |
IDaaS JWKS 公開鍵 |
|
エージェント初期化 |
エージェントが M2M アプリケーション ID を使用して、IDaaS から各種認証情報を動的に取得します。 |
LLM API キー、サードパーティサービス API キー、およびエンタープライズサービスアクセストークン (AT_s、aud:エンタープライズサービスのオーディエンス識別子、scope:エンタープライズサービスの権限範囲) |
|
AI リクエスト処理 |
エージェントが LLM および各種ツールを呼び出して AI リクエストを完了します。 |
認証情報をオンデマンドで使用します。 |
前提条件
-
Model Studio でモデルを呼び出す権限を持つ API キーを作成済みです。
-
Model Studio の MCP スクエアに Amap を追加済みです。
-
Function Compute を有効化済みです。
-
IDaaS でエージェント ID セキュリティを構成し、エージェントノード、Clientノード、Large Language Model (LLM)ノード(Model Studio API キーを使用)、External Serviceノード(Model Studio API キーを使用)、およびEnterprise Serviceノードを設定済みです。詳細については、「エージェント ID セキュリティ構成ガイド」をご参照ください。
操作手順
ステップ 1:エージェントサンプルコードの取得
エージェントサンプルコードを Git でクローンするか、直接ダウンロードします。ターミナルを開き、次のコマンドを実行します。
git clone https://github.com/cloud-idaas/idaas-java-agent-id-demo.git
ステップ 2:IDaaS SDK の構成
-
SDK 構成の生成
-
IDaaS EIAM コンソールに移動します。
-
左側のナビゲーションウィンドウで、エージェントセキュリティを選択します。
-
対象のエージェントを特定し、Edit列のOperationをクリックします。
-
エージェントノードをクリックします。
-
Authentication TypeでClient Secret Credentialを選択し、Generate SDK Configurationをクリックします。
-
構成内容をコピーします。
詳細な構成手順については、「環境準備」をご参照ください。
-
-
SDK ファイルの構成
コピーした SDK 構成を、エージェントサンプルコードディレクトリ内の次の 2 つのファイルに貼り付けます。
-
src/main/resources/cloud_idaas_config_for_computer.json(ローカルデプロイ用) -
src/main/resources/cloud_idaas_config_for_agent_run.json(AgentRun デプロイ用)
-
ステップ 3:エンタープライズサービスのデプロイ
3.1 関数のデプロイ
-
Function Compute (FC) コンソールにログインします。
-
左側のナビゲーションウィンドウで、関数管理 > 関数を選択します。
-
Web 関数タブを選択し、 Web 函数 の作成をクリックします。
-
実行環境で、カスタム実行時 > Java > Java 17を選択します。
-
コードのアップロード方法で、サンプルコードの使用を選択します。他の設定はデフォルトのままにしておきます。
-
関数の作成を完了します。
3.2 JWT 認証の構成
関数の HTTP トリガーに対して JWT 認証を構成します。これにより、IDaaS が発行したアクセストークンを持つ呼び出し元のみがエンタープライズサービスにアクセスできるようになります。
-
IDaaS インスタンスコンソールで、「エージェント ID セキュリティ構成ガイド」に従って作成したEnterprise Serviceノードをクリックします。
-
Generalの下にあるOIDC Discovery Endpointをコピーします。ブラウザで開き、
jwks_uriフィールドの値である JWKS エンドポイントをコピーします。 -
ブラウザで JWKS エンドポイントを開き、レスポンス全体をコピーします。
-
Function Compute (FC) コンソールで、関数リストから関数を特定し、操作列の設定をクリックします。
-
関数の詳細タブで、関数トポロジー図内のトリガーをクリックします。認証方法でJWT 認証を選択します。
-
JWKSフィールドに、JWKS エンドポイントからのレスポンスを貼り付けます。
-
JWT トークンの設定セクションで、パラメーター名をAuthorizationに設定します。
-
構成を完了します。
ステップ 4:エージェントのデプロイ
エージェントはローカルまたは Function Compute 上の AgentRun にデプロイできます。ニーズに合ったデプロイ方法を選択してください。
ローカル
-
開発環境のセットアップ
-
JDK 17 以降をインストールします。
-
Maven をインストールします。
-
-
プロジェクトのパッケージ化
ターミナルで次のコマンドを実行します。
cd idaas-java-agent-id-demo mvn clean package -
環境変数の設定
次の例は Linux オペレーティングシステム用です。
export IDAAS_CLIENT_SECRET={client_secret} export ENV_PRIVATE_KEY={private_key} export JWKS_ENDPOINT=https://xxx.aliyunidaas.com/api/v2/iauths_system/oauth2/jwks export AGENT_AUDIENCE=https://agentserver.example.com export AGENT_SCOPE=agent.access export ACCESS_IDENTITY=Machine export LLM_API_KEY_IDENTIFIER=llm_api_key export EXTERNAL_SERVER_API_KEY_IDENTIFIER=mcp_server_api_key export ENTERPRISE_SERVICE_SCOPE="https://mcpserver.com|mcp.access" export EXTERNAL_SERVER_URL=https://dashscope.aliyuncs.com/api/v1/mcps/amap-maps/mcp export ENTERPRISE_SERVICE_URL=https://xxx.{region_id}.fcapp.runパラメーター
説明
ソース
IDAAS_CLIENT_SECRETエージェントのクライアントシークレット認証情報。クライアントシークレット認証に必須です。
「エージェント ID セキュリティ構成ガイド」で作成したエージェントノードのGeneralセクションにあります。
ENV_PRIVATE_KEYエージェントの秘密鍵。公開鍵/秘密鍵認証に必須です。
これは、「エージェント ID セキュリティ構成ガイド」でエージェントノードの公開鍵/秘密鍵認証情報を作成する際にアップロードした公開鍵に対応する秘密鍵です。
JWKS_ENDPOINTIDaaS JWKS エンドポイント。
形式は
https://xxx.aliyunidaas.com/api/v2/iauths_system/oauth2/jwksです。xxxは、「ステップ 2:IDaaS SDK の構成」の SDK 構成ファイルのissuerフィールドの対応する値に置き換えます。AGENT_AUDIENCEエージェントのオーディエンス。
「エージェント ID セキュリティ構成ガイド」で作成したエージェントノードのGeneralセクションにあります。
AGENT_SCOPEエージェントのスコープ。
「エージェント ID セキュリティ構成ガイド」で作成したエージェントノードのPermission Configurationセクションにあります。
ACCESS_IDENTITYエージェント ID モード:
Machine(マシン ID)またはHuman(ユーザー ID)。この例では
Machine(マシン ID)を使用します。これは、エージェントが独立して動作するシナリオに適しています。ダウンストリームサービスはエージェントのマシン ID を認識します。LLM_API_KEY_IDENTIFIER大規模言語モデル API キー識別子。
「エージェント ID セキュリティ構成ガイド」で作成したLarge Language Model (LLM)ノードにあります。
EXTERNAL_SERVER_API_KEY_IDENTIFIERサードパーティサービス API キー識別子。
「エージェント ID セキュリティ構成ガイド」で作成したExternal Serviceノードにあります。
ENTERPRISE_SERVICE_SCOPEエンタープライズサービスアクセススコープ(オーディエンス|スコープ)。
"オーディエンス|スコープ" 形式を使用します。二重引用符を必ず含めてください。
「エージェント ID セキュリティ構成ガイド」で作成したEnterprise ServiceノードのGeneralのオーディエンスと、Permission ConfigurationのPermission Identifierを参照してください。
EXTERNAL_SERVER_URLサードパーティサービスエンドポイント。
Amap MCP Server HTTP エンドポイントです。Model Studio プラットフォーム内のAmap MCP で確認できます。
ENTERPRISE_SERVICE_URLエンタープライズサービスエンドポイント。
これは、Function Compute にデプロイされたエンタープライズサービスのパブリックエンドポイントです。「3.2 JWT 認証の構成」で説明されているように、関数の詳細タブで、関数トポロジー図内のトリガーをクリックしてインターネットエンドポイントを確認します。
-
JAR ファイルの実行
ターミナルで次のコマンドを実行します。
java -Dcloud_idaas_config_path=cloud_idaas_config_for_computer.json -jar target/idaas-java-agent-id-demo-1.0.jar
AgentRun
-
エージェントサンプルコードのパッケージ化と圧縮
ターミナルで次のコマンドを実行します。
cd idaas-java-agent-id-demo mvn clean package cd ../ zip -r idaas-java-agent-id-demo.zip idaas-java-agent-id-demo/ -
実行ロールの作成
-
ナビゲーションウィンドウで、を選択します。
-
[ロール作成]をクリックします。[Principal Type]で[クラウドサービス]を選択します。[Principal Name]でFunction Compute (FC)を選択します。
-
ロール名を
sample-fc-roleに設定します。
-
エージェントの作成
-
Function Compute (FC) コンソールにログインします。
-
左側のナビゲーションウィンドウで、関数インテリジェンス > AgentRunを選択します。
-
ロール承認のプロンプトが表示されたら、承認をクリックします。これは初回のみ必要です。
-
エージェントの作成をクリックし、コードから作成を選択します。
-
コードソースでコードパッケージのアップロードを選択します。ランタイムでJava 17を選択します。
-
圧縮された
idaas-java-agent-id-demo.zipファイルをアップロードします。 -
次の起動コマンドを入力します。
java -Dcloud_idaas_config_path=classpath:cloud_idaas_config_for_agent_run.json -jar idaas-java-agent-id-demo/target/idaas-java-agent-id-demo-1.0.jar -
起動ポートに
9002を入力します。 -
環境変数を構成します。
パラメーター
説明
ソース
IDAAS_CLIENT_SECRETエージェントのクライアントシークレット認証情報。クライアントシークレット認証に必須です。
「エージェント ID セキュリティ構成ガイド」で作成したエージェントノードのGeneralセクションにあります。
ENV_PRIVATE_KEY
エージェントの秘密鍵。公開鍵/秘密鍵認証に必須です。
これは、「エージェント ID セキュリティ構成ガイド」でエージェントノードの公開鍵/秘密鍵認証情報を作成する際にアップロードした公開鍵に対応する秘密鍵です。
JWKS_ENDPOINTIDaaS JWKS エンドポイント。
形式は
https://xxx.aliyunidaas.com/api/v2/iauths_system/oauth2/jwksです。xxxは、「ステップ 2:IDaaS SDK の構成」の SDK 構成ファイルのissuerフィールドの対応する値に置き換えます。AGENT_AUDIENCEエージェントのオーディエンス。
「エージェント ID セキュリティ構成ガイド」で作成したエージェントノードのGeneralセクションにあります。
AGENT_SCOPEエージェントのスコープ。
「エージェント ID セキュリティ構成ガイド」で作成したエージェントノードのPermission Configurationセクションにあります。
ACCESS_IDENTITY
エージェント ID モード:
Machine(マシン ID)またはHuman(ユーザー ID)。この例では
Machine(マシン ID)を使用します。これは、エージェントが独立して動作するシナリオに適しています。ダウンストリームサービスはエージェントのマシン ID を認識します。LLM_API_KEY_IDENTIFIER大規模言語モデル API キー識別子。
「エージェント ID セキュリティ構成ガイド」で作成したLarge Language Model (LLM)ノードにあります。
EXTERNAL_SERVER_API_KEY_IDENTIFIERサードパーティサービス API キー識別子。
「エージェント ID セキュリティ構成ガイド」で作成したExternal Serviceノードにあります。
ENTERPRISE_SERVICE_SCOPEエンタープライズサービスアクセススコープ(オーディエンス|スコープ)。
"オーディエンス|スコープ" 形式を使用します。二重引用符を必ず含めてください。
「エージェント ID セキュリティ構成ガイド」で作成したEnterprise ServiceノードのGeneralのオーディエンスと、Permission ConfigurationのPermission Identifierを参照してください。
EXTERNAL_SERVER_URLサードパーティサービスエンドポイント。
Amap MCP Server HTTP エンドポイントです。Model Studio プラットフォーム内のAmap MCP で確認できます。
ENTERPRISE_SERVICE_URLエンタープライズサービスエンドポイント。
「3.2 JWT 認証の構成」で説明されているように、関数の詳細タブで、関数トポロジー図内のトリガーをクリックしてインターネットエンドポイントを確認します。
-
実行ロールとして、前に作成した
sample-fc-roleを選択します。 -
デプロイの開始をクリックします。
-
デプロイが完了したら、エージェントカードの[詳細]をクリックします。左側のナビゲーションウィンドウでバージョンとグレースケールを選択し、エンドポイントの作成をクリックします。
-
ステップ 5:クライアントのデプロイ
5.1 フロントエンド UI の構成
エージェントサンプルコードのfrontend/config.jsファイルを修正します。
window.APP_CONFIG = {
API_URL: 'http://localhost:9002/openai/v1/chat/completions',
IDAAS_AUTHORIZE_ENDPOINT: 'https://xxx.aliyunidaas.com/login/app/common/oauth2/authorize',
IDAAS_LOGOUT_ENDPOINT: 'https://xxx.aliyunidaas.com/login/app/common/oauth2/logout',
CLIENT_ID: '{client_id}',
SCOPE: 'https://agentserver.example.com|agent.access',
};
|
パラメーター |
説明 |
ソース |
|
|
エージェントサービスのリクエストパス。 |
ローカルデプロイ: AgentRun デプロイ: |
|
|
IDaaS 権限付与エンドポイント。 |
形式は以下のとおりです。
|
|
|
IDaaS ログアウトエンドポイント。 |
形式は以下のとおりです。
|
|
|
IDaaS で作成したClientのクライアント ID。 |
「エージェント ID セキュリティ構成ガイド」で作成したClientノードにあります。 |
|
|
アクセススコープ。形式: |
「エージェントIDセキュリティ設定ガイド」で作成したエージェントノードで、Generalの下にある |
5.2 フロントエンド UI の起動
ターミナルで次のコマンドを実行します(Node.js が必要です)。
cd frontend
npx http-server -p 9001
5.3 クライアントアプリケーションの構成
-
IDaaS EIAM コンソールに移動します。
-
左側のナビゲーションウィンドウで、Application Management > M2M Applicationをクリックします。
-
「エージェント ID セキュリティ構成ガイド」で作成したClientノードを特定し、Actions列のManageをクリックします。
-
Sign-Inタブをクリックします。Grant Typesセクションで、Implicit Modeチェックボックスをオンにします。
-
Implicit Mode Parametersで、Return Typeをtokenに設定します。
-
Redirect URIsに、フロントエンド UI の起動 URL:
http://127.0.0.1:9001/を入力します。 -
詳細設定を表示をクリックし、ログアウトコールバック URL にフロントエンド UI 起動 URL:
http://127.0.0.1:9001/を入力します。 -
構成を完了します。
ステップ 6:構成の検証
-
ローカルマシンのブラウザで
http://127.0.0.1:9001にアクセスします。 -
IDaaS アカウントでログインをクリックし、IDaaS アカウントでサインインします。
-
サインイン後、チャットボックスにテストプロンプトを入力します。例:
-
「現在の杭州の天気はどうですか?」:エージェントが Amap MCP ツールを呼び出して天気を照会します。
-
「私のエンタープライズサービスを呼び出してください」:エージェントがエンタープライズサービスツールを呼び出します。
-
エラー処理
|
症状 |
考えられる原因 |
解決策 |
|
アクセストークンの検証に失敗しました。 |
トークンの有効期限が切れているか、無効です。 |
再度ログインして、新しいアクセストークンを取得してください。 |
|
大規模言語モデル API キーの取得に失敗しました。 |
API キー識別子の構成が正しくありません。 |
|
|
エンタープライズサービスの呼び出しに失敗しました。 |
アクセストークンに必要なスコープが含まれていません。 |
|
|
JWT 認証に失敗しました。 |
JWKS 構成が正しくありません。 |
Function Compute トリガーの JWKS 構成が正しいことを確認してください。 |
|
SDK 構成の読み込みに失敗しました。 |
構成ファイルパスが正しくありません。 |
|
付録
AgentRun の OpenAPI 認証
AgentRun デプロイの場合、IDaaS はOpenAPI 認証方式をサポートしています。この方式を使用すると、クライアントシークレットや秘密鍵を構成せずに、実行ロールの STS トークンを使用して IDaaS OpenAPI を呼び出し、エージェントのアクセストークンを取得できます。
IDaaS SDK 構成の修正
src/main/resources/cloud_idaas_config_for_agent_run.jsonを修正し、openApiEndpointを追加し、authnConfigurationを変更します。他のフィールドは変更しません。
{
"idaasInstanceId": "idaas_xxx",
"clientId": "app_xxx",
"issuer":"https://xxx/api/v2/iauths_system/oauth2",
"tokenEndpoint": "https://xxx/api/v2/iauths_system/oauth2/token",
"scope": "api.example.com|read:file",
"openApiEndpoint":"eiam.[region_id].aliyuncs.com",
"developerApiEndpoint":"eiam-developerapi.[region_id].aliyuncs.com",
"authnConfiguration": {
"identityType": "CLIENT",
"authnMethod": "PLUGIN",
"pluginName": "alibabacloudPluginCredentialProvider"
}
}
詳細な手順については、「環境準備」をご参照ください。
実行ロールの構成
AgentRun 実行ロールには、IDaaS GenerateOauthToken OpenAPI を呼び出す権限が必要です。権限ポリシーの例は以下のとおりです。
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": "eiam:GenerateOauthToken",
"Resource": [
"acs:eiam:{regionId}:{accountId}:instance/{InstanceId}/application/{ApplicationId}"
]
}
]
}
{regionId}、{accountId}、{InstanceId}、および{ApplicationId}を、ご利用のリージョン ID、Alibaba Cloud アカウント ID、IDaaS インスタンス ID、およびエージェント ID に置き換えます。
権限ポリシーの作成および実行ロールへの付与方法については、「Alibaba Cloud OpenAPI 認証」をご参照ください。
AgentRun でサービスをデプロイする際は、上記のように SDK 構成を修正し、実行ロールを構成する必要があります。デプロイプロセスの他の手順はすべて同じです。