重要
この記事の一部の情報は、市販される前に大幅に変更される可能性があるプレリリース製品に関するものです。 Microsoft は、ここに記載された情報に関して、明示または黙示を問わず、いかなる保証も行いません。
この記事では、カスタム Security Copilot エージェントの機能を定義し、その構造、動作、運用ロジックを理解するのに役立つ主要コンポーネントの概念的な概要について説明します。
エージェント
Security Copilotのエージェントは、特定の目標を達成するために機能する自己完結型の半自律型の計算エンティティです。 これは、その環境を認識して反応し、意思決定を行い、その目的を満たすために結果を生み出す能力によって定義されます。 エージェントの設計では、大規模言語モデル (LLM)、接続されたツール (スキル)、またはその両方のいずれを使用する機能を決定することで、その目標を達成する方法についてエージェントに通知します。 エージェントの決定は、その入力と指示によって導かれます。これにより、エージェントが定義済みのロジックを使用したり、LLM にそれらの命令を解釈して操作するように求めたりする可能性があります。
エージェントはトリガーを介してアクティブ化され、エージェント実行が作成され、結果が達成されるまで各ステップ (またはタスク) が実行されます。 エージェントの実行全体を通じて、手順に基づいて、LLM または接続されたツールを利用してタスクを完了するかを決定します。
エージェントは、次の 2 つの選択方法のいずれかを使用して、LLM とエージェントの指示以外のツール、外部リソースと対話できます。
静的ツール: エージェント定義に記載されているように、エージェントが呼び出すために使用できる、個々のステップまたはエージェント全体の実行に使用できる固定のリソースセット。 このように定義されている場合、エージェント内の LLM は、定義されている以外のツールの呼び出しを決定できません。 これにより、速度とツールの結果の関連性が向上します。 定義済みのソースを呼び出す必要がある脅威インテリジェンス エージェントは、このように設計できます。
動的ツール: ツール呼び出しは、エージェントへのコンテキスト、推論、または入力に基づいて、エージェントの実行中に選択されます。 エージェントで使用できるツールは、実行時に導入できます。 エージェントの実行で発生した条件に対応する必要があるエージェントは、このように設計できます。 たとえば、エンティティをエンリッチするエージェントは、エージェントへの入力として提供されるエンティティの種類に基づいて異なる方法で実行できます。
開発者とSecurity Copilotユーザーは、エージェントの目標に基づいて、ツールの選択にどちらの方法を使用してもエージェントを設計できます。 また、この目標は、エージェントの結果が個人、チーム、またはorganizationに対応しているかどうかを通知するのにも役立ちます。 エージェントが ID を使用して実行される場合、結果のスコープと ID のアクセス許可を調整する必要があります。
単純なアラート トリアージ エージェントを構築する場合でも、複雑な調査のためにマルチエージェント システムを調整する場合でも、この記事では、ツールの選択とマニフェスト設計からSecurity Copilotエージェント フレームワークを操作して構成とガバナンスをトリガーするために必要な基本的な知識を提供します。
手順
指示は、エージェントが目標を定義し、意思決定を通知し、その結果を詳しく説明するための指示です。 たとえば、トリアージ エージェントに重大度の高いインシデントに集中するように指示したり、特定のルールに従う情報のみをプルするようにデータ エージェントをガイドしたりできます。 手順は、エージェントが正確で一貫性を保つのに役立ちます。
ツール
ツール (スキル) は、Security Copilot エージェントがその結果を完了するために呼び出すことができるエージェントの指示と LLM の外部からアクセスされるリソースです。 ツールは、従来のプログラミング言語の関数と考えてください。 名前と引数がいくつかあり、呼び出されると、適切に定義されたタスクが実行され、結果が返されます。
ユーザーは、特殊なタスクを実行したり外部システムと対話したりするために呼び出Security Copilot目的のツールを作成できます。
以下に例を示します。
「誰が登録したか」など、以前に見られないエンティティに関する解決または評判の質問に回答する
www.contoso.com?'"インシデント 1234 がユーザーに与える影響" などの顧客固有のデータに関する質問に回答する
'testaccount@contoso.com のアカウント パスワードをリセットする' などの外部システムと対話します。
SharePoint などのナレッジ ソースから顧客固有のナレッジを取得します。
プラグイン
新しいプロンプト、プロンプトブック、またはエージェント機能の作成に関連する場合に、ユーザーがSecurity Copilotで有効にできる関連ツールのコレクション。 エージェントの場合、プラグインはエージェントと LLM の外部のリソースにアクセスできるようにすることで、エージェントができることを拡張します。 たとえば、API を使用して評判検索などの外部サービスに接続するプラグインです。このプラグインの基になるツール定義は、評判スコア、関連するマルウェア、脅威インテリジェンスなどを返す可能性があります。
ツール形式
Security Copilot プラットフォームでは、さまざまなニーズに合わせてツール (スキル) を作成およびホストする複数の方法がサポートされています。 サポートされているスキルのいずれかを使用してエージェントを構築できます。 サポートされているツール形式は次のとおりです。
| ツール形式 | 最適な | ユース ケースの例 |
|---|---|---|
| API | 外部システムまたは内部システムの統合 | パスワード リセットの自動化、API からの脅威 intel のフェッチ、修復ワークフローのトリガー |
| GPT | 基になる LLM でネイティブに使用できない自然言語処理の定義を提供します。 | ドメイン固有の定義、インシデントを一意の形式で集計する |
| KQL | Microsoft データ ソースのクエリ (Microsoft Defender、Microsoft Sentinel) | サインイン ログを取得し、異常を検出する |
| エージェント | 大規模言語モデル (LLM) と子ツールを使用したマルチステップ ワークフローの調整 | 調査のために複数のツールをチェーンする URL のホスティング状況を理解します。 |
| MCP | MCP サーバーによって公開される動的なマルチツール統合。セキュリティ copilot は実行時にツールを検出します。 | MCP サーバーを介して、脅威 intel を集約するか、複数のツール間で修復を調整する。 |
エージェント定義
エージェント定義はエージェントのブループリントとして機能し、マニフェスト ファイルの重要なコンポーネントです。 これはマニフェストの最上位のキーの 1 つであり、エージェントのコア構成、機能、および動作を指定します。 次を指定します。
- 説明/メタデータの詳細 (名前、説明など)。
- エージェントの実行の原因となるイベントを記述するトリガー定義。
- エージェントが作業を完了するために使用する関連ツールまたはツール参照。
Security Copilot開発者は、作成したエージェント定義をアナリストが実行して結果を確認できます。
エージェント インスタンス
エージェント インスタンスは、特定のワークスペース内のエージェント定義のデプロイ済みバージョンです。 各インスタンス:
- 独自の ID または資格情報を保持します。
- インスタンス固有のメモリとフィードバックを格納します。
- 複数のテナントとワークスペースは、同じエージェント定義の独自のインスタンスを持つことができます。 1 つのインスタンスの構成の変更やメモリ更新は、他のインスタンスには影響しません。
マニフェスト
マニフェストは、エージェントの定義、ID、ツール、運用ロジックを構造化された YAML または JSON 形式で定義します。 従来のソフトウェア システムの構成ファイルと同様に、マニフェストは次を指定します。
- エージェントの固有の目的とタスク
- 一般的な運用ガイドライン
- 意思決定ロジック
- 呼び出す必要があるツール
- 実行中に呼び出される可能性があるその他のエージェント
マニフェストには、エージェントが使用できるメタデータ (エージェントの定義とスキル)、それらのスキルのグループ化方法、実行できるアクションが含まれます。 マニフェスト ファイルは、Security Copilot プラットフォーム上のエージェントのワークフローの一部としてパッケージ化され、デプロイされます。 SOC アナリストはこのプラットフォームを介してエージェントと対話し、エージェントはマニフェストの構成とツール ロジックに基づいてプロンプトまたはイベントに応答します。
注:
この例では、人間が読み取りやすく、コメントを含めることができるため、YAML 形式が一覧表示されていますが、どちらの形式でも同様に機能します。 JSON 形式は YAML 形式と同じですが、代わりに JSON 構文を使用します。
エージェント YAML
これは、サンプル manifest.yaml ファイルの例です。
Descriptor:
Name: Contoso.SecurityOperations.Samples-090925
Description: DCA URL Geolocation Agent
DisplayName: DCA URL Geolocation Agent
SkillGroups:
- Format: AGENT
Skills:
- Name: URL_Location_DCA_Agent_Entrypoint-090925
Description: The entrypoint into the URL Location Agent
Interfaces:
- Agent
Inputs:
- Required: true
Name: URL
Description: A URL the agent should investigate
Settings:
Model: gpt-4.1
Instructions: |
<|im_start|>system
You are an AI agent that helps a security analyst understand the hosting situation of a URL (the input).
You'll do this by following a three-step process:
1) Use ExtractHostname to find the hostname from the URL provided as input
2) Use GetDnsResolutionsByIndicators to extract IP Addresses that the hostname has been observed resolving to. This may produce a list of IP Addresses.
3) One-at-a time, use lookupIpAddressGeolocation to look up the geolocation of an IP address.
Produce a simply formatted response telling the security analyst which locations that URL is being served from.
If you encounter an error share that.
Always return something the user knows that something happened.
<|im_end|>
<|im_start|>user
{{URL}}
<|im_end|>
ChildSkills:
- lookupIpAddressGeolocation
- ExtractHostname_DCA-090925
- GetDnsResolutionsByIndicators
- Format: GPT
Skills:
- Name: ExtractHostname_DCA-090925
DisplayName: ExtractHostname_DCA-090925
Description: ExtractHostname_DCA-090925
Inputs:
- Name: URL
Description: A URL string
Required: true
Settings:
ModelName: gpt-4.1
Template: |-
<|im_start|>system
Return the hostname component of the URL provided as input. For example:
- If the input is 'https://www.mlb.com/', return 'www.mlb.com'
- If the input is 'http://dev.mycompany.co.uk/sign-up/blah?a=12&b=12&c=32#23', return 'dev.mycompany.co.uk'
- If the input is 'ftp:/x.espon.com', return 'x.espon.com'
<|im_end|>
<|im_start|>user
{{URL}}
<|im_end|>
- Format: KQL
Skills:
- Name: RecentUrlClicks_DCA-090925
Description: Returns 10 recently clicked URLs
Settings:
Target: Defender
Template: UrlClickEvents | sort by TimeGenerated desc | limit 10 | project Url
AgentDefinitions:
- Name: URLLocationAgent-090925
DisplayName: URLLocationAgent
Description: An agent to help an analyst understand URL hosting
Publisher: Contoso
Product: SecurityOperations
RequiredSkillsets:
- Contoso.SecurityOperations.Samples-090925
- ThreatIntelligence.DTI
- DCA_SampleAPIPlugin
AgentSingleInstanceConstraint: None
Settings:
- Name: LookbackWindowMinutes
Label: Max Lookback Window in minutes
Description: The maximum number of minutes to find clicked URLs
HintText: You should probably enter 5
SettingType: String
Required: true
Triggers:
- Name: Default
DefaultPeriodSeconds: 300
FetchSkill: Contoso.SecurityOperations.Samples-090925.RecentUrlClicks_DCA-090925
ProcessSkill: Contoso.SecurityOperations.Samples-090925.URL_Location_DCA_Agent_Entrypoint-090925
エージェントは、子スキルを呼び出す 3 つの手順に従います。
ExtractHostname: GPT ツールExtractHostname_DCA-090925を使用して、URL からホスト名を解析します。GetDnsResolutionsByIndicators: Microsoft Threat Intelligence スキル セットを使用して、ホスト名に関連付けられている IP アドレスを取得します。 [ソースの管理] > [カスタム] でプラグインを有効にする必要があります。GetDnsResolutionsByIndicatorsツールが呼び出されないRequiredSkillsets: ThreatIntelligence.DTIを追加する必要があることを確認します。lookupIpAddressGeolocation: OpenAPI 仕様のoperationIdです。これは、各 IP アドレスの位置情報データを検索するために API プラグインDCA_SampleAPIPluginで参照されます。 リファレンスについては、「 ビルド API サンプル」を参照してください。
トリガー
トリガーとは、エージェントのワークフローを開始するトリガーです。 手動で開始することも、スケジュールに従って実行するように設定することもできます。 トリガーがアクティブになると、エージェントはそのプランに従い、アクションを自動的に実行します。
エージェントは、構造化されたアクション 計画に基づいて動作し、その計画に対して実行します。 たとえば、フィッシングトリアージ エージェントは、事前に構成された機能のセットから呼び出すツールやその他のエージェントを決定できます。 トリガーで定義されている FetchSkill や ProcessSkill などのツールは、タスクの実行をガイドするエージェントのワークフローへのエントリ ポイントとして機能します。
次の例では、
Triggers:
- Name: Default
DefaultPeriodSeconds: 300
FetchSkill: Contoso.SecurityCopilot.Samples-090925_1b.RecentUrlClicks_DCA-090925_1b
ProcessSkill: Contoso.SecurityCopilot.Samples-090925_1b.URL_Location_DCA_Agent_Entrypoint-090925_1b
Settings:
1.5 分ごとに、 RecentUrlClicks_DCA-090925_1b が呼び出されて新しいデータが取得されます。
2.その後、返された各アイテムで ProcessSkill URL_Location_DCA_Agent_Entrypoint-090925_1b が呼び出され、データに対して動作します。
これらの各サイクルはトリガー実行であり、ProcessSkill の各呼び出しはトリガー実行です。 これらのスキル呼び出しは、エージェント インスタンスとトリガーに関連付けられているセッションで実行され、エージェントの関連付けられた ID を使用します。
FetchSkill と ProcessSkill
FetchSkill
エージェントの実行でトリガーがアクティブ化されると、構成されている場合は FetchSkill によってデータが収集されます。 ProcessSkill は、実行中にそのデータに対するエージェントの動作を定義します。 データがフェッチされると、ProcessSkill が引き継ぎ、そのデータを入力として使用して特定のアクションまたは分析を実行します。 これら 2 つのコンポーネントは、動的なデータドリブン ワークフローを有効にするために連携して機能します。 FetchSkill 値が設定されている場合、トリガーは最初に FetchSkill を呼び出します。
重要
フェッチと ProcessSkills は、スキルセットによって名前空間化する必要があります。 形式 Skillset name.Skill nameに従う必要があります。
トリガーの例では、 Skill name が RecentUrlClicks_DCA。
Skillset nameは Descriptor.name です (たとえば、Contoso.SecurityCopilot.Samples-090925_1b)。 そのため、完全修飾スキル名は Contoso.SecurityCopilot.Samples-090925_1bです。RecentUrlClicks_DCA。
ProcessSkill
FetchSkill が定義されている場合、出力オブジェクトごとに、ProcessSkill の入力として出力値を使用して ProcessSkill が呼び出されます。 FetchSkill が定義されていない場合、ProcessSkill が呼び出されます。
{
[
{
"Incident": 1,
"name": "Item One",
"created_at": "2024-02-17T12:34:56Z"
},
{
"Incident": 2,
"name": "Item Two",
"created_at": "2024-02-17T12:35:30Z"
},
{
"Incident": 3,
"name": "Item Three",
"created_at": "2024-02-17T12:36:10Z"
}
]
}
この例では、ProcessSkill は、 Incident、 name、 created_at を入力として 3 回呼び出されます。
ワークスペース
作業用のコンテナー。 エージェントは、ワークスペースのコンテキスト内で動作します。 ワークスペースは、アクセス、構成、消費、およびデータ処理の制御単位を提供します。
メモリ
メモリを使用すると、エージェントは対話の間でコンテキストを保持し、よりインテリジェントでパーソナライズされた応答を可能にします。 エージェントは、過去のアクション、ユーザー設定、インシデント履歴などの関連情報を格納することで、継続性を提供し、時間の経過と同時に意思決定を改善できます。