Live:CloudOps Webinars & Hands-on Workshops ·Register ↗
メインコンテンツまでスキップ

AWS 上の AI ワークロードのモニタリングと監査

はじめに

AWS 上の最新の AI ワークロードは、3 つの独立したパイプラインにわたってテレメトリを生成します。CloudTrail(誰が何を呼び出したか)、Bedrock Model Invocation Logging(モデルが何を返したか)、そして ADOT SDK によって収集される Agent Telemetry(エージェントがどのように動作したか)です。各パイプラインはそれぞれ不可欠です。CloudTrail 単体では、IAM ロールが InvokeModel を呼び出したことは確認できますが、そのロールがモデルに何を要求したか、またはエージェントがどのように応答したかは記録されません。モデル呼び出しログはコンテンツをキャプチャしますが、エージェントのオーケストレーションはキャプチャしません。ADOT はオーケストレーションをキャプチャしますが、推論パラメータや IAM アイデンティティはキャプチャしません。セキュリティおよび運用上の調査では、ほぼ常に少なくとも 2 つを相関させる必要があります。

このガイドでは、以下の方法で AI ワークロードの完全なモニタリングと監査のストーリーを構築する方法を説明します。

  1. 3 つのテレメトリパイプラインをすべて有効化する — このガイドでの簡単なセットアップと、詳細については各コンパニオンガイドへのディープリンクを提供します。
  2. CloudTrail に基づく検出ルールを構築する — セキュリティおよび監査サーフェスに対するメトリクスフィルター、アラーム、および Contributor Insights ルール。Bedrock と AgentCore の両方のデータイベントをカバーします。
  3. クロスパイプライン相関クエリを実行する — CloudTrail と Bedrock モデル呼び出しログおよび ADOT スパンを結合し、単一のパイプラインだけでは回答できない問いに答えます。

生成 AI セキュリティスコーピングマトリックスエージェント型 AI セキュリティスコーピングマトリックスは、監査とログ記録、ID コンテキスト、エージェンシー境界、データ保護など、AI アプリケーションを構築する際に組織が対処すべきセキュリティ上の側面を定義しています。このガイドでは、CloudTrail、CloudWatch、およびクロスパイプライン相関を使用して、これらの側面に対する具体的な実装方法を提供します。以下のタブは、各マトリックスの側面をそれを実装するガイドのセクションにマッピングしています。

ディメンションガイドセクション
アイデンティティ — ユーザー、サービス、エージェントのアイデンティティ管理AgentCore Identity & Credentials (グループ 2)クエリ 4クエリ 12クエリ 14メトリクスフィルター 7メトリクスフィルター 18
データ — 永続メモリと状態のセキュリティAgentCore Memory & Evaluation (グループ 4)クエリ 16メトリクスフィルター 19
監査とログ記録 — アクションレベルのエージェントアクション追跡3 つのテレメトリパイプラインセキュリティアナリティクスクロスパイプライン相関メトリクスフィルターコントリビューターインサイト
ガードレール — 動作監視、サンドボックス化、分離AgentCore Built-in Tools (グループ 1)クエリ 8クエリ 21クエリ 26クエリ 27メトリクスフィルター 4メトリクスフィルター 17メトリクスフィルター 24メトリクスフィルター 25
スコープ — 運用境界と制約評価ネットワークアクティビティイベントクエリ 4クエリ 9クエリ 26メトリクスフィルター 9メトリクスフィルター 10メトリクスフィルター 24
オーケストレーション — エージェントとシステムの相互作用およびフロー制御AgentCore Runtime & Gateway (グループ 3)クエリ 15クエリ 17クエリ 19クエリ 23クエリ 24メトリクスフィルター 21メトリクスフィルター 22
Shared Responsibility Model

AWS は、CloudTrail、CloudWatch、および Bedrock サービスを実行するクラウドインフラストラクチャのセキュリティに責任を負います。お客様は、イベントセレクターの設定、検出ルールの作成、アラームしきい値の設定、セキュリティイベントへの対応など、クラウド内のセキュリティに責任を負います。このガイドでは、AI ワークロードに対するお客様の設定および監視の責任に焦点を当てています。詳細については、AWS 責任共有モデルを参照してください。

3 つの複合的な課題

ボリューム — AI モデルの呼び出しは、大量のイベントを生成する可能性があります。正確なイベントセレクターと集約がなければ、大量のイベントの中から関心のあるイベントを分離することが難しく、すべてをキャプチャするコストは非常に高くなります。

スピード — エージェントが開始するアクティビティシーケンスは、数秒以内に複数の API 呼び出し、ツールの呼び出し、モデルとのインタラクションを伴う場合があります。ニアリアルタイムの検出ルールは、運用上の異常が発生した時点により近いタイミングで検出を可能にし、より迅速なトリアージと平均調査時間の短縮をサポートします。

複雑性: - AI ワークロードのアクティビティは複数の AWS サービスにまたがっています。単一のログソースで完全な可視性を提供することはできません。調査が実際に行われるのは、パイプライン全体での相関分析においてです。

このガイドの内容

  • 3 つのテレメトリパイプラインと、それぞれが固有にキャプチャする内容
  • 3 つすべての有効化(CloudTrail の詳細、他の 2 つは簡単な手順とディープリンク)
  • CloudTrail 固有の検出:Bedrock と AgentCore データイベントの両方に対するメトリクスフィルター、アラーム、Contributor Insights
  • AgentCore データイベント:ゲートウェイトラフィック、組み込みツールの使用状況、認証情報アクセス、メモリ操作、ランタイムアクティビティ
  • 調査のためのクロスパイプライン相関クエリ
  • 3 つのデータソースすべてを組み合わせた統合ダッシュボード

GenAI テレメトリの全体像:3 つの補完的なパイプライン

CloudTrail は、AWS 上の AI ワークロードに対して完全なオブザーバビリティを提供する 3 つのテレメトリパイプラインのうちの 1 つです。それぞれが異なるデータをキャプチャし、異なる目的を果たし、異なる方法で有効化されます。セキュリティ調査では、ほぼ常に少なくとも 2 つを相関させる必要があります。

Three GenAI Telemetry Pipelines

パイプラインキャプチャする内容ロググループ主な用途
CloudTrail誰が何をしたか — すべての API 呼び出し、呼び出し元 ARN、送信元 IP、エラーコード、アクセス拒否、コントロールプレーンの変更YOUR_CLOUDTRAIL_LOG_GROUPセキュリティ監査、アクセス調査、設定変更の追跡
Bedrock Model Invocation Loggingモデルが何を返したか — 完全なプロンプト、完全なレスポンス、推論パラメータ(temperature、max_tokens)、呼び出し元 IAM アイデンティティ、トークン数bedrock-model-invocation-loggingコンテンツ監査、コンプライアンス、プロンプト品質のデバッグ、コスト配分
Agent Telemetry (AWS Distro for OpenTelemetry — ADOT によって収集)エージェントがどのように動作したか — モデル呼び出しのレイテンシー、ツールの実行、分散トレースの相関、セッション追跡aws/spans, /aws/bedrock-agentcore/runtimes/<agent>運用モニタリング、パフォーマンスデバッグ、エージェントワークフローのオブザーバビリティ

各パイプラインが単独で答えること

CloudTrail だけでわかること:

  • どの IAM アイデンティティが InvokeModel を呼び出したか?
  • 送信元 IP、ユーザーエージェント、およびリージョンは何でしたか?
  • 呼び出しは拒否されましたか(AccessDenied、UnauthorizedOperation)?
  • 誰かがガードレールを変更したり、ログ記録を停止したり、IAM 権限を昇格させましたか?
  • どの VPC エンドポイントが呼び出しをブロックしましたか?

モデル呼び出しログだけでわかること:

  • モデルに送信されたプロンプトは何ですか?
  • モデルは何を返しましたか?
  • 使用された temperature と max_tokens は何ですか?
  • 呼び出しで消費された入力トークンと出力トークンの数は何ですか?
  • レスポンスは切り捨てられましたか(stop_reason = max_tokens)?

エージェントテレメトリ (ADOT SDK) だけでわかること:

  • モデルの呼び出しにどれくらいの時間がかかりましたか(クライアント側のレイテンシー)?
  • エージェントはどのツールをどの順序で呼び出しましたか?
  • ツールが失敗しましたか?また、どのコンポーネントがエラーを引き起こしましたか?
  • エージェントセッションは複数のモデル呼び出しにわたってどのように連鎖していますか?

相関関係が調査を解き明かす場所

相関のみが答えられる質問

調査の問い結合するパイプライン結合キー
誰がモデルにこの質問をし、モデルは何と答えたか?CloudTrail(呼び出し元)+ Model Invocation Logging(プロンプト/レスポンス)requestId
エージェントが失敗したのは、モデルの問題、ツールの問題、それとも権限の問題が原因か?ADOT スパン(コンポーネントのレイテンシー/エラー)+ CloudTrail(AccessDenied イベント)session + time
これらの安全でないモデルレスポンスの直前に、ガードレールが弱められたか?CloudTrail(UpdateGuardrail イベント)+ Model Invocation Logging(レスポンス内容)timestamp
エージェントロールは最小権限に違反する Bedrock 呼び出しを行っているか?CloudTrail(引き受けたロールからのクロスサービス AccessDenied)+ ADOT(エージェントセッション ID)session + time
どの外部呼び出し元が Gateway を通じてこのエージェントをトリガーし、エージェントはどの認証情報を使用したか?CloudTrail Gateway データイベント(JWT サブジェクト、送信元 IP)+ CloudTrail 認証情報データイベント(TokenVault/OAuth2 アクセス)time + agent runtime ARN
エージェントが意図したスコープ外でコードを実行したり Web サイトを閲覧したりしているか?CloudTrail AgentCore ツールデータイベント(CodeInterpreter/Browser)+ ADOT スパン(エージェントセッションコンテキスト)session + time

クロスパイプライン相関クエリセクションでは、これらのシナリオに対応する実際の JOIN クエリを紹介しています。 :::

実装の概要

3 つのパイプラインをすべて有効化し、その上に検出と相関を重ねていくフェーズ型のロールアウトです。

フェーズ 1: Observability Pipelines を有効にする

2 つのオブザーバビリティパイプライン(Bedrock Model Invocation Logging と ADOT SDK によって収集される Agent Telemetry)から始めます。これらはすぐに有効化でき、相関クエリを可能にするものです。CloudTrail のセットアップはフェーズ 2 で行います。

Pipeline A: Bedrock モデル呼び出しログ記録

すべての Bedrock モデル呼び出しに対して、完全なプロンプト、レスポンス、推論パラメータ、および呼び出し元の IAM アイデンティティをキャプチャします。手動オプトインのみ。(モデルのインタラクションをキャプチャしてデータ主権要件およびコンプライアンス監査ワークフローをサポートすることで、生成 AI セキュリティスコーピングマトリックスのガバナンスとコンプライアンスディメンションを実装します。)

  1. Amazon Bedrock コンソールを開きます
  2. 設定モデル呼び出しログ記録を選択します
  3. ログ記録を有効にし、送信先として CloudWatch Logs(および/または S3)を選択します
  4. ロググループ名(デフォルト: bedrock-model-invocation-logging)とサービスロールを設定します

詳細な設定、PII マスキング、およびダッシュボードのセットアップについては、AWS での GenAI Observability を参照してください。

パイプライン B: エージェントテレメトリ (ADOT SDK によって収集)

エージェントのオーケストレーション、分散トレース、およびツールの実行をキャプチャします。

  • AgentCore: デフォルトでランタイムに ADOT SDK が含まれており、テレメトリが aws/spans および /aws/bedrock-agentcore/runtimes/<agent> に自動的に送信されるため、操作は不要です
  • EKS/ECS/セルフホスト型: ADOT 自動インストルメンテーションエージェントをワークロードにアタッチします。コードの変更は不要です。

CloudWatch Transaction Search を有効にすることで、Application Signals のフル機能をご利用いただけます。

詳細な有効化手順については、GenAI Observability on AWS — エージェント型ワークロードの Observability の有効化およびAgentCore Observability クイックスタートを参照してください。

フェーズ 2: CloudTrail を有効化する — Bedrock から開始し、カバレッジを拡大して CloudWatch に取り込む

CloudTrail を設定して、最も価値の高いリソース(Bedrock)から始めて外側に拡張しながら、AI ワークロードの完全な監査サーフェスをキャプチャします。すべてを CloudWatch Logs に配信して、パイプライン A および B と結合できるようにします。

ステップ 1: Bedrock および AgentCore のデータイベントと管理イベント

トレイルで Bedrock データイベントを有効化するには、高度なイベントセレクターを使用します。これらのオペレーションはデフォルトではログに記録されません。Amazon Bedrock データイベントを参照してください。

Bedrock resource types to enable
カテゴリリソースタイプ
エージェントとオーケストレーションAWS::Bedrock::AgentAlias, AWS::Bedrock::InlineAgent, AWS::Bedrock::FlowAlias, AWS::Bedrock::FlowExecution, AWS::Bedrock::Session
モデル呼び出しAWS::Bedrock::Model, AWS::Bedrock::AsyncInvoke, AWS::Bedrock::PromptVersion, AWS::Bedrock::AdvancedOptimizePromptJob
安全性とガードレールAWS::Bedrock::Guardrail, AWS::Bedrock::AutomatedReasoningPolicy, AWS::Bedrock::AutomatedReasoningPolicyVersion
ナレッジと RAGAWS::Bedrock::KnowledgeBase, AWS::Bedrock::Tool
データ自動化AWS::Bedrock::DataAutomationProject, AWS::Bedrock::DataAutomationInvocation, AWS::Bedrock::DataAutomationProfile, AWS::Bedrock::Blueprint

高度なイベントセレクターを使用して AgentCore Data Events を有効化します。 Amazon Bedrock AgentCore Data Events を参照してください。

AgentCore resource types to enable
カテゴリリソースタイプ
ランタイムとゲートウェイAWS::BedrockAgentCore::Gateway, AWS::BedrockAgentCore::Runtime, AWS::BedrockAgentCore::RuntimeEndpoint
組み込みツールAWS::BedrockAgentCore::CodeInterpreter, AWS::BedrockAgentCore::Browser
ID と認証情報AWS::BedrockAgentCore::WorkloadIdentity, AWS::BedrockAgentCore::TokenVault, AWS::BedrockAgentCore::OAuth2CredentialProvider, AWS::BedrockAgentCore::APIKeyCredentialProvider
メモリと評価AWS::BedrockAgentCore::Memory, AWS::BedrockAgentCore::Evaluator

今後利用可能になる追加の AgentCore リソースタイプも含まれます。

管理イベントの確認 (読み取りと書き込み) がすべてのリージョンで有効になっていることを確認してください — これにより InvokeModelConverse が管理イベントとして自動的にキャプチャされ、CreateGatewayCreateGatewayTarget などの AgentCore 管理イベントもキャプチャされます。詳細については、CloudTrail 管理イベントを参照してください。

CloudTrail Insights を有効にする (ApiCallRateInsight および ApiErrorRateInsight) は異常検出に使用されます。CloudTrail Insights イベントを参照してください。

ステップ 2: S3、Lambda、およびネットワークアクティビティへの拡張

  • トレーニングデータ、モデルアーティファクト、CI/CD パイプラインバケットに対して Amazon S3 データイベント(書き込み専用)を有効にします。Amazon S3 と Lambda データイベントを参照してください。
  • 開発/テストを除く本番 AI パイプライン関数に対して Lambda データイベントを有効にします。Amazon S3 と Lambda データイベントを参照してください。
  • Bedrock、S3、Lambda VPC エンドポイントに対して、VpceAccessDenied をターゲットとするネットワークアクティビティイベントを有効にします。CloudTrail ネットワークアクティビティイベントを参照してください。

ステップ 3: CloudWatch Logs への配信

フェーズ 3: CloudTrail での検出ルールの構築

  • CloudTrail イベント(未承認の Bedrock アクセス、ガードレールの変更、ログの中断)のメトリクスフィルターを作成します。メトリクスフィルターを参照してください。
  • 各メトリクスフィルターに SNS 通知ターゲットを設定した CloudWatch アラームを作成します。CloudWatch アラームを参照してください。
  • 上位の IAM アイデンティティとソース IP を特定するための Contributor Insights ルールを作成します。Contributor Insights ルールを参照してください。

フェーズ 4: クロスパイプライン相関クエリの構築

  • CloudTrail の標準的な検出のための CloudWatch Logs Insights クエリを開発します。セキュリティ分析を参照してください。
  • CloudTrail と Bedrock Model Invocation Logging および ADOT スパンを組み合わせたクロスパイプライン JOIN クエリを構築します。クロスパイプライン相関クエリを参照してください。
  • セキュリティおよびオペレーションアナリストが繰り返し使用できるよう、検証済みクエリを保存します。

フェーズ 5: イベント集約による最適化

  • CloudTrail イベント集約を有効にする (API_ACTIVITY, RESOURCE_ACCESS, USER_ACTIONS テンプレート) を使用して、生データイベントと並行して 5 分間のサマリーを作成します。CloudTrail データイベント集約を参照してください。
  • CloudWatch Subscription Filters を使用して、管理イベントと集約イベントのみをダウンストリーム SIEM に転送し、インジェスト量を削減します。

