
インターネットは広大で、今この瞬間も拡大を続けています。2025年中頃の時点で、ホストされているWebサイトは12億5,000万件を超え、年間およそ149ゼタバイトのデータが生み出されています。トラフィックの半分以上はすでにボット由来であり、その多くは悪意あるものです。こうした状況下で、企業のデジタルフットプリントを守ることの重要性はかつてなく高まっています。
DoiTでは、**Attack Surface Management(ASM)**を専門とするお客様と協業し、最新のAIでこのプロセスをどこまで自動化・スケールできるかを検証しました。目標は、Webを巡回してクライアントの公開資産を分析し、潜在的な脆弱性を特定するエージェントを、すべてAWS上で動かすことです。
ソリューションの設計
Amazon BedrockとStrands Agentsを基盤に、推論モデル、ブラウザ自動化、検索拡張生成(RAG)、本番運用レベルのオブザーバビリティを組み合わせたシステムを設計しました。
主要なAWSコンポーネントは次のとおりです。

これらを組み合わせた全体像はこちらです。

次のセクションから、それぞれを少し掘り下げて見ていきましょう。
推論モデルとエージェントフレームワーク
まずは土台となる、エージェントが「考える」仕組みから見ていきます。AWS Bedrockでは、AmazonのNovaファミリーやAnthropicのClaude、さらにMistral、DeepSeek、Llamaといったオープンソースモデルなど、高度な推論モデルに手軽にアクセスできます。これらはchain-of-thought形式の推論に対応しており、エージェントは結論や行動に至るまでの中間的な「思考」ステップを生成できます。各ブラウジング操作と観察結果は前のステップを土台として積み上がっていくため、この推論能力は欠かせません。
オーケストレーションにはStrands Agentsを採用しました。推論・ツール利用・応答生成というサイクルを中核としたエージェントループを、洗練された形で抽象化してくれます。Bedrockのモデルとシームレスに統合でき、セッション状態管理、マルチエージェント連携、コンテキスト管理など、本番運用に耐える機能が一通りそろっています。
Strandsを使うとエージェント開発がいかにシンプルになるか、実際のコードを少しだけお見せします。

このループにより、エージェントは自律的にブラウジングし、得られた情報を踏まえて推論し、ステップ間で状態を保持できます。
ツールとMCPによるアクション
とはいえ、推論だけでは十分ではありません。エージェントは外の世界とやり取りできなければならないからです。
ツール連携はModel Context Protocol **(MCP)**で実現しました。LLMを外部システムに接続するためのオープン標準で、各MCPサーバーは「ツール」のカタログを明確な定義とスキーマとともに公開し、エージェントは実行時にそれらを動的に呼び出せます。
今回のユースケースでは、3つのツールソースを組み合わせました。
- retrieve:脆弱性データベースに対するセマンティック検索用。
- Playwright MCP:Webブラウジングおよびサイト操作用。
- Filesystem MCP:シンプルな永続ストレージとログ記録用。
開発を進めていた2025年8月、AWSはAgentCoreを発表しました。AgentCoreには独自のBrowser Toolが付属しており、Playwrightインフラを自前で運用する必要がなくなります。IAM統合とCloudTrailによるオブザーバビリティを備えたフルマネージドの隔離されたブラウザ環境が提供され、既存のコードに無理なく組み込めました。