フェーズ 6: 統合ダッシュボードの組み立て

  • CloudTrail アラーム、Contributor Insights ウィジェット、モデル呼び出しログコストウィジェット、ADOT パフォーマンスウィジェット、および相関クエリ結果を単一のペインに組み合わせた CloudWatch ダッシュボードを構築します。統合監査 & モニタリングダッシュボードを参照してください。

Amazon Bedrock データイベント

デフォルトでは、CloudTrail はアカウントの管理イベントをログに記録しており、これにより一般的な Bedrock ランタイム呼び出しがすでにキャプチャされます。例えば、 InvokeModel, Converse、および ConverseStream多くの重要な AI ワークロード操作がデータイベントとして記録されます。これには、エージェントの呼び出し、ナレッジベースの取得、フローの実行、ガードレールの適用、双方向ストリーミング、非同期呼び出し、プロンプトのレンダリングが含まれます。これらの操作には、トレイルの高度なイベントセレクターが必要です。データイベントにより、セキュリティチームはモデルの呼び出しを可視化できます。適用する具体的なセレクターについては、以下のBedrock の高度なイベントセレクターを参照してください。

監視すべき主要な API

以下の表は、どの Bedrock API が自動的にキャプチャされ、どれがトレイルの高度なイベントセレクター設定を必要とするかを示しています。

APIイベント名重要な理由
InvokeModelInvokeModelどの IAM アイデンティティがいつファウンデーションモデルを呼び出しているかを追跡します。
ストリーミング呼び出しInvokeModelWithResponseStream長文生成タスクのストリーミングモデルインタラクションをキャプチャします。
会話型 AIConverse / ConverseStreamファウンデーションモデルに対するマルチターンの会話型 AI アクティビティを記録します。
非同期呼び出しの一覧表示ListAsyncInvokes非同期呼び出しジョブの一覧表示を監視します。
Important

InvokeModelConverse、および ConverseStream は管理イベントとしてログに記録されるため、管理イベントのログ記録が有効になっているすべてのトレイルでデフォルトでキャプチャされます。ただし、エージェントの呼び出し、ナレッジベースの取得、フローの呼び出し、ガードレールの適用、プロンプトのレンダリング、非同期呼び出し、双方向ストリーミング、セッションアクティビティ、フロー実行、自動推論、データオートメーション、ブループリント操作、高度なプロンプト最適化、およびツール操作は、トレイル上の対応する Bedrock リソースタイプに対して高度なイベントセレクターを設定した場合にのみログに記録されます。設定についてはBedrock の高度なイベントセレクターを参照し、サポートされているリソースタイプの完全なリストについてはAmazon Bedrock CloudTrail ドキュメントを参照してください。

Bedrock の高度なイベントセレクター

以下の高度なイベントセレクターを使用して、CloudTrail トレイルで Bedrock データイベントをキャプチャします。各 Bedrock リソースタイプには独自のセレクターが必要であり、各セレクターは resources.ARN プレフィックスを使用してログ記録を特定のリソースにスコープする必要があります。これにより、リソースタイプごとに 1 つずつ、18 個の個別のセレクターが設定されます。ほとんどのセレクターは、アカウントにスコープされた resources.ARN プレフィックスとともに eventCategory = Data でフィルタリングします。Model および AsyncInvoke セレクターは、基盤モデルの ARN が AWS 所有でありアカウント ID を含まないため、代わりに eventName フィルタリングを使用します。

警告

以下のセレクターはです。プレースホルダーを置き換えずに適用しても、イベントはキャプチャされません。

Bedrock placeholder reference
プレースホルダー置き換える値確認場所
ACCOUNT_ID12 桁の AWS アカウント IDAWS コンソール右上のメニュー
REGIONAWS リージョン(例: us-east-1コンソールのリージョンセレクター
AGENT_ID / ALIAS_IDエージェント ID とエイリアス IDBedrock コンソール → Agents
KB_IDナレッジベース IDBedrock コンソール → Knowledge bases
FLOW_IDフロー IDBedrock コンソール → Prompt flows
GUARDRAIL_IDガードレール IDBedrock コンソール → Guardrails
PROMPT_IDプロンプト IDBedrock コンソール → Prompt management
POLICY_ID自動推論ポリシー IDBedrock コンソール → Automated reasoning
PROJECT_IDデータ自動化プロジェクト IDBedrock コンソール → Data automation
TOOL_IDBedrock ツール IDBedrock コンソール → Tools
BEDROCK_EXECUTION_ROLE_NAMEBedrock 呼び出し用の IAM ロール名IAM コンソール → Roles
YOUR_CLOUDTRAIL_LOG_GROUPCloudTrail トレイル用の CloudWatch Logs ロググループCloudTrail コンソール → トレイル → CloudWatch Logs

特定のタイプのすべてのリソースをログに記録するには、ARN プレフィックスからリソース ID を削除します(例: agent-alias/AGENT_ID/ALIAS_IDagent-alias/) — これによりイベントのボリュームとコストが増加します。使用する場合は readOnly または eventName フィルターが必要な操作と一致していることを確認してください。

18 件の Bedrock 高度なイベントセレクター (JSON) をすべて表示
bedrock-advanced-event-selectors.json
[
{
"Name": "Bedrock-AgentAlias-DataEvents",
"FieldSelectors": [
{
"Field": "eventCategory",
"Equals": ["Data"]
},
{
"Field": "resources.type",
"Equals": ["AWS::Bedrock::AgentAlias"]
},
{
"Field": "resources.ARN",
"StartsWith": [
"arn:aws:bedrock:REGION:ACCOUNT_ID:agent-alias/AGENT_ID/ALIAS_ID"
]
}
]
},
{
"Name": "Bedrock-InlineAgent-DataEvents",
"FieldSelectors": [
{
"Field": "eventCategory",
"Equals": ["Data"]
},
{
"Field": "resources.type",
"Equals": ["AWS::Bedrock::InlineAgent"]
},
{
"Field": "eventName",
"Equals": ["InvokeInlineAgent"]
},
{
"Field": "userIdentity.arn",
"StartsWith": [
"arn:aws:sts::ACCOUNT_ID:assumed-role/BEDROCK_EXECUTION_ROLE_NAME"
]
}
]
},
{
"Name": "Bedrock-KnowledgeBase-DataEvents",
"FieldSelectors": [
{
"Field": "eventCategory",
"Equals": ["Data"]
},
{
"Field": "resources.type",
"Equals": ["AWS::Bedrock::KnowledgeBase"]
},
{
"Field": "resources.ARN",
"StartsWith": [
"arn:aws:bedrock:REGION:ACCOUNT_ID:knowledge-base/KB_ID"
]
}
]
},
{
"Name": "Bedrock-FlowAlias-DataEvents",
"FieldSelectors": [
{
"Field": "eventCategory",
"Equals": ["Data"]
},
{
"Field": "resources.type",
"Equals": ["AWS::Bedrock::FlowAlias"]
},
{
"Field": "resources.ARN",
"StartsWith": [
"arn:aws:bedrock:REGION:ACCOUNT_ID:flow/FLOW_ID/alias/"
]
}
]
},
{
"Name": "Bedrock-Guardrail-DataEvents",
"FieldSelectors": [
{
"Field": "eventCategory",
"Equals": ["Data"]
},
{
"Field": "resources.type",
"Equals": ["AWS::Bedrock::Guardrail"]
},
{
"Field": "resources.ARN",
"StartsWith": [
"arn:aws:bedrock:REGION:ACCOUNT_ID:guardrail/GUARDRAIL_ID"
]
}
]
},
{
"Name": "Bedrock-Model-DataEvents",
"FieldSelectors": [
{
"Field": "eventCategory",
"Equals": ["Data"]
},
{
"Field": "resources.type",
"Equals": ["AWS::Bedrock::Model"]
},
{
"Field": "eventName",
"Equals": ["InvokeModelWithBidirectionalStream"]
}
]
},
{
"Name": "Bedrock-AsyncInvoke-DataEvents",
"FieldSelectors": [
{
"Field": "eventCategory",
"Equals": ["Data"]
},
{
"Field": "resources.type",
"Equals": ["AWS::Bedrock::AsyncInvoke"]
},
{
"Field": "eventName",
"Equals": ["GetAsyncInvoke", "StartAsyncInvoke"]
}
]
},
{
"Name": "Bedrock-Prompt-DataEvents",
"FieldSelectors": [
{
"Field": "eventCategory",
"Equals": ["Data"]
},
{
"Field": "resources.type",
"Equals": ["AWS::Bedrock::PromptVersion"]
},
{
"Field": "resources.ARN",
"StartsWith": [
"arn:aws:bedrock:REGION:ACCOUNT_ID:prompt/PROMPT_ID"
]
}
]
},
{
"Name": "Bedrock-Session-DataEvents",
"FieldSelectors": [
{
"Field": "eventCategory",
"Equals": ["Data"]
},
{
"Field": "resources.type",
"Equals": ["AWS::Bedrock::Session"]
},
{
"Field": "resources.ARN",
"StartsWith": [
"arn:aws:bedrock:REGION:ACCOUNT_ID:session/"
]
},
{
"Field": "readOnly",
"Equals": ["false"]
}
]
},
{
"Name": "Bedrock-FlowExecution-DataEvents",
"FieldSelectors": [
{
"Field": "eventCategory",
"Equals": ["Data"]
},
{
"Field": "resources.type",
"Equals": ["AWS::Bedrock::FlowExecution"]
},
{
"Field": "resources.ARN",
"StartsWith": [
"arn:aws:bedrock:REGION:ACCOUNT_ID:flow/FLOW_ID/alias/"
]
}
]
},
{
"Name": "Bedrock-AutomatedReasoningPolicy-DataEvents",
"FieldSelectors": [
{
"Field": "eventCategory",
"Equals": ["Data"]
},
{
"Field": "resources.type",
"Equals": ["AWS::Bedrock::AutomatedReasoningPolicy"]
},
{
"Field": "resources.ARN",
"StartsWith": [
"arn:aws:bedrock:REGION:ACCOUNT_ID:automated-reasoning-policy/POLICY_ID"
]
}
]
},
{
"Name": "Bedrock-AutomatedReasoningPolicyVersion-DataEvents",
"FieldSelectors": [
{
"Field": "eventCategory",
"Equals": ["Data"]
},
{
"Field": "resources.type",
"Equals": ["AWS::Bedrock::AutomatedReasoningPolicyVersion"]
},
{
"Field": "resources.ARN",
"StartsWith": [
"arn:aws:bedrock:REGION:ACCOUNT_ID:automated-reasoning-policy/POLICY_ID"
]
}
]
},
{
"Name": "Bedrock-DataAutomationProject-DataEvents",
"FieldSelectors": [
{
"Field": "eventCategory",
"Equals": ["Data"]
},
{
"Field": "resources.type",
"Equals": ["AWS::Bedrock::DataAutomationProject"]
},
{
"Field": "resources.ARN",
"StartsWith": [
"arn:aws:bedrock:REGION:ACCOUNT_ID:data-automation-project/PROJECT_ID"
]
}
]
},
{
"Name": "Bedrock-DataAutomationInvocation-DataEvents",
"FieldSelectors": [
{
"Field": "eventCategory",
"Equals": ["Data"]
},
{
"Field": "resources.type",
"Equals": ["AWS::Bedrock::DataAutomationInvocation"]
},
{
"Field": "resources.ARN",
"StartsWith": [
"arn:aws:bedrock:REGION:ACCOUNT_ID:data-automation-invocation/"
]
},
{
"Field": "readOnly",
"Equals": ["false"]
}
]
},
{
"Name": "Bedrock-DataAutomationProfile-DataEvents",
"FieldSelectors": [
{
"Field": "eventCategory",
"Equals": ["Data"]
},
{
"Field": "resources.type",
"Equals": ["AWS::Bedrock::DataAutomationProfile"]
},
{
"Field": "resources.ARN",
"StartsWith": [
"arn:aws:bedrock:REGION:ACCOUNT_ID:data-automation-profile/"
]
},
{
"Field": "readOnly",
"Equals": ["false"]
}
]
},
{
"Name": "Bedrock-Blueprint-DataEvents",
"FieldSelectors": [
{
"Field": "eventCategory",
"Equals": ["Data"]
},
{
"Field": "resources.type",
"Equals": ["AWS::Bedrock::Blueprint"]
},
{
"Field": "resources.ARN",
"StartsWith": [
"arn:aws:bedrock:REGION:ACCOUNT_ID:blueprint/"
]
},
{
"Field": "readOnly",
"Equals": ["false"]
}
]
},
{
"Name": "Bedrock-AdvancedOptimizePromptJob-DataEvents",
"FieldSelectors": [
{
"Field": "eventCategory",
"Equals": ["Data"]
},
{
"Field": "resources.type",
"Equals": ["AWS::Bedrock::AdvancedOptimizePromptJob"]
},
{
"Field": "resources.ARN",
"StartsWith": [
"arn:aws:bedrock:REGION:ACCOUNT_ID:advanced-optimize-prompt-job/"
]
},
{
"Field": "readOnly",
"Equals": ["false"]
}
]
},
{
"Name": "Bedrock-Tool-DataEvents",
"FieldSelectors": [
{
"Field": "eventCategory",
"Equals": ["Data"]
},
{
"Field": "resources.type",
"Equals": ["AWS::Bedrock::Tool"]
},
{
"Field": "resources.ARN",
"StartsWith": [
"arn:aws:bedrock:REGION:ACCOUNT_ID:tool/TOOL_ID"
]
}
]
}
]

Bedrock データイベントリソースタイプ

CloudTrail は、以下の Bedrock リソースタイプのデータイベントをサポートするように設計されており、AI パイプラインへの完全な可視性を提供します。

エージェントとオーケストレーション

リソースタイプ主要 API説明
AWS::Bedrock::AgentAliasInvokeAgentデプロイされた Bedrock エージェントエイリアスの呼び出しを追跡します
AWS::Bedrock::InlineAgentInvokeInlineAgentインラインエージェントの呼び出しをキャプチャします
AWS::Bedrock::FlowAliasInvokeFlowBedrock Prompt Flow の呼び出しを追跡します
AWS::Bedrock::FlowExecutionフロー実行 APIプロンプトフロー実行の監視のためにフロー実行アクティビティをキャプチャします
AWS::Bedrock::Sessionセッション APIマルチターン会話のセッションレベル API アクティビティをキャプチャします
Agent & Orchestration リソースのセレクターに関する注意事項
  • FlowExecution — Narrow resources.ARN 特定のフロー ID に (例: flow/FLOW_ID/alias/) フロー実行 ARN が共有されているため flow/ フローエイリアスのプレフィックスを使用します。
  • Session — 使用します readOnly = false 書き込み操作(セッションの作成と更新)に集中し、高頻度の読み取り操作によるボリュームを削減するため。

モデル呼び出し

リソースタイプ主要 API説明
AWS::Bedrock::ModelInvokeModelWithBidirectionalStream双方向ストリーミング呼び出しをログに記録します
AWS::Bedrock::AsyncInvokeGetAsyncInvoke, StartAsyncInvoke非同期呼び出し操作をログに記録します
AWS::Bedrock::PromptVersionRenderPromptプロンプトレンダリング操作をキャプチャします
AWS::Bedrock::AdvancedOptimizePromptJob高度なプロンプト最適化 API高度なプロンプト最適化ジョブのアクティビティをキャプチャします
モデル呼び出しリソースのセレクターに関する注意事項
  • モデル — Foundation model の ARN は AWS が所有しています(例: arn:aws:bedrock:REGION::foundation-model/...) はアカウント ID を含まないため、このセレクターは eventName フィルタリングの代わりに resources.ARN.
  • AsyncInvoke — 使用 eventName 特定の非同期操作にスコープを絞るためのフィルタリング。非同期呼び出しには、両方のセレクターが必要です。 AWS::Bedrock::Model および AWS::Bedrock::AsyncInvoke.
  • AdvancedOptimizePromptJob — 使用します readOnly = false 書き込み操作(ジョブの開始)に焦点を当てます。

安全性とガードレール

リソースタイプ主要 API説明
AWS::Bedrock::GuardrailApplyGuardrailガードレール適用操作をキャプチャします
AWS::Bedrock::AutomatedReasoningPolicy自動推論 API検証可能な AI 出力のための自動推論ポリシーのアクティビティをキャプチャします
AWS::Bedrock::AutomatedReasoningPolicyVersion自動推論バージョン API自動推論ポリシーの特定バージョンのアクティビティをキャプチャします
Safety & Guardrails リソースのセレクターに関する注意事項
  • AutomatedReasoningPolicy — アカウント内のすべてのポリシーをキャプチャしないよう、特定のポリシー ID に絞り込みます。
  • AutomatedReasoningPolicyVersion — ポリシーセレクターと同じポリシー ID プレフィックスを使用します。

ナレッジ & RAG

リソースタイプ主要 API説明
AWS::Bedrock::KnowledgeBaseRetrieve, RetrieveAndGenerateデータソースの取得および取り込みアクティビティを監視します
AWS::Bedrock::Toolツール APIツール使用操作のためのツール API アクティビティをキャプチャします
Knowledge & RAG リソースのセレクターに関する注意事項
  • Tool — アカウント内のすべてのツールアクティビティをキャプチャしないように、特定のツール ID に絞り込みます。

データ自動化

リソースタイプ主要 API説明
AWS::Bedrock::DataAutomationProjectデータ自動化プロジェクト APIドキュメントおよびメディア処理のためのプロジェクトアクティビティをキャプチャします
AWS::Bedrock::DataAutomationInvocationデータ自動化呼び出し APIデータ自動化呼び出しアクティビティをキャプチャします
AWS::Bedrock::DataAutomationProfileデータ自動化プロファイル APIデータ自動化プロファイルアクティビティをキャプチャします
AWS::Bedrock::Blueprintブループリント APIデータ自動化設定のためのブループリントアクティビティをキャプチャします
Data Automation リソースのセレクターに関する注意事項
  • DataAutomationProject — 特定のプロジェクト ID に絞り込みます。
  • DataAutomationInvocationDataAutomationProfileBlueprint — すべて使用 readOnly = false 書き込み操作に集中します。
Cost optimization for InlineAgent

The AWS::Bedrock::InlineAgent セレクターには含まれていません。 resources.ARN インラインエージェントには永続的なリソース ARN がないため、フィルタリングされます。ボリュームとコストを削減するために、セレクターは eventName filter (スコープ対象: InvokeInlineAgent) および userIdentity.arn フィルターを使用して、特定の IAM ロールへのログ記録をスコープします。置き換えてください。 BEDROCK_EXECUTION_ROLE_NAME 実際のロール名に置き換えてください。インラインエージェントを使用しない場合は、このセレクターを完全に削除してください。完全なセレクター JSON については、インラインエージェント: IAM アイデンティティによるフィルタリングを参照してください。

警告

上記の高度なイベントセレクターをすべての関連リソースタイプにわたって設定することが、このガイドにおける AI ワークロードの可視性を有効にするための重要な最初のステップです。高度なイベントセレクターを指定せずにデータイベントを有効にしないでください。フィルタリングされていないデータイベントのログ記録は、大量のデータとコストを発生させる可能性があります。最新のサポートされているリソースタイプについては、CloudTrail の Amazon Bedrock データイベントを参照してください。

Amazon Bedrock AgentCore データイベント

Amazon Bedrock AgentCore は、AI エージェントの実行、セキュリティ保護、および接続のためのマネージドインフラストラクチャを提供します。これには、ホスト型ランタイム、組み込みツール(コードインタープリター、ブラウザー)、ID およびクレデンシャル管理、API ゲートウェイ、永続メモリが含まれます。これらのコンポーネントはそれぞれデータプレーンのアクティビティを生成し、CloudTrail はそれをデータイベントとしてキャプチャできます。これにより、エージェントがコードを実行する方法、ウェブを閲覧する方法、サードパーティサービスへの認証方法、およびゲートウェイを通じてユーザーと対話する方法を把握できます。

AgentCore データイベントは、コード実行、ツール使用、メモリ操作など、エージェントの動作に対するランタイムの可視性を提供します。具体的には、どのツールが呼び出されているか、どの認証情報が取得されているか、どのゲートウェイがトラフィックを受信しているか、または認識されていない呼び出し元がエージェントインフラストラクチャにアクセスしているかどうかを確認できます。

AgentCore Data Events が AI セキュリティにとって重要な理由

AgentCore コンポーネントは、AI エージェントの運用サーフェス、つまりエージェントが実際のアクションを実行するレイヤーを表します。Bedrock データイベント(上記で説明)がエージェントに何を求めるか(モデルの呼び出し、ナレッジベースからの取得)をキャプチャするのに対し、AgentCore データイベントはエージェントが実際に何を行うかをキャプチャします。エージェント型 AI セキュリティスコーピングマトリックスは、エージェント型システムに対して 6 つの重要なセキュリティディメンションを定義しています。以下の箇条書きは、各 AgentCore 機能をそれが対応するマトリックスディメンションにマッピングしたものです。

  • コードの実行 — CodeInterpreter を通じてユーザー提供のコードを実行するエージェントは、ファイルへのアクセス、ネットワーク呼び出し、副作用の生成が可能です。これらの呼び出しを監視することで、意図しないコードの実行や、意図した範囲外で動作するエージェントを検出できます。(Agentic Matrix: ガードレール — サンドボックスと分離メカニズム)
  • Web ブラウジング — Browser ツールを使用するエージェントは外部 Web サイトをナビゲートし、機密性の高い URL にアクセスしたり、データ転送が意図した境界内に収まっているかを確認したりする可能性があります。ブラウザのアクティビティをログに記録することで、エージェントが訪問したすべてのページの監査証跡が得られます。(Agentic Matrix: ガードレール — 行動監視)
  • 認証情報へのアクセス — エージェントは、TokenVault に保存された OAuth2 トークン、API キー、ワークロード ID トークンを使用してサードパーティ API に認証します。予期しない認証情報アクセスパターンは、異常なエージェントアクティビティや権限昇格を示している可能性があります。(Agentic Matrix: ID 管理 — ID の委任と認証情報管理)
  • ゲートウェイトラフィック — AgentCore Gateway は、JWT ベースの認証を備えた MCP プロトコルを介してエージェントを外部の呼び出し元に公開します。ゲートウェイのデータイベントは、認証失敗を含むすべての受信リクエストをキャプチャします。これは、AWS 環境外からの意図しないアクセス試行を検出するうえで重要です。(Agentic Matrix: スコープ — 明確な運用境界)
  • エージェントランタイムアクティビティ — Runtime および RuntimeEndpoint イベントは、エージェントのライフサイクル操作、セッション管理、エンドポイント呼び出しを追跡します。ここでの異常なパターンは、通常の運用時間外にエージェントが起動、停止、またはアクセスされていることを示します。(Agentic Matrix: オーケストレーション — エージェントとシステムのインタラクション管理)
  • メモリ操作 — 永続メモリを持つエージェントは、セッションをまたいで会話コンテキストを保存および取得します。意図しないメモリアクセスにより、会話履歴の取得やエージェントコンテキストの変更が可能になる場合があります。メモリ操作を監視することで、アクセスが認可されたスコープ内に収まっていることを確認できます。(Agentic Matrix: データ — 永続メモリと状態のセキュリティ)
  • エージェント評価 — Evaluator イベントは、エージェント出力の自動品質・安全性評価を追跡します。これらを監視することで、評価パイプラインが意図したとおりに設定されたままであることを確認できます。(Agentic Matrix: 監査とログ記録 — アクションレベルのエージェントアクション追跡)

AgentCore データイベントリソースタイプ

CloudTrail は、以下の AgentCore リソースタイプのデータイベントをサポートしています。

リソースタイプresources.typeセキュリティ関連性
コードインタープリターAWS::BedrockAgentCore::CodeInterpreter意図しないコードの実行、サンドボックス境界の問題を検出する
コードインタープリター (カスタム)AWS::BedrockAgentCore::CodeInterpreterCustom不正なカスタムコード実行の検出
ブラウザAWS::BedrockAgentCore::Browser監査エージェントの Web ナビゲーション、URL を介した意図しないデータ転送の検出
ブラウザ (カスタム)AWS::BedrockAgentCore::BrowserCustomカスタムブラウザツールの使用状況を監査する

AgentCore の高度なイベントセレクター

CloudTrail トレイルで AgentCore データイベントをキャプチャするには、以下の高度なイベントセレクターを使用します。これらのセレクターは、セキュリティ機能に基づいて、組み込みツール、ID と認証情報、ランタイムとゲートウェイ、メモリと評価の 4 つのグループに分類されています。各セレクターは、以下を使用してログのスコープを設定します。 resources.ARN プレフィックス。AWS マネージドの組み込みツール (CodeInterpreter および Browser)、その resources.ARN filter は省略されています。これらは AWS が所有する ARN を使用しているためです — resources.type filter だけで十分です。

警告

以下のセレクターはです。プレースホルダーを置き換えずに適用してもイベントはキャプチャされません。置き換えてください ACCOUNT_ID および REGION 値を入力してください(上記の Bedrock プレースホルダーテーブル を参照)。AgentCore 固有のプレースホルダーは以下に示します。

AgentCore placeholder reference
プレースホルダー置き換える値確認場所
GATEWAY_IDAgentCore Gateway IDAgentCore コンソールまたは ListGateways API
RUNTIME_IDAgentCore Runtime IDListRuntimes API
DIRECTORY_IDWorkload Identity Directory IDAgentCore コンソール
PROVIDER_NAMEOAuth2 または APIKey 認証情報プロバイダー名AgentCore コンソール
MEMORY_IDAgentCore Memory IDAgentCore コンソール
EVALUATOR_IDAgentCore Evaluator IDAgentCore コンソール
CUSTOM_TOOL_ID / CUSTOM_BROWSER_IDカスタムツールまたはブラウザー設定 IDAgentCore コンソール

特定のタイプのすべてのリソースをログに記録するには、ARN プレフィックスからリソース ID を削除します(例: gateway/GATEWAY_IDgateway/) — これによりイベントのボリュームとコストが増加します。

これらのセレクターは、エージェントのツール使用状況(エージェントが現実世界で実行するアクション)をキャプチャします。コードインタープリターイベントはエージェントが実行するコードを明らかにし、ブラウザーイベントはエージェントが訪問するウェブサイトを明らかにします。( エージェント AI セキュリティスコーピングマトリックスのガードレール次元(エージェントアクションのサンドボックス化、分離メカニズム、および動作監視)を実装します。)

Important

AWS が管理する組み込みツール (CodeInterpreter および Browser) AWS 所有のリソース ARN をアカウントセグメントに設定して使用します。 aws (例: arn:aws:bedrock-agentcore:REGION:aws:code-interpreter/)、アカウント ID ではありません。カスタムツール (CodeInterpreterCustom および BrowserCustom) アカウント ID を使用します。以下のセレクターはこの違いを反映しています。マネージドツールのみを使用する場合は、カスタムツールセレクターを省略できます。

AgentCore-BuiltInTools-DataEvents.json
[
{
"Name": "AgentCore-CodeInterpreter-DataEvents",
"FieldSelectors": [
{ "Field": "eventCategory", "Equals": ["Data"] },
{ "Field": "resources.type", "Equals": ["AWS::BedrockAgentCore::CodeInterpreter"] }
]
},
{
"Name": "AgentCore-CodeInterpreterCustom-DataEvents",
"FieldSelectors": [
{ "Field": "eventCategory", "Equals": ["Data"] },
{ "Field": "resources.type", "Equals": ["AWS::BedrockAgentCore::CodeInterpreterCustom"] },
{ "Field": "resources.ARN", "StartsWith": ["arn:aws:bedrock-agentcore:REGION:ACCOUNT_ID:code-interpreter-custom/CUSTOM_TOOL_ID"] }
]
},
{
"Name": "AgentCore-Browser-DataEvents",
"FieldSelectors": [
{ "Field": "eventCategory", "Equals": ["Data"] },
{ "Field": "resources.type", "Equals": ["AWS::BedrockAgentCore::Browser"] }
]
},
{
"Name": "AgentCore-BrowserCustom-DataEvents",
"FieldSelectors": [
{ "Field": "eventCategory", "Equals": ["Data"] },
{ "Field": "resources.type", "Equals": ["AWS::BedrockAgentCore::BrowserCustom"] },
{ "Field": "resources.ARN", "StartsWith": ["arn:aws:bedrock-agentcore:REGION:ACCOUNT_ID:browser-custom/CUSTOM_BROWSER_ID"] }
]
}
]
Cost optimization for AgentCore data events

AgentCore データイベントは、特に Gateway(すべての受信 MCP リクエスト)および Runtime(すべてのエージェントセッション操作)において、大量のデータを生成する可能性があります。

推奨されるロールアウト順序:

  1. グループ 2(認証情報)とグループ 3(ゲートウェイ)から開始します。これらは通常、最も優先度の高いセキュリティ項目です。
  2. ベースラインのボリュームとコストを確立した後、グループ 1 と 4 に拡張します。

リソース ID によるセレクターの絞り込み: 特定の resources.ARN 個々のリソースをターゲットにする値 — 例えば、 arn:aws:bedrock-agentcore:REGION:ACCOUNT_ID:gateway/PROD_GATEWAY_ID 単一のゲートウェイに対して。マネージド組み込みツール (CodeInterpreter および Browser)、その resources.ARN filter は省略されています。これらは AWS が所有する ARN を使用しているためです — resources.type filter だけで十分です。

CloudTrail Insights イベント

CloudTrail Insights は、アカウントの運用ベースラインを継続的に分析することで、異常な API アクティビティを特定するように設計されています。AI ワークロードでは、正当な使用自体が大量のコール数を伴う場合がありますが、Insights は絶対的なコール数が単独では合理的に見える場合でも、確立された基準から逸脱した異常なスパイクを検出する手段を提供します。

インサイトタイプ

インサイトタイプ検出目的
ApiCallRateInsightベースラインから逸脱した API コール量の急増を検出します。
ApiErrorRateInsight異常なエラー率パターンを検出します。AccessDenied または ThrottlingException エラーの急増は、認証情報への繰り返しのアクセス試行、繰り返される意図しないアクセス試行、またはレート制限に達した自動エージェントを示している可能性があります。

設定ガイダンス

CloudTrail コンソールでトレイルに移動し、編集を選択して、Insights セクションの両方の Insights イベントタイプを有効にすることで、CloudTrail トレイルで Insights を有効にします。

トレイルでは、管理イベントとデータイベントの両方に対して Insights を有効にできます。イベントタイプ(管理イベント、データイベント、またはその両方)を選択し、次に Insights タイプ(API コール率、API エラー率、またはその両方)を選択します。API コール率 Insights を有効にするには、トレイルが Write 管理イベントまたはデータイベントをログに記録している必要があります。また、API エラー率 Insights を有効にするには、Read または Write 管理イベントまたはデータイベントをログに記録している必要があります。

CloudTrail Insights イベントは、標準イベントと同じ Amazon S3 バケットおよび CloudWatch Logs ロググループに配信されます。 Insights プレフィックスを使用します。Insights イベントに対してメトリクスフィルターとアラームを直接作成し、異常なアクティビティが検出されたときに自動応答をトリガーすることができます。CloudTrail は、有効化後に Insights イベントの配信を開始するまで最大 36 時間かかる場合があります。ただし、その間に異常なアクティビティが検出された場合に限ります。

CloudTrail 管理イベント

CloudTrail Management イベントは、AWS 環境におけるコントロールプレーン操作(リソースの作成と削除、設定の変更、権限の変更)を記録するように設計されています。AI ワークロードのセキュリティにおいて、これらのイベントはレビューが必要な予期しないアクセスパターン(ロギングの無効化、監査証跡のリダイレクト、AI サービスのガードレールの弱体化など)を表面化させます。

読み取り書き込みの両方の管理イベントがすべてのリージョンでログに記録されていることを確認してください。デフォルトの CloudTrail トレイルは、リージョンごとに管理イベントの無料コピーを 1 つ提供します。追加のコピーには料金が発生します。詳細については、CloudTrail の料金を参照してください。

AI セキュリティのキー管理イベント

イベント名重要な理由
UpdateAccountSettingsアカウントレベルの Bedrock 設定への変更を検出します。
PutModelInvocationLoggingConfigurationBedrock 呼び出しログ設定による設定変更を検出します。
DeleteModelInvocationLoggingConfigurationBedrock ロギング設定が完全に削除されたことを検出します。
CreateGuardrail / UpdateGuardrail / DeleteGuardrailBedrock のコンテンツフィルタリングおよび安全制御への変更を検出します。
注記

一般的な意図しないアクセスパターンとして、さらなる活動を行う前に、トレイルの無効化や外部から制御されたバケットへのログのリダイレクトなど、ログ設定の変更が挙げられます。以下の監視を行うことで、 StopLogging, DeleteTrail、および PutModelInvocationLoggingConfiguration 監査証跡の整合性を保護するために推奨されます。

Amazon S3 と Lambda データイベント

AI ワークロードは、Amazon S3 バケット(トレーニングデータ、モデルアーティファクト、CI/CD パイプラインアセット用)および Lambda 関数(AI 推論、データ前処理、エージェントオーケストレーション用)と頻繁にやり取りします。これらのリソースタイプをデータイベントレベルで監視することで、管理イベントでは取得できないオブジェクトレベルおよび関数呼び出しレベルのアクティビティを可視化できます。

Amazon S3 ターゲットバケットとイベントタイプ

以下のバケットに対して Amazon S3 データイベントを有効にします。

  • AI トレーニングデータセットとファインチューニングデータ
  • モデルアーティファクトと設定ファイル
  • CI/CD パイプラインアーティファクトとコードリポジトリ

監視すべき主要な Amazon S3 オペレーション:

  • PutObject — 不正な書き込みアクセスや不正なデータアクセスのためのデータステージングを検出します
  • GetObject — トレーニングデータやモデルアーティファクトの大量ダウンロードを検出します
  • DeleteObject — データの削除やログの改ざんアクティビティを検出します
  • CopyObject — バケット間の意図しないデータ移動を検出します

Amazon S3 書き込み専用セレクター

次のセレクターは、特定の名前が付いた AI 関連バケットへの書き込み操作のみをログに記録することで、Amazon S3 データイベントのボリュームを削減します。

Replace bucket name prefixes with your actual bucket names

以下のバケット名プレフィックス (ai-training-data-, model-artifacts-, cicd-pipeline-) はです。AI トレーニングデータ、モデルアーティファクト、およびパイプラインアセットを含む S3 バケットの実際の名前または命名プレフィックスに置き換えてください。バケット名は S3 コンソール で確認するか、以下を実行することで確認できます。 aws s3 lsバケットが異なる命名規則を使用している場合は、 StartsWith 値を適宜設定します。

What this does

Amazon S3 データイベントをフィルタリングして、書き込み操作のみをキャプチャします (readOnly = false名前が次で始まるバケットに対して ai-training-data-, model-artifacts-、または cicd-pipeline-これにより、大量の読み取り操作(例えば GetObject) 不正な書き込み、削除、およびデータのステージングを検出しながら。

S3-AI-Sensitive-WriteOnly
[
{
"Name": "S3-AI-Sensitive-WriteOnly",
"FieldSelectors": [
{
"Field": "eventCategory",
"Equals": ["Data"]
},
{
"Field": "resources.type",
"Equals": ["AWS::S3::Object"]
},
{
"Field": "readOnly",
"Equals": ["false"]
},
{
"Field": "resources.ARN",
"StartsWith": [
"arn:aws:s3:::ai-training-data-",
"arn:aws:s3:::model-artifacts-",
"arn:aws:s3:::cicd-pipeline-"
]
}
]
}
]

Lambda AI パイプライン関数

Lambda データイベントを有効にしてログを記録します。 InvokeFunction 以下が必要です。

  • AI 推論パイプライン関数
  • データ前処理および特徴エンジニアリングワークフロー
  • Bedrock エージェントオーケストレーション関数
注記

Lambda の呼び出し数の予期しない急増、特に見慣れない IAM ロールからの急増は、Lambda ベースの AI パイプライン関数への意図しないアクセスが発生している早期の兆候です。

Lambda 本番環境専用セレクター

このセレクターは、開発およびテスト関数を除外し、本番環境の AI ワークロードのログ記録に集中します。

Replace function name prefixes with your actual naming convention

以下の関数名プレフィックス (prod-, ai-agent-) はです。実際の組織が本番 AI Lambda 関数に使用する命名プレフィックスに置き換えてください。また、 ACCOUNT_ID AWS アカウント ID と REGION お使いのリージョンに置き換えてください。関数名は Lambda コンソール で確認するか、以下を実行することで確認できます。 aws lambda list-functions.

What this does

Logs Lambda Invoke ARN が次の文字列で始まる関数のデータイベントのみ prod- または ai-agent-。なぜなら StartsWith すでにこれらの特定のプレフィックスにスコープが限定されているため、開発およびテスト関数は定義上除外されます。CloudTrail では、同じフィールドに対して 2 つのフィールドセレクターを使用することはできません (resources.ARN) を単一のセレクター内で使用する場合、異なる演算子を使用する場合でも同様です。置き換えてください。 ACCOUNT_ID と、リージョンをご自身の値に置き換えてください。

Lambda-AI-Production-Invocations
[
{
"Name": "Lambda-AI-Production-Invocations",
"FieldSelectors": [
{
"Field": "eventCategory",
"Equals": ["Data"]
},
{
"Field": "resources.type",
"Equals": ["AWS::Lambda::Function"]
},
{
"Field": "resources.ARN",
"StartsWith": [
"arn:aws:lambda:REGION:ACCOUNT_ID:function:prod-",
"arn:aws:lambda:REGION:ACCOUNT_ID:function:ai-agent-"
]
}
]
}
]

CloudTrail ネットワークアクティビティイベント

CloudTrail ネットワークアクティビティイベントは、VPC エンドポイントの所有者がプライベート VPC から AWS サービスへの VPC エンドポイントを通じて行われた AWS API 呼び出しを記録できるように設計されています。AI ワークロードにおいては、Bedrock と統合された VPC が予期しないアウトバウンド呼び出しを行っているかどうか、または VPC エンドポイントのアクセス制御が侵害されているかどうかを可視化します。(「エージェント型 AI セキュリティスコーピングマトリックス」のスコープ次元を実装し、明確な運用境界を強制し、意図されたネットワーク境界の外で動作するエージェントを検出します。)

AI ワークロード VPC エンドポイント

CloudTrail ネットワークアクティビティイベントは Amazon Bedrock をサポートしています (bedrock.amazonaws.com)、Amazon S3 (s3.amazonaws.com)、および AWS Lambda (lambda.amazonaws.com) をイベントソースとして使用します。各エンドポイントを経由してルーティングされた API 呼び出し(許可されたアクセスと拒否されたアクセスの両方を含む)をキャプチャするために、VPC エンドポイントでこれらのイベントを有効にしてください。AI ワークロードの場合、これは特に重要です。VPC 内で動作する Bedrock エージェントは、VPC エンドポイントを通じてダウンストリームサービス(ナレッジベースデータソース用の Amazon S3、アクショングループハンドラー用の Lambda)にアクセスするためです。VPC エンドポイントレベルでのアクセス拒否は、エンドポイントポリシーの設定ミス、またはプライベートネットワーク内から AI リソースへのアクセスを試みる不正なワークロードのいずれかを示しています。

有効化を検討すべき追加のイベントソース:

イベントソース監視目的
bedrock.amazonaws.comAI モデルへのアクセスを監視し、VPC エンドポイント経由の不正な呼び出しを検出します。
s3.amazonaws.comVPC エンドポイント経由でのトレーニングデータバケットへの不正な Amazon S3 アクセスを検出します。
kms.amazonaws.comAI モデルの暗号化操作のための暗号化キーアクセスパターンを監視します。
lambda.amazonaws.comAI パイプライン関数から VPC エンドポイント経由の Lambda 呼び出しを追跡します。
sagemaker.amazonaws.comAI ワークロード環境における SageMaker エンドポイントのアクティビティを追跡します。

ネットワークアクティビティイベントの高度なイベントセレクターフィールド

初期デプロイでは、キャプチャに集中してください VpceAccessDenied すべての AI 関連 VPC エンドポイント全体のエラーを監視し、最小限の追加データ量でVPC エンドポイントポリシーの違反を検出します。以下のセレクターは、Bedrock、Amazon S3、および Lambda をカバーしています。これらは、AI エージェントが VPC エンドポイントを通じて最も一般的にアクセスする 3 つのサービスです。

What this does

Bedrock、Amazon S3、または Lambda がレスポンスを返したネットワークアクティビティイベントをログに記録します。 VpceAccessDenied エラーを示しており、VPC 内からのトラフィックが VPC エンドポイントポリシーによってブロックされたことを意味します。これにより、成功したすべてのネットワークアクティビティをログに記録するボリュームを必要とせず、AI ワークロード全体の表面にわたって拒否されたアクセスをキャプチャします。Amazon S3 の拒否は、トレーニングデータやモデルアーティファクトバケットへのアクセスがブロックされたエージェントを検出します。Lambda の拒否は、アクショングループハンドラーや AI パイプライン関数の呼び出しがブロックされたエージェントを検出します。

ネットワークアクティビティ VpceAccessDenied セレクター (JSON) を表示
network-activity-vpce-access-denied.json
[
{
"Name": "Bedrock-NetworkActivity-VpceAccessDenied",
"FieldSelectors": [
{
"Field": "eventCategory",
"Equals": ["NetworkActivity"]
},
{
"Field": "eventSource",
"Equals": ["bedrock.amazonaws.com"]
},
{
"Field": "errorCode",
"Equals": ["VpceAccessDenied"]
}
]
},
{
"Name": "S3-NetworkActivity-VpceAccessDenied",
"FieldSelectors": [
{
"Field": "eventCategory",
"Equals": ["NetworkActivity"]
},
{
"Field": "eventSource",
"Equals": ["s3.amazonaws.com"]
},
{
"Field": "errorCode",
"Equals": ["VpceAccessDenied"]
}
]
},
{
"Name": "Lambda-NetworkActivity-VpceAccessDenied",
"FieldSelectors": [
{
"Field": "eventCategory",
"Equals": ["NetworkActivity"]
},
{
"Field": "eventSource",
"Equals": ["lambda.amazonaws.com"]
},
{
"Field": "errorCode",
"Equals": ["VpceAccessDenied"]
}
]
}
]

実装優先度チェックリスト

次の表は、AI ワークロード環境で CloudTrail イベントタイプを有効化するための推奨実装順序を示しています。各ステップは前のステップを基盤として構築されており、影響度の高い変更から始まり、より詳細なモニタリング設定へと進んでいきます。

ステップイベントタイプ有効化する対象詳細
1管理イベントすべてのサービス、すべてのリージョン(読み取り + 書き込み)InvokeModelConverseListAsyncInvokes、および AgentCore 管理イベントをデフォルトでキャプチャします
2データイベント18 個すべての Bedrock リソースタイプエージェント呼び出し、RAG、フロー、ガードレール、セッション、データ自動化、ツールなど。Bedrock セレクターを参照
3データイベント14 個すべての AgentCore リソースタイプゲートウェイトラフィック、ランタイム操作、組み込みツール、認証情報、メモリ、評価。AgentCore セレクターを参照
4Insights イベントアカウント全体管理イベントとデータイベントに対する ApiCallRateInsight および ApiErrorRateInsight
5データイベントAWS::S3::Object(AI バケット)ai-training-datamodel-artifactscicd-pipeline プレフィックスのバケットに対する書き込み専用
6データイベントAWS::Lambda::Function本番 AI 関数のみ。開発およびテスト関数名プレフィックスを除外します
7ネットワークアクティビティイベントBedrock、S3、Lambda VPC エンドポイントbedrock.amazonaws.coms3.amazonaws.comlambda.amazonaws.com に対する VpceAccessDenied

データイベント収集の最適化

高度なイベントセレクターを使用すると、コストとログボリュームの両方を制御するための精密なフィルタリングが可能になります。以下の戦略では、主要なリソースタイプごとに、セキュリティ上重要なイベントのみに絞り込む方法を示します。

Bedrock: 本番リソースへの絞り込み

上記の高度なイベントセレクターは、ARN によって Bedrock データイベントを特定のリソースにスコープしています。ボリュームをさらに削減するには、ARN プレフィックスを本番環境のエージェントとナレッジベースのみに絞り込み、非本番環境または実験的なリソースを除外します。

Replace resource IDs with your actual production resource identifiers

以下のリソース ID (PROD_AGENT_ID, PROD_KB_ID) はです。実際のエージェントおよびナレッジベース ID は、本番環境のものに置き換えてください。これらの ID は、Bedrock コンソールAgents および Knowledge bases から確認するか、または実行することで取得できます。 aws bedrock list-agents および aws bedrock list-knowledge-bases.

What this does

ARN が特定のリソース ID プレフィックスに一致するエージェントエイリアスとナレッジベースのみに Bedrock データイベントのログを制限します。本番環境で使用されている正確なエージェントとナレッジベースの ID を特定済みで、それ以外をすべて除外したい場合に使用します。置き換えてください。 ACCOUNT_ID リソース ID をご自身の値に置き換えてください。

Bedrock-Production-Agents-Only
[
{
"Name": "Bedrock-Production-Agents-Only",
"FieldSelectors": [
{
"Field": "eventCategory",
"Equals": ["Data"]
},
{
"Field": "resources.type",
"Equals": ["AWS::Bedrock::AgentAlias"]
},
{
"Field": "resources.ARN",
"StartsWith": [
"arn:aws:bedrock:REGION:ACCOUNT_ID:agent-alias/PROD_AGENT_ID"
]
}
]
},
{
"Name": "Bedrock-Production-KnowledgeBases-Only",
"FieldSelectors": [
{
"Field": "eventCategory",
"Equals": ["Data"]
},
{
"Field": "resources.type",
"Equals": ["AWS::Bedrock::KnowledgeBase"]
},
{
"Field": "resources.ARN",
"StartsWith": [
"arn:aws:bedrock:REGION:ACCOUNT_ID:knowledge-base/PROD_KB_ID"
]
}
]
}
]

Amazon S3: AI バケットへの書き込み専用

AI 専用バケットへの書き込み操作のみをログに記録することで、Amazon S3 データイベントのボリュームを削減します。不正なデータ転送の検出を優先する場合は、高価値バケットに対して後から読み取り操作を追加できます。

Amazon S3 書き込み専用の高度なイベントセレクター JSON の完全な内容については、セクション 6.2 を参照してください。

インラインエージェント: IAM Identity によるフィルタリング

The AWS::Bedrock::InlineAgent セレクターはサポートしていません resources.ARN インラインエージェントには永続的なリソース ARN がないため、フィルタリングが行われます。追加のフィルタリングがない場合、このセレクターはすべてをキャプチャします。 InvokeInlineAgent アカウント全体の呼び出しは、大量のデータイベントとコストを生成する可能性があります。userIdentity.arn フィールドを使用して、特定の IAM ロール(例えば、本番環境の Bedrock 実行ロール)にロギングをスコープし、大量のインラインエージェント呼び出しを生成する開発ロールや自動化されたサービスロールを除外します。

Replace role names with your actual IAM role names

以下のロール名 (BEDROCK_EXECUTION_ROLE_NAME, dev-, test-) はです。置き換えてください ACCOUNT_ID AWS アカウント ID と BEDROCK_EXECUTION_ROLE_NAME アプリケーションが呼び出しに使用する IAM ロールの実際の名前に置き換えてください InvokeInlineAgentロール名は、IAM コンソール[ロール] で確認するか、Bedrock エージェントに設定された実行ロールを確認してください。[Exclude Dev Roles] タブで、置き換えます。 dev- および test- 組織が非本番環境のロールに使用する実際の命名プレフィックスに置き換えてください。

What this does

特定の ARN プレフィックスに一致する IAM ロールによって行われた呼び出しのみに、InlineAgent データイベントのログを制限します。 eventName フィルターはキャプチャを以下のみに制限します InvokeInlineAgent 呼び出しはキャプチャされ、 userIdentity.arn フィルタースコープを本番ロールに絞り込みます。置き換えてください。 ACCOUNT_ID AWS アカウント ID と BEDROCK_EXECUTION_ROLE_NAME アプリケーションが呼び出しに使用する IAM ロールの実際の名前に置き換えてください。 InvokeInlineAgent.

Bedrock-InlineAgent-ProductionRolesOnly
[
{
"Name": "Bedrock-InlineAgent-ProductionRolesOnly",
"FieldSelectors": [
{
"Field": "eventCategory",
"Equals": ["Data"]
},
{
"Field": "resources.type",
"Equals": ["AWS::Bedrock::InlineAgent"]
},
{
"Field": "eventName",
"Equals": ["InvokeInlineAgent"]
},
{
"Field": "userIdentity.arn",
"StartsWith": [
"arn:aws:sts::ACCOUNT_ID:assumed-role/BEDROCK_EXECUTION_ROLE_NAME"
]
}
]
}
]
ヒント

The userIdentity.arn フィールドはすべての高度なイベントセレクターでサポートされており、InlineAgent に限定されません。大量のデータイベントセレクターであれば、同じフィルタリング手法を適用できます。 resources.ARN フィルタリングでは不十分です。サポートされているフィールドと演算子の完全なリストについては、高度なイベントセレクターを使用したデータイベントのフィルタリングを参照してください。

Lambda: 本番環境の関数のみ

本番 AI ワークロードに対してデータイベントのログ記録をスコープ設定することで、 StartsWith operator を本番環境の関数プレフィックスのみに (prod-, ai-agent-)。開発およびテスト関数は、プレフィックスが一致しないため、定義上除外されます。

Lambda の本番環境専用の高度なイベントセレクター JSON の完全な内容については、セクション 6.4 を参照してください。

CloudTrail ネットワークアクティビティイベント: VpceAccessDenied のみ

ネットワークアクティビティイベントについては、Bedrock、Amazon S3、および Lambda VPC エンドポイント全体で拒否されたアクセスのみをログに記録することで、すべてのネットワークアクティビティをログに記録する場合と比較してボリュームを削減しながら、重要なセキュリティイベントを捉えることができます。

Bedrock、Amazon S3、および Lambda の VpceAccessDenied ネットワークアクティビティイベントセレクターの完全な JSON については、ネットワークアクティビティイベントの高度なイベントセレクターフィールドを参照してください。

AgentCore: セキュリティ優先度による段階的な有効化

AgentCore データイベントは 14 種類のリソースタイプにまたがります。セキュリティの優先度に基づいて、段階的に有効化してください。

  1. フェーズ 1 (最高優先度): Gateway (AWS::BedrockAgentCore::Gateway) および認証情報アクセス (TokenVault, OAuth2CredentialProvider, APIKeyCredentialProvider) — これらは外部アクセスと認証情報の取得(セキュリティ上最も重要な 2 つのサーフェス)をキャプチャします。
  2. フェーズ 2: Runtime と RuntimeEndpoint — エージェントのライフサイクルとセッション管理をキャプチャします。
  3. フェーズ 3: 組み込みツール (CodeInterpreter, Browser およびそれらのカスタムバリアント) — 現実世界でのエージェントのアクションをキャプチャします。
  4. フェーズ 4: Memory、WorkloadIdentity、WorkloadIdentityDirectory、および Evaluator — エージェントの状態と ID 管理をキャプチャします。

特定のゲートウェイに Gateway データイベントを絞り込むには、広範な gateway/ 特定のゲートウェイ ID をプレフィックスとして付加します。

{
"Field": "resources.ARN",
"StartsWith": ["arn:aws:bedrock-agentcore:REGION:ACCOUNT_ID:gateway/PROD_GATEWAY_ID"]
}

同様に、Runtime データイベントを特定のエージェントランタイムに絞り込むには、次のようにします。

{
"Field": "resources.ARN",
"StartsWith": ["arn:aws:bedrock-agentcore:REGION:ACCOUNT_ID:runtime/PROD_RUNTIME_ID"]
}

CloudTrail の組織レベルトレイルの高度なイベントセレクター

複数のアカウントをカバーする AWS Organizations トレイルの場合、すべての AI ワークロードセレクターを 1 つのトレイル設定にまとめます。これにより、Bedrock データイベント、AgentCore データイベント、S3 書き込み専用フィルタリング、Lambda 本番関数ログ、および Bedrock ネットワークアクティビティの拒否アクセス検出を組み合わせた完全な高度なイベントセレクターのセットが、1 つのトレイルで定義されます。

Replace all placeholder values before applying

以下のセレクターは、すべてのサービスセレクターを単一の組織トレイルに組み合わせたです。適用する前に、すべてのプレースホルダーを実際のリソース識別子に置き換える必要があります。

プレースホルダー参照テーブルの全内容については、上記の Bedrock および AgentCore セクションを参照してください。複数のアカウントにまたがる組織トレイルの場合、異なる設定でセレクターを複製する必要がある場合があります。 ACCOUNT_ID 値を使用するか、各メンバーアカウントにスコープされたより広い ARN プレフィックスを使用します。

完全な Organization Trail セレクター (34 セレクター — JSON) を表示
org-trail-all-ai-workload-selectors.json
[
{
"Name": "OrgTrail-Bedrock-AgentInvocations",
"FieldSelectors": [
{ "Field": "eventCategory", "Equals": ["Data"] },
{ "Field": "resources.type", "Equals": ["AWS::Bedrock::AgentAlias"] },
{ "Field": "resources.ARN", "StartsWith": ["arn:aws:bedrock:REGION:ACCOUNT_ID:agent-alias/AGENT_ID/"] }
]
},
{
"Name": "OrgTrail-Bedrock-InlineAgent",
"FieldSelectors": [
{ "Field": "eventCategory", "Equals": ["Data"] },
{ "Field": "resources.type", "Equals": ["AWS::Bedrock::InlineAgent"] },
{ "Field": "eventName", "Equals": ["InvokeInlineAgent"] },
{ "Field": "userIdentity.arn", "StartsWith": ["arn:aws:sts::ACCOUNT_ID:assumed-role/BEDROCK_EXECUTION_ROLE_NAME"] }
]
},
{
"Name": "OrgTrail-Bedrock-KnowledgeBase",
"FieldSelectors": [
{ "Field": "eventCategory", "Equals": ["Data"] },
{ "Field": "resources.type", "Equals": ["AWS::Bedrock::KnowledgeBase"] },
{ "Field": "resources.ARN", "StartsWith": ["arn:aws:bedrock:REGION:ACCOUNT_ID:knowledge-base/KB_ID"] }
]
},
{
"Name": "OrgTrail-Bedrock-FlowAlias",
"FieldSelectors": [
{ "Field": "eventCategory", "Equals": ["Data"] },
{ "Field": "resources.type", "Equals": ["AWS::Bedrock::FlowAlias"] },
{ "Field": "resources.ARN", "StartsWith": ["arn:aws:bedrock:REGION:ACCOUNT_ID:flow/FLOW_ID/alias/"] }
]
},
{
"Name": "OrgTrail-Bedrock-Guardrail",
"FieldSelectors": [
{ "Field": "eventCategory", "Equals": ["Data"] },
{ "Field": "resources.type", "Equals": ["AWS::Bedrock::Guardrail"] },
{ "Field": "resources.ARN", "StartsWith": ["arn:aws:bedrock:REGION:ACCOUNT_ID:guardrail/GUARDRAIL_ID"] }
]
},
{
"Name": "OrgTrail-Bedrock-Model",
"FieldSelectors": [
{ "Field": "eventCategory", "Equals": ["Data"] },
{ "Field": "resources.type", "Equals": ["AWS::Bedrock::Model"] },
{ "Field": "eventName", "Equals": ["InvokeModelWithBidirectionalStream"] }
]
},
{
"Name": "OrgTrail-Bedrock-AsyncInvoke",
"FieldSelectors": [
{ "Field": "eventCategory", "Equals": ["Data"] },
{ "Field": "resources.type", "Equals": ["AWS::Bedrock::AsyncInvoke"] },
{ "Field": "eventName", "Equals": ["GetAsyncInvoke", "StartAsyncInvoke"] }
]
},
{
"Name": "OrgTrail-Bedrock-Prompt",
"FieldSelectors": [
{ "Field": "eventCategory", "Equals": ["Data"] },
{ "Field": "resources.type", "Equals": ["AWS::Bedrock::PromptVersion"] },
{ "Field": "resources.ARN", "StartsWith": ["arn:aws:bedrock:REGION:ACCOUNT_ID:prompt/PROMPT_ID"] }
]
},
{
"Name": "OrgTrail-Bedrock-Session",
"FieldSelectors": [
{ "Field": "eventCategory", "Equals": ["Data"] },
{ "Field": "resources.type", "Equals": ["AWS::Bedrock::Session"] },
{ "Field": "resources.ARN", "StartsWith": ["arn:aws:bedrock:REGION:ACCOUNT_ID:session/"] },
{ "Field": "readOnly", "Equals": ["false"] }
]
},
{
"Name": "OrgTrail-Bedrock-FlowExecution",
"FieldSelectors": [
{ "Field": "eventCategory", "Equals": ["Data"] },
{ "Field": "resources.type", "Equals": ["AWS::Bedrock::FlowExecution"] },
{ "Field": "resources.ARN", "StartsWith": ["arn:aws:bedrock:REGION:ACCOUNT_ID:flow/FLOW_ID/alias/"] }
]
},
{
"Name": "OrgTrail-Bedrock-AutomatedReasoningPolicy",
"FieldSelectors": [
{ "Field": "eventCategory", "Equals": ["Data"] },
{ "Field": "resources.type", "Equals": ["AWS::Bedrock::AutomatedReasoningPolicy"] },
{ "Field": "resources.ARN", "StartsWith": ["arn:aws:bedrock:REGION:ACCOUNT_ID:automated-reasoning-policy/POLICY_ID"] }
]
},
{
"Name": "OrgTrail-Bedrock-AutomatedReasoningPolicyVersion",
"FieldSelectors": [
{ "Field": "eventCategory", "Equals": ["Data"] },
{ "Field": "resources.type", "Equals": ["AWS::Bedrock::AutomatedReasoningPolicyVersion"] },
{ "Field": "resources.ARN", "StartsWith": ["arn:aws:bedrock:REGION:ACCOUNT_ID:automated-reasoning-policy/POLICY_ID"] }
]
},
{
"Name": "OrgTrail-Bedrock-DataAutomationProject",
"FieldSelectors": [
{ "Field": "eventCategory", "Equals": ["Data"] },
{ "Field": "resources.type", "Equals": ["AWS::Bedrock::DataAutomationProject"] },
{ "Field": "resources.ARN", "StartsWith": ["arn:aws:bedrock:REGION:ACCOUNT_ID:data-automation-project/PROJECT_ID"] }
]
},
{
"Name": "OrgTrail-Bedrock-DataAutomationInvocation",
"FieldSelectors": [
{ "Field": "eventCategory", "Equals": ["Data"] },
{ "Field": "resources.type", "Equals": ["AWS::Bedrock::DataAutomationInvocation"] },
{ "Field": "resources.ARN", "StartsWith": ["arn:aws:bedrock:REGION:ACCOUNT_ID:data-automation-invocation/"] },
{ "Field": "readOnly", "Equals": ["false"] }
]
},
{
"Name": "OrgTrail-Bedrock-DataAutomationProfile",
"FieldSelectors": [
{ "Field": "eventCategory", "Equals": ["Data"] },
{ "Field": "resources.type", "Equals": ["AWS::Bedrock::DataAutomationProfile"] },
{ "Field": "resources.ARN", "StartsWith": ["arn:aws:bedrock:REGION:ACCOUNT_ID:data-automation-profile/"] },
{ "Field": "readOnly", "Equals": ["false"] }
]
},
{
"Name": "OrgTrail-Bedrock-Blueprint",
"FieldSelectors": [
{ "Field": "eventCategory", "Equals": ["Data"] },
{ "Field": "resources.type", "Equals": ["AWS::Bedrock::Blueprint"] },
{ "Field": "resources.ARN", "StartsWith": ["arn:aws:bedrock:REGION:ACCOUNT_ID:blueprint/"] },
{ "Field": "readOnly", "Equals": ["false"] }
]
},
{
"Name": "OrgTrail-Bedrock-AdvancedOptimizePromptJob",
"FieldSelectors": [
{ "Field": "eventCategory", "Equals": ["Data"] },
{ "Field": "resources.type", "Equals": ["AWS::Bedrock::AdvancedOptimizePromptJob"] },
{ "Field": "resources.ARN", "StartsWith": ["arn:aws:bedrock:REGION:ACCOUNT_ID:advanced-optimize-prompt-job/"] },
{ "Field": "readOnly", "Equals": ["false"] }
]
},
{
"Name": "OrgTrail-Bedrock-Tool",
"FieldSelectors": [
{ "Field": "eventCategory", "Equals": ["Data"] },
{ "Field": "resources.type", "Equals": ["AWS::Bedrock::Tool"] },
{ "Field": "resources.ARN", "StartsWith": ["arn:aws:bedrock:REGION:ACCOUNT_ID:tool/TOOL_ID"] }
]
},
{
"Name": "OrgTrail-AgentCore-Gateway",
"FieldSelectors": [
{ "Field": "eventCategory", "Equals": ["Data"] },
{ "Field": "resources.type", "Equals": ["AWS::BedrockAgentCore::Gateway"] },
{ "Field": "resources.ARN", "StartsWith": ["arn:aws:bedrock-agentcore:REGION:ACCOUNT_ID:gateway/GATEWAY_ID"] }
]
},
{
"Name": "OrgTrail-AgentCore-Runtime",
"FieldSelectors": [
{ "Field": "eventCategory", "Equals": ["Data"] },
{ "Field": "resources.type", "Equals": ["AWS::BedrockAgentCore::Runtime"] },
{ "Field": "resources.ARN", "StartsWith": ["arn:aws:bedrock-agentcore:REGION:ACCOUNT_ID:runtime/RUNTIME_ID"] }
]
},
{
"Name": "OrgTrail-AgentCore-RuntimeEndpoint",
"FieldSelectors": [
{ "Field": "eventCategory", "Equals": ["Data"] },
{ "Field": "resources.type", "Equals": ["AWS::BedrockAgentCore::RuntimeEndpoint"] },
{ "Field": "resources.ARN", "StartsWith": ["arn:aws:bedrock-agentcore:REGION:ACCOUNT_ID:runtime/RUNTIME_ID"] }
]
},
{
"Name": "OrgTrail-AgentCore-CodeInterpreter",
"FieldSelectors": [
{ "Field": "eventCategory", "Equals": ["Data"] },
{ "Field": "resources.type", "Equals": ["AWS::BedrockAgentCore::CodeInterpreter"] }
]
},
{
"Name": "OrgTrail-AgentCore-Browser",
"FieldSelectors": [
{ "Field": "eventCategory", "Equals": ["Data"] },
{ "Field": "resources.type", "Equals": ["AWS::BedrockAgentCore::Browser"] }
]
},
{
"Name": "OrgTrail-AgentCore-WorkloadIdentity",
"FieldSelectors": [
{ "Field": "eventCategory", "Equals": ["Data"] },
{ "Field": "resources.type", "Equals": ["AWS::BedrockAgentCore::WorkloadIdentity"] },
{ "Field": "resources.ARN", "StartsWith": ["arn:aws:bedrock-agentcore:REGION:ACCOUNT_ID:workload-identity-directory/DIRECTORY_ID"] }
]
},
{
"Name": "OrgTrail-AgentCore-TokenVault",
"FieldSelectors": [
{ "Field": "eventCategory", "Equals": ["Data"] },
{ "Field": "resources.type", "Equals": ["AWS::BedrockAgentCore::TokenVault"] },
{ "Field": "resources.ARN", "StartsWith": ["arn:aws:bedrock-agentcore:REGION:ACCOUNT_ID:token-vault/default"] }
]
},
{
"Name": "OrgTrail-AgentCore-OAuth2CredentialProvider",
"FieldSelectors": [
{ "Field": "eventCategory", "Equals": ["Data"] },
{ "Field": "resources.type", "Equals": ["AWS::BedrockAgentCore::OAuth2CredentialProvider"] },
{ "Field": "resources.ARN", "StartsWith": ["arn:aws:bedrock-agentcore:REGION:ACCOUNT_ID:token-vault/default/oauth2credentialprovider/PROVIDER_NAME"] }
]
},
{
"Name": "OrgTrail-AgentCore-APIKeyCredentialProvider",
"FieldSelectors": [
{ "Field": "eventCategory", "Equals": ["Data"] },
{ "Field": "resources.type", "Equals": ["AWS::BedrockAgentCore::APIKeyCredentialProvider"] },
{ "Field": "resources.ARN", "StartsWith": ["arn:aws:bedrock-agentcore:REGION:ACCOUNT_ID:token-vault/default/apikeycredentialprovider/PROVIDER_NAME"] }
]
},
{
"Name": "OrgTrail-AgentCore-Memory",
"FieldSelectors": [
{ "Field": "eventCategory", "Equals": ["Data"] },
{ "Field": "resources.type", "Equals": ["AWS::BedrockAgentCore::Memory"] },
{ "Field": "resources.ARN", "StartsWith": ["arn:aws:bedrock-agentcore:REGION:ACCOUNT_ID:memory/MEMORY_ID"] }
]
},
{
"Name": "OrgTrail-AgentCore-Evaluator",
"FieldSelectors": [
{ "Field": "eventCategory", "Equals": ["Data"] },
{ "Field": "resources.type", "Equals": ["AWS::BedrockAgentCore::Evaluator"] },
{ "Field": "resources.ARN", "StartsWith": ["arn:aws:bedrock-agentcore:REGION:ACCOUNT_ID:evaluator/EVALUATOR_ID"] }
]
},
{
"Name": "OrgTrail-S3-AI-WriteOnly",
"FieldSelectors": [
{ "Field": "eventCategory", "Equals": ["Data"] },
{ "Field": "resources.type", "Equals": ["AWS::S3::Object"] },
{ "Field": "readOnly", "Equals": ["false"] },
{
"Field": "resources.ARN",
"StartsWith": [
"arn:aws:s3:::ai-",
"arn:aws:s3:::model-",
"arn:aws:s3:::training-"
]
}
]
},
{
"Name": "OrgTrail-Lambda-ProdAI",
"FieldSelectors": [
{ "Field": "eventCategory", "Equals": ["Data"] },
{ "Field": "resources.type", "Equals": ["AWS::Lambda::Function"] },
{
"Field": "resources.ARN",
"StartsWith": ["arn:aws:lambda:REGION:ACCOUNT_ID:function:prod-"]
}
]
},
{
"Name": "OrgTrail-Network-BedrockDenied",
"FieldSelectors": [
{ "Field": "eventCategory", "Equals": ["NetworkActivity"] },
{ "Field": "eventSource", "Equals": ["bedrock.amazonaws.com"] },
{ "Field": "errorCode", "Equals": ["VpceAccessDenied"] }
]
},
{
"Name": "OrgTrail-Network-S3Denied",
"FieldSelectors": [
{ "Field": "eventCategory", "Equals": ["NetworkActivity"] },
{ "Field": "eventSource", "Equals": ["s3.amazonaws.com"] },
{ "Field": "errorCode", "Equals": ["VpceAccessDenied"] }
]
},
{
"Name": "OrgTrail-Network-LambdaDenied",
"FieldSelectors": [
{ "Field": "eventCategory", "Equals": ["NetworkActivity"] },
{ "Field": "eventSource", "Equals": ["lambda.amazonaws.com"] },
{ "Field": "errorCode", "Equals": ["VpceAccessDenied"] }
]
}
]

AI ワークロードのセキュリティ分析

前のセクションでは、CloudTrail がキャプチャする内容(イベントセレクター、リソースタイプ、CloudWatch Logs への配信)を設定しました。このセクションでは、有効化から検出へと焦点を移します。以下のクエリは、意図しないアクセス試行やガードレールの変更から、エージェントの認証情報アクセスやゲートウェイの認証失敗まで、これらのイベントに埋もれたセキュリティシグナルを浮き彫りにします。

CloudWatch Logs Insights は OpenSearch SQL 構文 をサポートしており、ロググループをまたいだ複雑な JOIN、クロスサービス相関のためのサブクエリ、時間ベースおよび集計分析のための豊富な SQL 関数セットを利用できます。以下のすべてのクエリは、AI ワークロードのユースケースに特化してスコープされています。クエリは、管理イベント、データイベント(エージェント呼び出し、ナレッジベース取得、フロー呼び出し、AgentCore ゲートウェイトラフィック、組み込みツール使用、認証情報アクセス、メモリ操作)、ネットワークアクティビティイベント(VPC エンドポイント拒否)、およびエージェントからリソースへのアクセスパターンのクロスサービス相関をカバーしています。

Replace log group names in all queries

すべてのクエリは次を使用します YOUR_CLOUDTRAIL_LOG_GROUP プレースホルダーとして使用します。CloudTrail トレイルがイベントを配信する CloudWatch Logs ロググループの名前に置き換えてください(例: aws-cloudtrail-logs/management-events)。これはトレイルの CloudWatch Logs 設定の CloudTrail コンソールで確認できます。クロスパイプラインクエリも参照します bedrock-model-invocation-logging および aws/spans — ログ グループに異なる名前を使用している場合は、それらを置き換えてください。

Important

CloudWatch Logs Insights で OpenSearch SQL 構文を使用する場合、特殊文字を含むフィールドはバッククォートで囲んでください。例:`userIdentity.arn`, `responseElements.ConsoleLogin`. ダッシュボードでこれらのクエリウィジェットを作成する際は、クエリ言語を SQL に設定してください。

クエリ 1: 不正な Bedrock アクセスの検出 (管理イベントとデータイベント)

Bedrock API に対して AccessDenied または UnauthorizedOperation エラーを受け取っているすべての IAM アイデンティティを表示します。

IAM アイデンティティをすべて表示します AccessDenied または UnauthorizedOperation Bedrock API に対するエラーを、管理イベント(モデル呼び出し)とデータイベント(エージェント、ナレッジベース、フロー、ガードレール操作)の両方にわたって頻度順にランク付けして表示します。見慣れないアイデンティティからのカウントが多い場合は、意図しないアクセス試行の指標となります。

Query 1: Detect Unauthorized Bedrock Access
GROUP BY `userIdentity.arn`, eventName, errorCode, errorMessage, sourceIPAddress
ORDER BY attempt_count DESC

クエリ 2: IAM アイデンティティ別に Bedrock Agent の呼び出しを監視する

どの IAM アイデンティティが Bedrock エージェントおよびインラインエージェントの呼び出しをトリガーしているかを追跡します

どの IAM アイデンティティが Bedrock エージェントおよびインラインエージェントの呼び出しをトリガーしているかを追跡します。エージェントは呼び出しごとに複数のダウンストリーム API 呼び出しを連鎖させるため、見慣れないアイデンティティやボリュームの急増はアクセス範囲が広くなります。このクエリは、 AWS::Bedrock::AgentAlias および AWS::Bedrock::InlineAgent 高度なイベントセレクター。

Query 2: Bedrock Agent Invocations by IAM Identity
SELECT `userIdentity.arn` AS iam_identity,
eventName,
sourceIPAddress,
awsRegion,
COUNT(*) AS agent_invocation_count
FROM `YOUR_CLOUDTRAIL_LOG_GROUP`
WHERE eventSource = 'bedrock.amazonaws.com'
AND eventName IN ('InvokeAgent', 'InvokeInlineAgent')
GROUP BY `userIdentity.arn`, eventName, sourceIPAddress, awsRegion
ORDER BY agent_invocation_count DESC

クエリ 3: IAM アイデンティティ別に Knowledge Base 取得アクティビティをモニタリングする

Bedrock Knowledge Bases に対して Retrieve および RetrieveAndGenerate 呼び出しを行っている IAM アイデンティティをランク付けします。

どの IAM アイデンティティがリクエストを行っているかをランク付けします Retrieve および RetrieveAndGenerate Bedrock Knowledge Bases に対する呼び出しです。ナレッジベースには組織の独自データが含まれており、見慣れないアイデンティティや予期しないボリュームの急増は、異常なデータアクセスを示している可能性があります。このクエリは、以下によってキャプチャされたデータイベントを対象としています。 AWS::Bedrock::KnowledgeBase 高度なイベントセレクター。

Query 3: Knowledge Base Retrieval Activity
SELECT `userIdentity.arn` AS iam_identity,
eventName,
sourceIPAddress,
COUNT(*) AS retrieval_count
FROM `YOUR_CLOUDTRAIL_LOG_GROUP`
WHERE eventSource = 'bedrock.amazonaws.com'
AND eventName IN ('Retrieve', 'RetrieveAndGenerate')
GROUP BY `userIdentity.arn`, eventName, sourceIPAddress
ORDER BY retrieval_count DESC

クエリ 4: エージェントのクロスサービスアクセス拒否の検出

S3、Lambda、KMS、Secrets Manager、SageMaker などのダウンストリームサービスへのアクセスが拒否された引き受けロールを表示します。

Amazon S3、Lambda、KMS、Secrets Manager、または SageMaker へのアクセス試行時にアクセスを拒否されている引き受けられたロール(通常は Bedrock エージェント実行ロール)を表示します。これは、エージェントからリソースへのアクセス制御例外を検出するための主要なクエリです。単一のロールからのカウントが多い場合は、エージェントのアクセス許可境界の設定ミス、またはエージェントが意図したスコープ外のリソースにアクセスしていることを示します。Agentic AI Security Scoping Matrix の Identity ディメンション(Confused Deputy Problem の検出)および Scope ディメンション(運用境界の適用)を実装します。また、Generative AI Security Scoping Matrix の Controls ディメンション(最小権限アクセスの適用)も実装します。)

Query 4: Agent Cross-Service Access Denied
SELECT `userIdentity.arn` AS iam_identity,
eventSource,
eventName,
errorCode,
errorMessage,
sourceIPAddress,
COUNT(*) AS denied_count
FROM `YOUR_CLOUDTRAIL_LOG_GROUP`
WHERE errorCode IN ('AccessDenied', 'UnauthorizedOperation')
AND `userIdentity.type` = 'AssumedRole'
AND eventSource IN (
's3.amazonaws.com',
'lambda.amazonaws.com',
'kms.amazonaws.com',
'secretsmanager.amazonaws.com',
'sagemaker.amazonaws.com'
)
GROUP BY `userIdentity.arn`, eventSource, eventName, errorCode, errorMessage, sourceIPAddress
ORDER BY denied_count DESC

クエリ 6: 予期しないソース IP からの Bedrock 呼び出しを検出する

Bedrock および AgentCore の呼び出しを行っているすべての一意のソース IP アドレスを一覧表示します

Bedrock および AgentCore の呼び出し(モデル呼び出し、エージェント呼び出し、ナレッジベースの取得、フロー呼び出し、非同期呼び出し、ガードレールの適用、AgentCore ゲートウェイ呼び出しを含む)を行っているすべての一意のソース IP アドレスを一覧表示します。AI ワークロードが特定の CIDR 範囲(VPC NAT ゲートウェイ、企業ネットワーク)からのみ発信される必要がある場合、見慣れない IP アドレスは承認済みであることを確認するために調査する必要があります。

Query 6: Bedrock Calls from Unexpected Source IPs
SELECT sourceIPAddress,
`userIdentity.arn` AS iam_identity,
eventSource,
eventName,
COUNT(*) AS call_count
FROM `YOUR_CLOUDTRAIL_LOG_GROUP`
WHERE eventSource IN ('bedrock.amazonaws.com', 'bedrock-agentcore.amazonaws.com')
AND eventName IN ('InvokeModel', 'InvokeModelWithResponseStream',
'Converse', 'ConverseStream',
'InvokeAgent', 'InvokeInlineAgent',
'Retrieve', 'RetrieveAndGenerate',
'InvokeFlow', 'ApplyGuardrail',
'InvokeModelWithBidirectionalStream',
'GetAsyncInvoke', 'StartAsyncInvoke',
'RenderPrompt', 'InvokeGateway')
GROUP BY sourceIPAddress, `userIdentity.arn`, eventSource, eventName
ORDER BY call_count DESC

クエリ 10: ルートアカウントアクティビティの検出

ルートアカウントによって実行されたすべての非ログインイベントを返します

ルートアカウントによって実行されたすべての非ログインイベントを返します。緊急アクセスシナリオ以外でのルートの使用は、重要なセキュリティイベントです。

Query 10: Root Account Activity Detection
SELECT eventTime,
eventName,
eventSource,
sourceIPAddress,
awsRegion,
errorCode
FROM `YOUR_CLOUDTRAIL_LOG_GROUP`
WHERE `userIdentity.type` = 'Root'
AND eventName != 'ConsoleLogin'
ORDER BY eventTime DESC

クエリ 23: Bedrock セッションアクティビティのモニタリング

マルチターンの Bedrock 会話におけるセッションレベルの API アクティビティを追跡します

Bedrock 全体のセッション操作(セッションの作成、更新、取得を含む)をすべて表示します。セッションはマルチターン会話全体にわたって状態を維持します。見慣れないアイデンティティがセッションを作成またはアクセスしている場合、会話型 AI リソースの異常な使用を示している可能性があります。( エージェント型 AI セキュリティスコーピングマトリックスのオーケストレーション次元(エージェントとシステム間のインタラクション管理およびセッションフロー制御)を実装しています。)

Query 23: Bedrock Session Activity
SELECT `userIdentity.arn` AS iam_identity,
eventName,
`resources.0.ARN` AS sessionArn,
sourceIPAddress,
awsRegion,
COUNT(*) AS session_operation_count
FROM `YOUR_CLOUDTRAIL_LOG_GROUP`
WHERE eventSource = 'bedrock.amazonaws.com'
AND `resources.0.type` = 'AWS::Bedrock::Session'
GROUP BY `userIdentity.arn`, eventName, `resources.0.ARN`, sourceIPAddress, awsRegion
ORDER BY session_operation_count DESC

クエリ 24: Bedrock フロー実行アクティビティの監視

プロンプトフローの実行を監視するためのフロー実行操作を追跡します

フロー実行は、Bedrock Prompt Flows のアクティブな実行を表します。これは、モデル呼び出し、データ変換、および条件付きロジックを連鎖させるマルチステップ AI パイプラインです。見慣れないアイデンティティからの予期しないフロー実行や、ボリュームの急増は、異常なオーケストレーションアクティビティを示している可能性があります。(「エージェント型 AI セキュリティスコーピングマトリックス」のオーケストレーション次元 — 実行フロー制御およびエージェントとシステム間のインタラクション管理を実装しています。)

Query 24: Bedrock Flow Execution Activity
SELECT `userIdentity.arn` AS iam_identity,
eventName,
`resources.0.ARN` AS flowExecutionArn,
sourceIPAddress,
awsRegion,
errorCode,
COUNT(*) AS execution_count
FROM `YOUR_CLOUDTRAIL_LOG_GROUP`
WHERE eventSource = 'bedrock.amazonaws.com'
AND `resources.0.type` = 'AWS::Bedrock::FlowExecution'
GROUP BY `userIdentity.arn`, eventName, `resources.0.ARN`, sourceIPAddress, awsRegion, errorCode
ORDER BY execution_count DESC

クエリ 25: Bedrock Data Automation アクティビティのモニタリング

ドキュメントおよびメディア処理のためのデータ自動化プロジェクトと呼び出しアクティビティを追跡します

Bedrock Data Automation は、AI パイプラインを通じてドキュメント、画像、メディアを処理します。意図しない呼び出しにより、自動化ワークフローを通じてドキュメントが処理されたり、意図した境界の外にデータが移動したりする可能性があります。このクエリは、プロジェクトおよび呼び出し全体のすべてのデータ自動化アクティビティを表示します。( Generative AI Security Scoping Matrix のガバナンスとコンプライアンス次元を実装 — データ処理操作とデータ主権の監査証跡。)

Query 25: Bedrock Data Automation Activity
SELECT `userIdentity.arn` AS iam_identity,
eventName,
`resources.0.type` AS resourceType,
`resources.0.ARN` AS resourceArn,
sourceIPAddress,
errorCode,
COUNT(*) AS automation_count
FROM `YOUR_CLOUDTRAIL_LOG_GROUP`
WHERE eventSource = 'bedrock.amazonaws.com'
AND `resources.0.type` IN (
'AWS::Bedrock::DataAutomationProject',
'AWS::Bedrock::DataAutomationInvocation',
'AWS::Bedrock::DataAutomationProfile'
)
GROUP BY `userIdentity.arn`, eventName, `resources.0.type`, `resources.0.ARN`, sourceIPAddress, errorCode
ORDER BY automation_count DESC

クエリ 26: Bedrock ツール呼び出しの監視

ツール使用操作に対する Bedrock ツール API アクティビティを追跡します

Bedrock Tool イベントは、モデルが会話中にツールを呼び出すタイミングをキャプチャします。これらは、ツール使用を通じてモデルが現実世界で実行するアクションです。予期しないツール呼び出しパターンや見慣れない呼び出し元は、モデルが意図したスコープ外で動作していることを示します。( エージェント型 AI セキュリティスコーピングマトリックスのガードレール次元(ツール使用アクションの動作監視)およびスコープ次元(モデルが呼び出せるツールの運用境界の適用)を実装しています。)

Query 26: Bedrock Tool Invocations
SELECT `userIdentity.arn` AS iam_identity,
eventName,
`resources.0.ARN` AS toolArn,
sourceIPAddress,
COUNT(*) AS tool_invocation_count
FROM `YOUR_CLOUDTRAIL_LOG_GROUP`
WHERE eventSource = 'bedrock.amazonaws.com'
AND `resources.0.type` = 'AWS::Bedrock::Tool'
GROUP BY `userIdentity.arn`, eventName, `resources.0.ARN`, sourceIPAddress
ORDER BY tool_invocation_count DESC

クロスパイプライン相関クエリ

上記のクエリは CloudTrail のみを対象としています。以下のクエリは、CloudTrail と Bedrock Model Invocation Logging および ADOT スパンを結合し、単一のパイプラインだけでは回答できない質問に答えます。

Prerequisites

これらのクエリには、3 つのパイプラインすべてが有効になっている必要があります。

  • CloudTrail の配信先 YOUR_CLOUDTRAIL_LOG_GROUP Bedrock および AgentCore の管理イベントとデータイベントを使用
  • Bedrock モデル呼び出しログが有効化され、以下に配信されます bedrock-model-invocation-logging
  • エージェントテレメトリ (ADOT SDK) が次に流れます aws/spans
  • これらのウィジェットを作成する際にクエリ言語を SQL に設定する(すべての相関クエリは OpenSearch SQL を使用)

相関キー

結合キーフィールド注記
CloudTrail ↔ Model Invocation LoggingrequestID (CT) = requestId (Invocation Log)同じ Bedrock API 呼び出し、異なるビュー
CloudTrail ↔ ADOT spansrequestID (CT) = attributes.aws.request_id (span)どちらも同じ Bedrock リクエストを参照します
ADOT spans ↔ Model Invocation Loggingattributes.aws.request_id (span) = requestId (Invocation Log)同じモデル呼び出し。スパンにはレイテンシー、MIL にはコンテンツが含まれます
エージェントセッションをまたぐattributes.session.id (spans)エージェントフレームワークがセッションを設定します。CloudTrail にも MIL にも含まれません
Expand each query

以下のクエリタイトルをクリックすると展開され、完全な説明、メタデータ、および SQL ステートメントを確認できます。

クエリ 18: 誰が何を質問し、モデルは何と答えたか?

CloudTrail の呼び出し元 ID と Bedrock モデル呼び出しログのプロンプトおよびレスポンスコンテンツを結合します。
  • 目的: CloudTrail (呼び出し元 ID、送信元 IP) と Bedrock モデル呼び出しログ (プロンプトおよびレスポンスの内容) を結合します。 requestIdこれは「モデルに何を尋ねたのか、そしてモデルは何と答えたのか」という問いに答えるために頻繁に使用されるクエリです。セキュリティ監査、コンプライアンスレビュー、およびハルシネーション調査の基盤となります。例:顧客が不適切なモデルレスポンスを報告した場合、このクエリにより、呼び出し元の IAM ロール、送信元 IP、送信された正確なプロンプト、使用された推論パラメータ、およびレスポンスを 1 行で確認できます。( Generative AI Security Scoping Matrix のガバナンス&コンプライアンス次元(データ主権およびコンプライアンスレビュープロセスをサポートする監査証跡)と、Agentic AI Security Scoping Matrix の監査&ロギング次元(ID コンテキストを伴うアクションレベルのアクション追跡)を実装しています。)
  • ソース: YOUR_CLOUDTRAIL_LOG_GROUP + bedrock-model-invocation-logging
  • 表示: テーブル
  • クエリ言語: OpenSearch SQL
Query 18: Who Asked What, and What Did the Model Say?
SELECT
ct.eventTime AS timestamp,
ct.`userIdentity.arn` AS caller,
ct.sourceIPAddress AS sourceIP,
ct.eventName AS api,
ct.`userIdentity.inScopeOf.credentialsIssuedTo` AS lambdaFunction,
ct.requestID AS requestId,
ct.`additionalEventData.inputTokens` AS inputTokens,
ct.`additionalEventData.outputTokens` AS outputTokens,
inv.`input.inputBodyJson.messages.0.content.0.text` AS prompt,
inv.`input.inputBodyJson.inferenceConfig.temperature` AS temperature,
inv.`input.inputBodyJson.inferenceConfig.maxTokens` AS maxTokens,
inv.`output.outputBodyJson.stopReason` AS stopReason,
inv.`output.outputBodyJson.output.message.content.0.text` AS response,
inv.`output.outputBodyJson.usage.cacheReadInputTokens` AS cacheReadTokens,
inv.`output.outputBodyJson.usage.cacheCreationInputTokens` AS cacheWriteTokens,
inv.inferenceRegion
FROM `YOUR_CLOUDTRAIL_LOG_GROUP` AS ct
LEFT OUTER JOIN `bedrock-model-invocation-logging` AS inv
ON ct.requestID = inv.requestId
WHERE ct.eventSource = 'bedrock.amazonaws.com'
AND ct.eventName IN ('InvokeModel', 'InvokeModelWithResponseStream',
'Converse', 'ConverseStream')
ORDER BY ct.eventTime DESC
LIMIT 20

クエリ 19: 発信者 ID を使用したエージェントセッションパフォーマンス

ADOT スパンを CloudTrail と結合し、エージェントセッションのパフォーマンスを呼び出し元のアイデンティティにリンクします。
  • 目的: ADOT スパン (session.id、レイテンシー、トークン数) を CloudTrail (呼び出し元 IAM ロール、送信元 IP) と結合します。 requestId「このエージェントセッションの背後にある IAM アイデンティティは何か、そしてそのパフォーマンスはどうか?」という問いに答えます。例:ADOT ダッシュボードで p95 レイテンシが 12 秒の遅いエージェントセッションが表示されている場合、このクエリによって、特定の Lambda 関数または AgentCore ランタイムが高コストなモデルを呼び出していることが判明します。これにより、呼び出し元のモデル選択を調整できます。
  • ソース: aws/spans + YOUR_CLOUDTRAIL_LOG_GROUP
  • 表示: テーブル
  • クエリ言語: OpenSearch SQL
Query 19: Agent Session Performance with Caller Identity
SELECT
spans.`attributes.session.id` AS sessionId,
spans.traceId,
spans.`attributes.gen_ai.request.model` AS model,
spans.durationNano / 1000000 AS latencyMs,
spans.`attributes.gen_ai.usage.input_tokens` AS inputTokens,
spans.`attributes.gen_ai.usage.output_tokens` AS outputTokens,
ct.`userIdentity.arn` AS caller,
ct.sourceIPAddress AS sourceIP,
ct.`userIdentity.inScopeOf.issuerType` AS callerType,
ct.`userIdentity.inScopeOf.credentialsIssuedTo` AS callerResource
FROM `aws/spans` AS spans
LEFT OUTER JOIN `YOUR_CLOUDTRAIL_LOG_GROUP` AS ct
ON spans.`attributes.aws.request_id` = ct.requestID
WHERE spans.`resource.attributes.aws.service.type` = 'gen_ai_agent'
AND spans.`attributes.gen_ai.system` = 'aws.bedrock'
ORDER BY spans.`attributes.session.id`, spans.startTimeUnixNano DESC
LIMIT 50

クエリ 20: 完全な 3 パイプライン結合 — セッション、コンテンツ、パフォーマンス

単一のモデル呼び出しの統合ビューを得るために、requestId で 3 つのロググループすべてを結合します
  • 目的: 3 つのすべてのロググループを結合します requestId エージェントセッション (ADOT)、モデル呼び出しコンテンツ (Model Invocation Logging)、および呼び出し元のアイデンティティ (CloudTrail) を含む単一の行を提供し、テレメトリスタック全体にわたる単一のモデル呼び出しの統合ビューを実現します。誰が呼び出したか、何を尋ねたか、モデルが何を返したか、どれくらい時間がかかったか、どのエージェントセッションに属していたかなど、すべての情報が必要な詳細なイベント調査に使用します。
  • ソース: YOUR_CLOUDTRAIL_LOG_GROUP + bedrock-model-invocation-logging + aws/spans
  • 表示: テーブル
  • クエリ言語: OpenSearch SQL
Query 20: Full Three-Pipeline Join
SELECT
ct.eventTime AS timestamp,
ct.`userIdentity.arn` AS caller,
ct.sourceIPAddress AS sourceIP,
spans.`attributes.session.id` AS sessionId,
spans.traceId,
spans.durationNano / 1000000 AS latencyMs,
inv.modelId,
inv.`input.inputBodyJson.inferenceConfig.temperature` AS temperature,
inv.`input.inputBodyJson.messages.0.content.0.text` AS prompt,
inv.`output.outputBodyJson.output.message.content.0.text` AS response,
inv.`output.outputBodyJson.stopReason` AS stopReason,
inv.`input.inputTokenCount` AS inputTokens,
inv.`output.outputTokenCount` AS outputTokens
FROM `YOUR_CLOUDTRAIL_LOG_GROUP` AS ct
LEFT OUTER JOIN `bedrock-model-invocation-logging` AS inv
ON ct.requestID = inv.requestId
LEFT OUTER JOIN `aws/spans` AS spans
ON ct.requestID = spans.`attributes.aws.request_id`
WHERE ct.eventSource = 'bedrock.amazonaws.com'
AND ct.eventName IN ('InvokeModel', 'Converse', 'ConverseStream')
ORDER BY ct.eventTime DESC
LIMIT 20

クエリ 21: ダウンストリームモデルコンテンツと相関するガードレールの変更

CloudTrail でガードレールの変更を検出し、変更後のモデルレスポンスと関連付けます。
  • 目的: 検索します UpdateGuardrail または DeleteGuardrail CloudTrail のイベントを追跡し、変更後のウィンドウ内でモデルの応答と関連付けます。ガードレールの変更が、未検証またはポリシー違反のモデル出力に先行したかどうかを検出します。例: セキュリティアラートが以下の場合にトリガーされます。 UpdateGuardrail; このクエリは、緩和されたガードレールの下で生成されたモデルの応答をレビュー用に即座に表示します。( エージェント型 AI セキュリティスコーピングマトリックスのガードレール次元 — 動的な動作監視 — および生成 AI セキュリティスコーピングマトリックスのリスク管理次元 — ガードレールの変更とその下流への影響の検出 — を実装します。)
  • ソース: YOUR_CLOUDTRAIL_LOG_GROUP + bedrock-model-invocation-logging
  • 表示: テーブル
  • クエリ言語: OpenSearch SQL
Query 21: Guardrail Modification Correlated with Model Content
SELECT
ct.eventTime AS guardrailChangeTime,
ct.`userIdentity.arn` AS whoChangedGuardrail,
ct.eventName AS changeType,
inv.timestamp AS modelCallTime,
inv.`identity.arn` AS modelCaller,
inv.modelId,
inv.`output.outputBodyJson.stopReason` AS stopReason,
inv.`output.outputBodyJson.output.message.content.0.text` AS response
FROM `YOUR_CLOUDTRAIL_LOG_GROUP` AS ct
LEFT OUTER JOIN `bedrock-model-invocation-logging` AS inv
ON inv.timestamp >= ct.eventTime
WHERE ct.eventSource = 'bedrock.amazonaws.com'
AND ct.eventName IN ('UpdateGuardrail', 'DeleteGuardrail', 'DeleteGuardrailVersion')
ORDER BY ct.eventTime DESC
LIMIT 50

クエリ 22: クロスサービスアクセス拒否を伴うエージェントセッション

同じ引き受けたロールからの CloudTrail AccessDenied イベントと ADOT エージェントセッションを関連付けます
  • 目的: 同じ引き受けたロールからの CloudTrail AccessDenied イベントと ADOT エージェントセッションを関連付けます。「どのエージェントセッションがダウンストリームサービスでの権限エラーをトリガーしたか?」という問いに答えます。例: エージェントがツールから 5xx レスポンスを返す場合、このクエリはルート原因がツール自体ではなくダウンストリームサービスでの IAM 拒否にあるかどうかを示します。これは多くの場合、エージェントの権限境界の設定ミスが原因です。
  • ソース: aws/spans + YOUR_CLOUDTRAIL_LOG_GROUP
  • 表示: テーブル
  • クエリ言語: OpenSearch SQL
Query 22: Agent Session with Cross-Service Access Denied
SELECT
spans.`attributes.session.id` AS sessionId,
spans.`resource.attributes.service.name` AS agentService,
ct.eventTime AS denialTime,
ct.`userIdentity.arn` AS agentRole,
ct.eventSource AS blockedService,
ct.eventName AS blockedAction,
ct.errorCode,
ct.errorMessage
FROM `aws/spans` AS spans
LEFT OUTER JOIN `YOUR_CLOUDTRAIL_LOG_GROUP` AS ct
ON ct.`userIdentity.arn` = spans.`attributes.aws.local.service`
WHERE spans.`resource.attributes.aws.service.type` = 'gen_ai_agent'
AND ct.errorCode IN ('AccessDenied', 'UnauthorizedOperation')
AND ct.`userIdentity.type` = 'AssumedRole'
AND ct.eventSource IN (
's3.amazonaws.com', 'lambda.amazonaws.com',
'kms.amazonaws.com', 'secretsmanager.amazonaws.com',
'sagemaker.amazonaws.com'
)
ORDER BY ct.eventTime DESC
LIMIT 50
Performance Note

CloudWatch Logs Insights SQL でのクロスロググループ JOIN は、大規模なデータセットでは遅くなる場合があります。これらをダッシュボードウィジェットとして長い時間範囲でスケジュールする前に、狭い時間ウィンドウ(直近 15 分、直近 1 時間)でテストしてください。継続的な相関分析には、3 つのロググループすべてを単一の宛先(S3、OpenSearch)にエクスポートし、そこで JOIN を実行することを検討してください。

メトリクスフィルター

メトリクスフィルターは、CloudTrail ログイベントから値を抽出し、カスタム CloudWatch メトリクスを作成するように設計されており、継続的なクエリなしにほぼリアルタイムのアラートを実現します。フィルターパターン構文は、JSON プロパティセレクターを使用して CloudTrail イベントレコード内の特定のフィールドを照合します。以下のフィルターは、AI ワークロードセキュリティイベントに特化してスコープされており、Bedrock リソースへの不正アクセス、エージェントアクティビティの異常、ガードレールの変更、AI インフラストラクチャの設定変更を検出します。

メトリクスフィルター 1: Bedrock サービスへの不正アクセス

Bedrock API に対する AccessDenied および UnauthorizedOperation エラーをキャプチャします。

単一のアイデンティティからの Bedrock の拒否された呼び出しの急激な増加は、繰り返される意図しないアクセス試行、または承認されたスコープ外のモデルやナレッジベースにアクセスしようとするエージェントを示していることが多いです。

フィルターパターン:

{ ($.eventSource = "bedrock.amazonaws.com") && (($.errorCode = "AccessDenied") || ($.errorCode = "UnauthorizedOperation")) }
  • メトリクス名前空間: AIWorkloadMetrics
  • メトリクス名: BedrockUnauthorizedAccess

メトリクスフィルター 2: Bedrock Agent の呼び出し

Bedrock エージェントおよびインラインエージェントの呼び出し回数をカウントします

エージェントは単一の呼び出し内でサービス間の複数の API 呼び出しを連鎖させることができるため、影響範囲が大きいサーフェスとなります。このメトリクスを追跡することで、予期しないエージェントのアクティビティや、認識されていない呼び出し元によってエージェントがトリガーされている可能性を示すボリュームスパイクを検出できます。

フィルターパターン:

{ ($.eventSource = "bedrock.amazonaws.com") && ($.eventName = "InvokeAgent" || $.eventName = "InvokeInlineAgent") }
  • メトリクス名前空間: AIWorkloadMetrics
  • メトリクス名: BedrockAgentInvocations

メトリクスフィルター 3: Bedrock Knowledge Base 取得アクティビティ

Knowledge Bases に対する Retrieve および RetrieveAndGenerate 呼び出しを追跡します

ナレッジベースには組織の独自データが含まれており、異常な取得アクティビティは不正なデータアクセスを示している可能性があります。予期しない ID や大量のスパイクを監視してください。

フィルターパターン:

{ ($.eventSource = "bedrock.amazonaws.com") && ($.eventName = "Retrieve" || $.eventName = "RetrieveAndGenerate") }
  • メトリクス名前空間: AIWorkloadMetrics
  • メトリクス名: BedrockKnowledgeBaseRetrievals

メトリクスフィルター 6: Bedrock モデル呼び出しボリューム

ベースラインおよびスパイク検出のためにすべての Bedrock モデル呼び出しをカウントします

このメトリクスを使用して、通常の AI モデル使用量のベースラインを確立し、意図しない自動化されたアクティビティ、意図しない認証情報の使用、または意図しない再帰サイクルに陥ったエージェントを示す可能性のある使用量の急増を検出します。

フィルターパターン:

{ ($.eventSource = "bedrock.amazonaws.com") && ($.eventName = "InvokeModel" || $.eventName = "InvokeModelWithResponseStream" || $.eventName = "Converse" || $.eventName = "ConverseStream" || $.eventName = "InvokeModelWithBidirectionalStream" || $.eventName = "GetAsyncInvoke" || $.eventName = "StartAsyncInvoke") }
  • メトリクス名前空間: AIWorkloadMetrics
  • メトリクス名: BedrockModelInvocations

メトリクスフィルター 8: Bedrock Flow の呼び出し

Bedrock Prompt Flow エイリアスに対する InvokeFlow 呼び出しを追跡します。

フローはマルチステップ AI パイプラインを調整します。見慣れないアイデンティティからの予期しないフロー呼び出しや予期しないボリュームの変化は、認識されていないアイデンティティがオーケストレーションロジックをトリガーしていることを示している可能性があります。これは、 AWS::Bedrock::FlowAlias 高度なイベントセレクター。

フィルターパターン:

{ ($.eventSource = "bedrock.amazonaws.com") && ($.eventName = "InvokeFlow") }
  • メトリクス名前空間: AIWorkloadMetrics
  • メトリクス名: BedrockFlowInvocations

メトリクスフィルター 21: Bedrock セッションアクティビティ

マルチターンの Bedrock 会話におけるセッションレベルの API オペレーションをカウントします

セッションはマルチターン会話全体にわたって状態を維持します。このメトリクスを追跡することで、会話型 AI リソースの意図しない使用を示す可能性のある、予期しないセッションの作成やアクセスパターンを検出できます。(「エージェント型 AI セキュリティスコーピングマトリックス」のオーケストレーション次元(エージェントとシステム間のインタラクション管理およびセッションフロー制御)を実装しています。)

フィルターパターン:

{ ($.eventSource = "bedrock.amazonaws.com") && ($.resources[0].type = "AWS::Bedrock::Session") }
  • メトリクス名前空間: AIWorkloadMetrics
  • メトリクス名: BedrockSessionOperations

メトリクスフィルター 22: Bedrock フロー実行アクティビティ

プロンプトフローの実行を監視するためのフロー実行操作をカウントします

フロー実行は、マルチステップ AI パイプラインのアクティブな実行を表します。予期しないボリュームの変化は、AI パイプラインの意図しないオーケストレーション、またはリトライループに詰まったフローを示している可能性があります。( エージェント型 AI セキュリティスコーピングマトリックスのオーケストレーション次元 — 実行フロー制御とエージェントとシステム間のインタラクション管理を実装します。)

フィルターパターン:

{ ($.eventSource = "bedrock.amazonaws.com") && ($.resources[0].type = "AWS::Bedrock::FlowExecution") }
  • メトリクス名前空間: AIWorkloadMetrics
  • メトリクス名: BedrockFlowExecutions

メトリクスフィルター 23: Bedrock Data Automation 呼び出し

ドキュメントおよびメディア処理のデータ自動化呼び出しをカウントします

データ自動化は、AI パイプラインを通じてドキュメント、画像、メディアを処理します。意図しない呼び出しにより、自動化ワークフローを通じてドキュメントが処理されたり、データが意図した境界の外に移動したりする可能性があります。(生成 AI セキュリティスコーピングマトリックスのガバナンスとコンプライアンスディメンションを実装 — データ処理操作の監査証跡。)

フィルターパターン:

{ ($.eventSource = "bedrock.amazonaws.com") && ($.resources[0].type = "AWS::Bedrock::DataAutomationInvocation" || $.resources[0].type = "AWS::Bedrock::DataAutomationProject") }
  • メトリクス名前空間: AIWorkloadMetrics
  • メトリクス名: BedrockDataAutomationInvocations

メトリクスフィルター 24: Bedrock ツール呼び出し

ツール使用操作に対する Bedrock ツール API アクティビティをカウントします

ツールイベントは、会話中にモデルがツールを呼び出すタイミングをキャプチャします。これらはモデルが現実世界で実行するアクションです。予期しないスパイクは、モデルが意図したスコープ外で動作しているか、認識されていない呼び出し元がツール使用をトリガーしていることを示します。(「エージェント型 AI セキュリティスコーピングマトリックス」のガードレール次元を実装しており、ツール使用アクションの動作監視を行います。)

フィルターパターン:

{ ($.eventSource = "bedrock.amazonaws.com") && ($.resources[0].type = "AWS::Bedrock::Tool") }
  • メトリクス名前空間: AIWorkloadMetrics
  • メトリクス名: BedrockToolInvocations

CloudWatch Alarms

Section 11 で定義された各メトリクスフィルターに対して CloudWatch Alarms を作成します。Amazon SNS を通じてアラーム通知を適切な重大度レベルでセキュリティオペレーションチームにルーティングします。以下の表は、各アラームの推奨しきい値と評価期間を示しています。

これらのアラームは、設定変更、不正アクセス、認証失敗をトリガーとして、SNS 経由でセキュリティチームにルーティングされます。

アラーム名メトリクスしきい値期間
Bedrock 不正アクセスBedrockUnauthorizedAccess> 55 分
Bedrock ガードレール変更BedrockGuardrailChanges> 01 分
Bedrock ログ設定変更BedrockLoggingConfigChanges> 01 分
AI ロール権限昇格AIRolePermissionChanges> 01 分
AI サービス VPC エンドポイントアクセス拒否AIServicesVpceAccessDenied> 05 分
エージェントクロスサービスアクセス拒否AgentCrossServiceAccessDenied> 105 分
CloudTrail Insights 異常CloudTrailInsightsAnomalies> 05 分
CloudTrail ログ中断CloudTrailLoggingDisruption> 01 分
AgentCore Gateway 認証失敗AgentCoreGatewayAuthFailures> 55 分
AgentCore 認証情報アクセス異常AgentCoreCredentialAccess> 505 分
AgentCore Gateway 設定変更AgentCoreGatewayConfigChanges> 01 分
自動推論ポリシー変更BedrockAutomatedReasoningChanges> 01 分

Contributor Insights ルール

CloudWatch Contributor Insights は、CloudWatch Logs のロググループにおけるアクティビティパターンに影響を与えるトップコントリビューターをほぼリアルタイムで把握するために、時系列データを分析するよう設計されています。CloudTrail ロググループに適用すると、Contributor Insights ルールは、手動でクエリを実行することなく、AI ワークロード全体のアクティビティを推進している上位の IAM アイデンティティ、リソース、および送信元 IP を継続的に特定します。以下のルールは、このガイドが対象とするすべてのイベントカテゴリ(管理イベント、データイベント、ネットワークアクティビティイベント、セキュリティ設定変更)を網羅しています。

Important

Contributor Insights のルールは、CloudWatch Logs のスタンダードログクラスのロググループにのみ適用できます。CloudTrail の配信ロググループがスタンダードクラスに設定されていることを確認してください。

ルール 1: Bedrock モデルを呼び出す上位 IAM アイデンティティ

最も多くの Bedrock モデル呼び出しを行っている IAM プリンシパルをランク付けします

トップコントリビューターとして突然現れた新しいアイデンティティ、または大幅な増加を示す既存のアイデンティティは、優先的な対応が必要です。

ルール名: AI-TopBedrockModelCallers

{
"Schema": { "Name": "CloudWatchLogRule", "Version": 1 },
"AggregateOn": "Count",
"Contribution": {
"Filters": [
{ "Match": "$.eventSource", "In": ["bedrock.amazonaws.com"] },
{
"Match": "$.eventName",
"In": ["InvokeModel", "InvokeModelWithResponseStream",
"Converse", "ConverseStream",
"InvokeModelWithBidirectionalStream",
"GetAsyncInvoke", "StartAsyncInvoke",
"ListAsyncInvokes"]
}
],
"Keys": ["$.userIdentity.arn", "$.eventName"]
},
"LogFormat": "JSON",
"LogGroupNames": ["YOUR_CLOUDTRAIL_LOG_GROUP"]
}

ルール 2: Bedrock Agents を呼び出す上位 IAM アイデンティティ

どの IAM プリンシパルが Bedrock エージェントの呼び出しをトリガーしているかを明らかにします

ルール名: AI-TopBedrockAgentCallers

{
"Schema": { "Name": "CloudWatchLogRule", "Version": 1 },
"AggregateOn": "Count",
"Contribution": {
"Filters": [
{ "Match": "$.eventSource", "In": ["bedrock.amazonaws.com"] },
{
"Match": "$.eventName",
"In": ["InvokeAgent", "InvokeInlineAgent"]
}
],
"Keys": ["$.userIdentity.arn", "$.eventName", "$.sourceIPAddress"]
},
"LogFormat": "JSON",
"LogGroupNames": ["YOUR_CLOUDTRAIL_LOG_GROUP"]
}

ルール 3: Knowledge Bases から取得するトップ IAM アイデンティティ

Bedrock Knowledge Bases から取得している IAM プリンシパルをランク付けします

ルール名: AI-TopKnowledgeBaseCallers

{
"Schema": { "Name": "CloudWatchLogRule", "Version": 1 },
"AggregateOn": "Count",
"Contribution": {
"Filters": [
{ "Match": "$.eventSource", "In": ["bedrock.amazonaws.com"] },
{
"Match": "$.eventName",
"In": ["Retrieve", "RetrieveAndGenerate"]
}
],
"Keys": ["$.userIdentity.arn", "$.eventName", "$.sourceIPAddress"]
},
"LogFormat": "JSON",
"LogGroupNames": ["YOUR_CLOUDTRAIL_LOG_GROUP"]
}

ルール 4: Bedrock Flows を呼び出す上位 IAM アイデンティティ

どの IAM プリンシパルが Bedrock Prompt Flow の呼び出しをトリガーしているかを追跡します

ルール名: AI-TopBedrockFlowCallers

{
"Schema": { "Name": "CloudWatchLogRule", "Version": 1 },
"AggregateOn": "Count",
"Contribution": {
"Filters": [
{ "Match": "$.eventSource", "In": ["bedrock.amazonaws.com"] },
{ "Match": "$.eventName", "In": ["InvokeFlow"] }
],
"Keys": ["$.userIdentity.arn", "$.sourceIPAddress"]
},
"LogFormat": "JSON",
"LogGroupNames": ["YOUR_CLOUDTRAIL_LOG_GROUP"]
}

ルール 19: Bedrock セッションアクティビティ別トップ IAM アイデンティティ

どの IAM プリンシパルが Bedrock セッションを作成およびアクセスしているかを表示します

ルール名: AI-TopBedrockSessionCallers

{
"Schema": { "Name": "CloudWatchLogRule", "Version": 1 },
"AggregateOn": "Count",
"Contribution": {
"Filters": [
{ "Match": "$.eventSource", "In": ["bedrock.amazonaws.com"] },
{ "Match": "$.resources[0].type", "In": ["AWS::Bedrock::Session"] }
],
"Keys": ["$.userIdentity.arn", "$.eventName", "$.sourceIPAddress"]
},
"LogFormat": "JSON",
"LogGroupNames": ["YOUR_CLOUDTRAIL_LOG_GROUP"]
}

ルール 20: Bedrock フロー実行アクティビティ別上位 IAM アイデンティティ

どの IAM プリンシパルが Bedrock フローの実行を行っているかを表示します

ルール名: AI-TopBedrockFlowExecutionCallers

{
"Schema": { "Name": "CloudWatchLogRule", "Version": 1 },
"AggregateOn": "Count",
"Contribution": {
"Filters": [
{ "Match": "$.eventSource", "In": ["bedrock.amazonaws.com"] },
{ "Match": "$.resources[0].type", "In": ["AWS::Bedrock::FlowExecution"] }
],
"Keys": ["$.userIdentity.arn", "$.eventName", "$.sourceIPAddress"]
},
"LogFormat": "JSON",
"LogGroupNames": ["YOUR_CLOUDTRAIL_LOG_GROUP"]
}

ルール 21: Bedrock Data Automation アクティビティ別上位 IAM アイデンティティ

ドキュメントおよびメディア処理のために Bedrock データオートメーションを呼び出している IAM プリンシパルを表示します。

ルール名: AI-TopBedrockDataAutomationCallers

{
"Schema": { "Name": "CloudWatchLogRule", "Version": 1 },
"AggregateOn": "Count",
"Contribution": {
"Filters": [
{ "Match": "$.eventSource", "In": ["bedrock.amazonaws.com"] },
{
"Match": "$.resources[0].type",
"In": [
"AWS::Bedrock::DataAutomationProject",
"AWS::Bedrock::DataAutomationInvocation",
"AWS::Bedrock::DataAutomationProfile"
]
}
],
"Keys": ["$.userIdentity.arn", "$.resources[0].type", "$.eventName"]
},
"LogFormat": "JSON",
"LogGroupNames": ["YOUR_CLOUDTRAIL_LOG_GROUP"]
}

ルール 22: Bedrock ツール呼び出し数上位の IAM アイデンティティ

どの IAM プリンシパルが Bedrock のツール使用オペレーションをトリガーしているかを明らかにします

ルール名: AI-TopBedrockToolCallers

{
"Schema": { "Name": "CloudWatchLogRule", "Version": 1 },
"AggregateOn": "Count",
"Contribution": {
"Filters": [
{ "Match": "$.eventSource", "In": ["bedrock.amazonaws.com"] },
{ "Match": "$.resources[0].type", "In": ["AWS::Bedrock::Tool"] }
],
"Keys": ["$.userIdentity.arn", "$.eventName", "$.sourceIPAddress"]
},
"LogFormat": "JSON",
"LogGroupNames": ["YOUR_CLOUDTRAIL_LOG_GROUP"]
}

CloudTrail データイベントの集約

イベント集約は、データイベントを 5 分間のサマリーに統合するように設計されており、アクセス頻度、エラー率、最も頻繁に使用される API アクションなどの主要なトレンドへの可視性を提供します。これにより、セキュリティモニタリングとトレンド分析に必要な推奨インサイトを保持しながら、ダウンストリームの分析システムに送信されるデータ量を大幅に削減します。集約されたイベントは、 eventCategory = Aggregated および eventType = AwsAggregatedEvent 集約されたイベントレコードのフィールド。

集計の有効化

CloudTrail コンソールに移動してトレイルを選択します。集約イベントセクションで、編集を選択し、以下の集約テンプレートを有効にします。

  • API アクティビティ — API 呼び出しに基づくデータイベントの 5 分間サマリー(頻度、上位の呼び出し元、送信元 IP の分布を含む)
  • リソースアクセス — AWS リソースへのアクティビティパターン(誰がどのリソースに何回アクセスしているかを表示)
  • ユーザーアクション — API 呼び出しを行う IAM プリンシパルに基づくアクティビティパターン(行動の異常を特定するのに役立つ)

CloudTrail 集約イベントのクエリ

集約されたイベントは、CloudWatch Logs のロググループ内の標準イベントと共に配信されます。 eventCategory = 'Aggregated'次の OpenSearch SQL クエリを使用して、集計された Bedrock API アクティビティのサマリーを表示します。

Query: Aggregated Bedrock API Activity
SELECT eventTime,
eventSource,
`summary.primaryDimension.dimension` AS primary_dimension,
`timeWindow.windowStart` AS window_start,
`timeWindow.windowEnd` AS window_end
FROM `YOUR_CLOUDTRAIL_LOG_GROUP`
WHERE eventCategory = 'Aggregated'
AND eventSource = 'bedrock.amazonaws.com'
ORDER BY eventTime DESC

ダウンストリームの効率化のためのサブスクリプションフィルター

SIEM や Kinesis Data Firehose などのダウンストリームシステムに送信されるボリュームを削減するには、生のデータイベントの代わりに管理イベントと集計サマリーのみを転送する CloudWatch Logs サブスクリプションフィルター を作成します。これにより、5 分間の集計サマリーから推奨されるセキュリティインサイトを維持しながら、ダウンストリームの取り込みボリュームを削減できます。

サブスクリプションフィルターパターン(管理イベント + 集約イベントのみ):

{ ($.eventCategory = "Management") || ($.eventCategory = "Aggregated") }

統合監査・モニタリングダッシュボード

セキュリティ/監査サーフェス(CloudTrail)と運用モニタリング(Bedrock モデル呼び出しログおよびエージェントテレメトリ(ADOT SDK))を一元化されたビューに統合した、統合 CloudWatch ダッシュボードを構築します。以下のレイアウトでは、ウィジェットをオーディエンス別に整理しています。左側にセキュリティ/監査、中央に運用モニタリング、右側にコスト/FinOps を配置し、高レベルのステータスインジケーターから詳細な調査クエリまで階層化しています。

ダッシュボード名

ダッシュボードを名前付きで作成します。 AI-Workload-Security-Dashboard プライマリモニタリングリージョンで。

AI-Workload-Security-Dashboard

推奨ウィジェットレイアウト

Pro Tip

Logs Insights ウィジェットの場合、クエリソースに応じてクエリ言語として SQL または CWLI を選択します。(クロスパイプライン相関クエリからの) クロスロググループ JOIN クエリは SQL を使用する必要があります。単一ロググループクエリはどちらでも使用できます。

行 1 — 高レベルのヘルス状態とキーカウンター。

ウィジェットウィジェット タイプデータソース
アラームステータスグリッドアラームステータスCloudWatch Alarms からのすべてのメトリクスフィルターアラーム
Bedrock モデル呼び出し数数値 (メトリクス)AIWorkloadMetrics/BedrockModelInvocations
Bedrock 総支出単一値 (ログ)モデル呼び出しログ — 総コストクエリ(FinOps ダッシュボード
エージェントクロスサービス拒否数数値 (メトリクス)AIWorkloadMetrics/AgentCrossServiceAccessDenied
注記

5〜7 行目は、付属のGenAI テレメトリ用カスタムダッシュボードガイドのクエリを使用しています。ここで重複させるのではなく、それらのクエリを直接使用してください。

まとめと次のステップ

このガイドでは、AWS 上の AI ワークロードに対するエンドツーエンドの監視および監査アーキテクチャを説明しました。具体的には、3 つのテレメトリパイプライン、それぞれの有効化方法、Bedrock と AgentCore の両データイベントに対する CloudTrail 固有の検出(メトリクスフィルター、アラーム、Contributor Insights)、CloudTrail と Bedrock Model Invocation Logging および ADOT スパンを結合するクロスパイプライン相関クエリ、そして統合 CloudWatch ダッシュボードについて取り上げました。各セクションは、実装の概要のフェーズ別ロードマップに従って段階的に実装できるよう設計されています。

コアとなる考え方は次のとおりです。CloudTrail 単体では誰が何をしたかを示し、Model Invocation Logging ではモデルが何を言ったかを示し、ADOT ではエージェントがどのように動作したかを示します。AgentCore データイベントにより、CloudTrail はエージェントが実際に何をしたか — どのツールを呼び出したか、どの認証情報にアクセスしたか、どのゲートウェイがトラフィックを受信したか、そして何をメモリに保存したか — も示せるようになりました。その価値は、調査中にこれらのシグナルを結合することから生まれます。単一のパイプラインですべての質問に答えることはできません。

これらの機能を組み合わせることで、Generative AI Security Scoping Matrix および Agentic AI Security Scoping Matrix で定義されたセキュリティの側面に対する具体的な実装が提供されます。

次のステップ

  1. フェーズ 1 から始めます。 3 つのテレメトリパイプラインをすべて有効にします。他の 2 つ(Model Invocation Logging、ADOT)は、相関クエリを可能にします。
  2. CloudTrail Bedrock データイベントを有効にします。 AI ワークロードの監査における重要なステップです。
  3. CloudTrail AgentCore データイベントを有効にします。 Gateway と認証情報アクセス(グループ 2 および 3)から始め、ベースラインボリュームを確立した後に組み込みツールとメモリ(グループ 1 および 4)に拡張します。
  4. ベースラインを検証します。 アラームしきい値を設定する前に通常の使用状況を確立するために、セキュリティ分析のクエリ 2 および 4 と、セキュリティ分析の AgentCore タブのクエリ 12〜14 を実行します。
  5. レスポンスを自動化します。 検出と修復のギャップを埋めるために、CloudWatch Alarms をAmazon SNSトピック、AWS Lambda関数、またはSystems Manager ランブックに接続します。
  6. GuardDuty と統合します。 Amazon GuardDutyは、ここでのカスタムモニタリングを補完するマネージド型の脅威検出を提供します。GuardDuty は、検出ルールを維持することなく、既知の脅威パターンについて CloudTrail イベントを分析します。
  7. コストを確認します。 データイベント、Insights 分析、およびネットワークアクティビティイベントはすべて料金が発生します。CloudTrail 料金ページデータイベントコレクションの最適化のボリューム削減戦略を使用してください。

コンパニオンガイド