Strandsのモジュール性のおかげで、セルフホストのブラウザツールから、よりセキュアでスケーラブルなマネージドサービスへの切り替えはあっけないほど簡単でした。
Bedrock Knowledge Basesによるグラウンディング
エージェントが現実のデータに基づいて推論できるよう、既知の脆弱性のリポジトリであるCVE™ Programデータベースをグラウンディングのソースに据えました。
Amazon Bedrock Knowledge BasesにCVEデータセットをアップロードすると、AWSが自動的にチャンク分割、エンベディング生成、OpenSearch Serverlessへのインデックス化までを行い、すぐにクエリ可能な状態にしてくれます。
retrieveツールを介して、エージェントは実行時にこのベクトルストアにクエリを発行し、対象となるクライアント資産に関連する最新の脆弱性情報を参照できます。Bedrock Knowledge Basesのマネージドな取り込み・検索パイプラインのおかげで、独自にRAGフローをゼロから構築するのに比べて、エンジニアリング工数を大幅に削減できました。
AWSへのエージェントのデプロイ
ローカルでプロトタイプを検証した後、2種類のマネージドランタイムを使って本番環境に展開しました。
1. AWS Fargate
Dockerでパッケージ化し、AWS CDKでオーケストレーションするコンテナデプロイです。スケーリングやネットワーキングを細かく制御でき、独自要件がある場合や(MCPサーバーのような)特殊な依存関係を抱えている場合に最適です。
2. Amazon Bedrock AgentCore
AgentCoreはさらに高レベルの抽象化を提供します。エージェントとその設定を定義するだけで、AWSが代わりに実行してくれます。
主にファイルシステムストレージからStrandsの状態管理への切り替えなど、わずかなコード調整を行うだけで、同じエージェントをフルマネージドで動かせました。CDKやVPCの設定は不要で、AgentCoreスターターキットのagentcore configureとagentcore launchを実行するだけです。素早く反復開発したい、運用負荷を最小に抑えたい、という用途では他に並ぶものがないアプローチでした。
オブザーバビリティと評価
エージェントの挙動を監視することは、設計そのものと同じくらい重要です。
外部の分析ツールを使いたいチームには、LangFuseがOpenTelemetry経由で手軽に組み込めます。ループ、モデル呼び出し、ツール実行の詳細なタイムラインが得られ、エージェントが何を「考えて」いて、どのツールを選んでいるかをステップ単位で把握できます。デバッグや継続的な改善には欠かせない情報です。
AgentCoreのリリース後は、AgentCore Observabilityも利用できるようになりました。CloudWatchとシームレスに統合され、CloudWatchにはGenAI Observabilityダッシュボードも用意されているため、すべての呼び出しにわたってトレース・メトリクス・ログを収集できます。トークン使用量やエラー率を可視化し、セッションを掘り下げて確認することで、LLMの推論というブラックボックスを測定可能なデータへと変えられます。
DoiT Cloud Intelligenceでエージェントのコストを把握する
オブザーバビリティと表裏一体のテーマとして、本番デプロイ前にコストへの影響を把握しておくことも欠かせません。
DoiTでは、**DoiT Cloud Intelligence™**プラットフォームの一機能としてGenAI Lensを提供しており、生成AI workloadsの支出パターンを分析できます。
Amazon Bedrockに加え、AnthropicやOpenAIとも直接連携し、どのモデルやworkloadsがコストを押し上げているかを可視化します。
さらに踏み込んだ分析には、DataHubを使ってアプリケーションに直接データ取り込みを組み込めます。ラベリングとカスタムダッシュボードを活用すれば、ドメイン別・顧客別のコスト追跡はもちろん、_発見した脆弱性1件あたりのコスト_まで算出可能で、セキュリティの知見を測定可能なROIへと変換できます。
今後の展望
データ取り込みから推論、オブザーバビリティに至るまで、AWSのエコシステムはこの自律型ASMエージェントを実現するためのビルディングブロックをひと通り揃えてくれました。セキュアかつスケーラブルに、しかも最小限のインフラ管理で構築でき、AgentCoreがGAになった今、その傾向はさらに強まっています。
testphp.vulnweb.comでテストを実施したところ、本システムはSQLインジェクション、反射型および格納型XSS、認証バイパス、さらにはサイトの実害を伴う侵害シナリオまで検出できることを確認しました。これらの結果から、エージェントがWebフローを自律的に巡回し、ペイロードを投入し、実行結果のエビデンスを解釈し、CVEデータベースと突き合わせるという一連の流れを、ほぼ人手を介さずに行えることが実証されました。技術的な精度のみならず、自律的な推論をリアルタイム検索とオブザーバビリティで補強することで、生の脆弱性スキャン結果を構造化された説明可能なインテリジェンスへと昇華できる、その価値も示せたと考えています。
今後の発展余地もまだまだあります。レポーティング機能の洗練、既知のベンチマークでの性能評価、追加の脆弱性データベースとの統合などです。しかし現時点でも、本プロジェクトはAWS Bedrock + Strands Agentsの組み合わせが、生成AIの可能性をサイバーセキュリティ領域での実用価値へと結び付けられることを示しています。
ソースコードと実装の詳細はすべてGitHubで公開しています。より詳しい解説版はこちらからご覧いただけます。
—
FinOpsの取り組みをもっとスムーズに。doit.com/servicesからお気軽にご相談ください。