Live:CloudOps Webinars & Hands-on Workshops ·Register ↗
본문으로 건너뛰기

AWS에서 AI 워크로드 모니터링 및 감사

소개

AWS의 최신 AI 워크로드는 세 가지 독립적인 파이프라인을 통해 텔레메트리를 생성합니다 — CloudTrail(누가 무엇을 호출했는지), Bedrock Model Invocation Logging(모델이 무엇을 응답했는지), ADOT SDK로 수집되는 Agent Telemetry(에이전트가 어떻게 수행했는지). 각 파이프라인은 필수적입니다. CloudTrail만으로는 IAM 역할이 InvokeModel을 호출했다는 사실은 알 수 있지만, 해당 역할이 모델에 무엇을 요청했는지나 에이전트가 어떻게 응답했는지는 알 수 없습니다. Model Invocation Logging은 콘텐츠를 캡처하지만 에이전트 오케스트레이션은 캡처하지 않습니다. ADOT는 오케스트레이션을 캡처하지만 추론 파라미터나 IAM 자격 증명은 캡처하지 않습니다. 보안 및 운영 조사에서는 거의 항상 최소 두 개의 파이프라인을 상관 분석해야 합니다.

이 가이드는 다음을 통해 AI 워크로드에 대한 완전한 모니터링 및 감사 체계를 구축하는 방법을 보여줍니다:

  1. 세 가지 텔레메트리 파이프라인 모두 활성화 — 이 가이드에서 간략한 설정과 함께 상세 내용에 대한 심층 링크를 제공합니다.
  2. CloudTrail 기반 탐지 규칙 구축 — Bedrock 및 AgentCore 데이터 이벤트를 포함하는 보안 및 감사 영역에 대한 메트릭 필터, 알람, Contributor Insights 규칙을 구축합니다.
  3. 크로스 파이프라인 상관관계 쿼리 실행 — CloudTrail과 Bedrock Model Invocation Logging 및 ADOT 스팬을 조인하여 단일 파이프라인만으로는 답할 수 없는 질문에 대응합니다.

Generative AI Security Scoping MatrixAgentic AI Security Scoping Matrix는 AI 애플리케이션 구축 시 조직이 대응해야 할 보안 차원을 정의합니다. 여기에는 감사 및 로깅, 자격 증명 컨텍스트, 에이전시 경계, 데이터 보호가 포함됩니다. 이 가이드는 CloudTrail, CloudWatch, 크로스 파이프라인 상관 분석을 활용하여 이러한 차원에 대한 구체적인 구현을 제공합니다. 아래 탭은 각 매트릭스 차원을 이를 구현하는 가이드 섹션에 매핑합니다.

차원가이드 섹션
Identity — 사용자, 서비스, 에이전트 자격 증명 관리AgentCore Identity & Credentials (Group 2), Query 4, Query 12, Query 14, Metric Filter 7, Metric Filter 18
Data — 영구 메모리 및 상태 보안AgentCore Memory & Evaluation (Group 4), Query 16, Metric Filter 19
Audit & Logging — 액션 레벨 에이전트 활동 추적Three Telemetry Pipelines, Security Analytics, Cross-Pipeline Correlation, Metric Filters, Contributor Insights
Guardrails — 행동 모니터링, 샌드박싱, 격리AgentCore Built-in Tools (Group 1), Query 8, Query 21, Query 26, Query 27, Metric Filter 4, Metric Filter 17, Metric Filter 24, Metric Filter 25
Scope — 운영 경계 및 제약 조건 평가Network Activity Events, Query 4, Query 9, Query 26, Metric Filter 9, Metric Filter 10, Metric Filter 24
Orchestration — 에이전트-시스템 간 상호 작용 및 흐름 제어AgentCore Runtime & Gateway (Group 3), Query 15, Query 17, Query 19, Query 23, Query 24, Metric Filter 21, Metric Filter 22
공동 책임 모델

AWS는 CloudTrail, CloudWatch, Bedrock 서비스를 실행하는 클라우드 인프라의 보안을 책임집니다. 고객은 이벤트 셀렉터 구성, 탐지 규칙 생성, 알람 임계값 설정, 보안 이벤트 대응을 포함한 클라우드 내 보안을 책임집니다. 이 가이드는 AI 워크로드에 대한 고객 구성 및 모니터링 책임에 중점을 둡니다. 자세한 내용은 AWS Shared Responsibility Model을 참조하세요.

세 가지 복합 도전과제

Volume — AI 모델 호출은 높은 이벤트 볼륨을 생성할 수 있습니다. 정밀한 이벤트 셀렉터와 집계 없이는 높은 볼륨에서 관심 이벤트를 분리하기 어렵고, 모든 것을 캡처하는 비용이 과도합니다.

Speed — 에이전트가 시작하는 활동 시퀀스는 수초 내에 여러 API 호출, 도구 호출, 모델 상호 작용을 포함할 수 있습니다. 근실시간 탐지 규칙은 운영 이상 징후를 발생 시점에 가깝게 표면화하여 더 빠른 분류와 짧은 평균 조사 시간을 지원합니다.

Complexity: - AI 워크로드 활동은 여러 AWS 서비스에 걸쳐 있습니다. 단일 로그 소스로는 완전한 가시성을 제공할 수 없습니다. 파이프라인 간 상관 분석이 실제 조사가 이루어지는 지점입니다.

이 가이드에서 다루는 내용

  • 세 가지 텔레메트리 파이프라인과 각각이 고유하게 캡처하는 내용
  • 세 가지 모두의 활성화 (CloudTrail 심층 설명; 나머지 두 가지는 간략한 단계 + 심층 링크)
  • CloudTrail 전용 탐지: Bedrock 및 AgentCore 데이터 이벤트에 대한 메트릭 필터, 알람, Contributor Insights
  • AgentCore 데이터 이벤트: 게이트웨이 트래픽, 내장 도구 사용, 자격 증명 접근, 메모리 작업, 런타임 활동
  • 조사를 위한 크로스 파이프라인 상관관계 쿼리
  • 세 가지 데이터 소스를 결합하는 통합 대시보드

GenAI 텔레메트리 환경: 세 가지 상호 보완적 파이프라인

CloudTrail은 AWS에서 AI 워크로드에 대한 완전한 Observability를 제공하는 세 가지 텔레메트리 파이프라인 중 하나입니다. 각각은 서로 다른 데이터를 캡처하고, 서로 다른 목적을 제공하며, 서로 다르게 활성화됩니다. 보안 조사에서는 거의 항상 최소 두 개의 상관 분석이 필요합니다.

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>운영 모니터링, 성능 디버깅, 에이전트 워크플로 Observability

각 파이프라인이 단독으로 답할 수 있는 질문

CloudTrail만으로 알 수 있는 것:

  • 어떤 IAM 자격 증명이 InvokeModel을 호출했는가?
  • 소스 IP, 유저 에이전트, 리전은 무엇이었는가?
  • 호출이 거부되었는가 (AccessDenied, UnauthorizedOperation)?
  • 누군가 가드레일을 수정하거나, 로깅을 중지하거나, IAM 권한을 에스컬레이션했는가?
  • 어떤 VPC 엔드포인트가 호출을 차단했는가?

Model Invocation Logging만으로 알 수 있는 것:

  • 모델에 어떤 프롬프트가 전송되었는가?
  • 모델이 무엇을 반환했는가?
  • 어떤 temperature와 max_tokens가 사용되었는가?
  • 호출이 얼마나 많은 입력 및 출력 토큰을 소비했는가?
  • 응답이 잘렸는가 (stop_reason = max_tokens)?

Agent Telemetry (ADOT SDK)만으로 알 수 있는 것:

  • 모델 호출에 얼마나 걸렸는가 (클라이언트 측 지연 시간)?
  • 에이전트가 어떤 도구를 어떤 순서로 호출했는가?
  • 도구가 실패했는가, 그리고 어떤 컴포넌트가 오류를 일으켰는가?
  • 에이전트 세션이 여러 모델 호출에 걸쳐 어떻게 연결되어 있는가?

상관 분석으로 해결할 수 있는 영역

상관 분석만으로 답할 수 있는 질문

조사 질문조인할 파이프라인조인 키
누가 모델에 이 질문을 했고, 모델이 무엇을 말했는가?CloudTrail (호출자) + Model Invocation Logging (프롬프트/응답)requestId
에이전트가 모델 문제, 도구 문제, 권한 문제 중 어떤 것 때문에 실패했는가?ADOT 스팬 (컴포넌트 지연/오류) + CloudTrail (AccessDenied 이벤트)session + time
안전하지 않은 모델 응답 직전에 가드레일이 약화되었는가?CloudTrail (UpdateGuardrail 이벤트) + Model Invocation Logging (응답 콘텐츠)timestamp
에이전트 역할이 최소 권한을 위반하는 Bedrock 호출을 하고 있는가?CloudTrail (assumed role의 크로스 서비스 AccessDenied) + ADOT (에이전트 세션 ID)session + time
어떤 외부 호출자가 Gateway를 통해 이 에이전트를 트리거했으며, 에이전트가 어떤 자격 증명을 사용했는가?CloudTrail Gateway 데이터 이벤트 (JWT subject, 소스 IP) + CloudTrail 자격 증명 데이터 이벤트 (TokenVault/OAuth2 접근)time + agent runtime ARN
에이전트가 의도된 범위 밖에서 코드를 실행하거나 웹사이트를 탐색하고 있는가?CloudTrail AgentCore 도구 데이터 이벤트 (CodeInterpreter/Browser) + ADOT 스팬 (에이전트 세션 컨텍스트)session + time

크로스 파이프라인 상관관계 쿼리 섹션에서 이러한 시나리오에 대한 실제 JOIN 쿼리를 제공합니다. :::

구현 개요

세 가지 파이프라인을 모두 활성화한 후 탐지와 상관 분석을 단계적으로 추가하는 점진적 롤아웃 방식입니다.

1단계: Observability 파이프라인 활성화

두 가지 Observability 파이프라인(Bedrock Model Invocation Logging과 ADOT SDK로 수집되는 Agent Telemetry)부터 시작합니다. 활성화가 빠르며 크로스 파이프라인 상관관계 쿼리를 가능하게 합니다. CloudTrail 설정은 2단계에서 다룹니다.

Pipeline A: Bedrock Model Invocation Logging

모든 Bedrock 모델 호출에 대해 전체 프롬프트, 응답, 추론 파라미터, 호출자 IAM 자격 증명을 캡처합니다. 수동 옵트인만 가능합니다. (Generative AI Security Scoping Matrix의 Governance & Compliance 차원을 구현하여 데이터 주권 요구사항과 컴플라이언스 감사 워크플로를 지원하기 위해 모델 상호 작용을 캡처합니다.)

  1. Amazon Bedrock 콘솔을 엽니다
  2. SettingsModel invocation logging을 선택합니다
  3. 로깅을 활성화하고 CloudWatch Logs(및/또는 S3)를 대상으로 선택합니다
  4. 로그 그룹 이름(기본값: bedrock-model-invocation-logging)과 서비스 역할을 구성합니다

상세 구성, PII 마스킹, 대시보드 설정에 대해서는 GenAI Observability on AWS를 참조하세요.

Pipeline B: Agent Telemetry (ADOT SDK로 수집)

에이전트 오케스트레이션, 분산 트레이스, 도구 실행을 캡처합니다.

  • AgentCore: ADOT SDK가 기본적으로 런타임에 포함되어 있고 텔레메트리가 자동으로 aws/spans/aws/bedrock-agentcore/runtimes/<agent>로 전송되므로 별도의 조치가 필요하지 않습니다
  • EKS/ECS/자체 호스팅: ADOT 자동 계측 에이전트를 워크로드에 연결합니다. 코드 변경이 필요하지 않습니다

전체 Application Signals 경험을 활용하려면 CloudWatch Transaction Search를 활성화하세요.

상세 활성화 단계는 GenAI Observability on AWS — Enabling Observability for Agentic WorkloadsAgentCore Observability Quickstart를 참조하세요.

2단계: CloudTrail 활성화 — Bedrock부터 시작하여 범위 확장, CloudWatch로 수집

AI 워크로드의 전체 감사 범위를 캡처하도록 CloudTrail을 구성합니다. 가장 높은 가치의 리소스(Bedrock)부터 시작하여 외부로 확장합니다. 파이프라인 A 및 B와 조인할 수 있도록 모든 것을 CloudWatch Logs로 전달합니다.

Step 1: Bedrock 및 AgentCore 데이터 이벤트와 관리 이벤트

Advanced event selectors를 사용하여 트레일에서 Bedrock 데이터 이벤트를 활성화합니다. 이러한 작업은 기본적으로 로깅되지 않습니다. Amazon Bedrock 데이터 이벤트를 참조하세요.

활성화할 Bedrock 리소스 유형
카테고리리소스 유형
Agent & OrchestrationAWS::Bedrock::AgentAlias, AWS::Bedrock::InlineAgent, AWS::Bedrock::FlowAlias, AWS::Bedrock::FlowExecution, AWS::Bedrock::Session
Model InvocationAWS::Bedrock::Model, AWS::Bedrock::AsyncInvoke, AWS::Bedrock::PromptVersion, AWS::Bedrock::AdvancedOptimizePromptJob
Safety & GuardrailsAWS::Bedrock::Guardrail, AWS::Bedrock::AutomatedReasoningPolicy, AWS::Bedrock::AutomatedReasoningPolicyVersion
Knowledge & RAGAWS::Bedrock::KnowledgeBase, AWS::Bedrock::Tool
Data AutomationAWS::Bedrock::DataAutomationProject, AWS::Bedrock::DataAutomationInvocation, AWS::Bedrock::DataAutomationProfile, AWS::Bedrock::Blueprint

Advanced event selectors를 사용하여 AgentCore 데이터 이벤트를 활성화합니다. Amazon Bedrock AgentCore 데이터 이벤트를 참조하세요.

활성화할 AgentCore 리소스 유형
카테고리리소스 유형
Runtime & GatewayAWS::BedrockAgentCore::Gateway, AWS::BedrockAgentCore::Runtime, AWS::BedrockAgentCore::RuntimeEndpoint
Built-in ToolsAWS::BedrockAgentCore::CodeInterpreter, AWS::BedrockAgentCore::Browser
Identity & CredentialsAWS::BedrockAgentCore::WorkloadIdentity, AWS::BedrockAgentCore::TokenVault, AWS::BedrockAgentCore::OAuth2CredentialProvider, AWS::BedrockAgentCore::APIKeyCredentialProvider
Memory & EvaluationAWS::BedrockAgentCore::Memory, AWS::BedrockAgentCore::Evaluator

여기에 추가로 제공되는 AgentCore 리소스 유형도 포함합니다.

모든 리전에서 관리 이벤트(Read 및 Write)가 활성화되어 있는지 확인합니다 — 이는 InvokeModelConverse를 관리 이벤트로 자동 캡처하며, CreateGateway, CreateGatewayTarget 등과 같은 AgentCore 관리 이벤트도 캡처합니다. CloudTrail 관리 이벤트를 참조하세요.

이상 탐지를 위해 CloudTrail Insights(ApiCallRateInsightApiErrorRateInsight)를 활성화합니다. CloudTrail Insights 이벤트를 참조하세요.

Step 2: S3, Lambda, 네트워크 활동으로 확장

  • 학습 데이터, 모델 아티팩트, CI/CD 파이프라인 버킷에 대해 Amazon S3 데이터 이벤트(쓰기 전용)를 활성화합니다. Amazon S3 및 Lambda 데이터 이벤트를 참조하세요.
  • 프로덕션 AI 파이프라인 함수에 대해 Lambda 데이터 이벤트를 활성화하고, 개발/테스트는 제외합니다. Amazon S3 및 Lambda 데이터 이벤트를 참조하세요.
  • Bedrock, S3, Lambda VPC 엔드포인트에 대해 네트워크 활동 이벤트를 활성화하고, VpceAccessDenied를 대상으로 합니다. CloudTrail 네트워크 활동 이벤트를 참조하세요.

Step 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 구독 필터를 사용하여 관리 이벤트와 집계된 이벤트만 다운스트림 SIEM으로 전달하여 수집 볼륨을 줄입니다.

6단계: 통합 대시보드 구성

  • CloudTrail 알람, Contributor Insights 위젯, Model Invocation Log 비용 위젯, ADOT 성능 위젯, 상관관계 쿼리 결과를 단일 화면으로 결합하는 CloudWatch 대시보드를 구축합니다. 통합 감사 및 모니터링 대시보드를 참조하세요.

Amazon Bedrock 데이터 이벤트

기본적으로 CloudTrail은 계정에 대한 관리 이벤트를 로깅하며, 이미 InvokeModel, Converse, ConverseStream과 같은 일반적인 Bedrock 런타임 호출을 캡처합니다. 에이전트 호출, 지식 기반 검색, 플로우 실행, 가드레일 적용, 양방향 스트리밍, 비동기 호출, 프롬프트 렌더링 등 많은 핵심 AI 워크로드 작업은 데이터 이벤트로 로깅됩니다. 이러한 작업에는 트레일에 advanced event selectors가 필요합니다. 데이터 이벤트는 보안 팀에게 모델 호출에 대한 가시성을 제공합니다. 적용할 구체적인 셀렉터는 아래의 Bedrock Advanced Event Selectors를 참조하세요.

모니터링할 핵심 API

아래 표는 어떤 Bedrock API가 자동으로 캡처되고, 어떤 것이 트레일에 advanced event selector 구성을 필요로 하는지를 보여줍니다.

API이벤트 이름중요한 이유
InvokeModelInvokeModel어떤 IAM 자격 증명이 파운데이션 모델을 호출하고 있는지와 시점을 추적합니다.
Streaming InvocationInvokeModelWithResponseStream장문 생성 작업에 대한 스트리밍 모델 상호 작용을 캡처합니다.
Conversational AIConverse / ConverseStream파운데이션 모델에 대한 다중 턴 대화형 AI 활동을 기록합니다.
Async Invocation ListingListAsyncInvokes비동기 호출 작업의 목록 조회를 모니터링합니다.
중요

InvokeModel, Converse, ConverseStream은 관리 이벤트로 로깅되므로 관리 이벤트 로깅이 활성화된 모든 트레일에서 기본적으로 캡처됩니다. 그러나 에이전트 호출, 지식 기반 검색, 플로우 호출, 가드레일 적용, 프롬프트 렌더링, 비동기 호출, 양방향 스트리밍, 세션 활동, 플로우 실행, 자동화된 추론, 데이터 자동화, 블루프린트 작업, 고급 프롬프트 최적화, 도구 작업은 해당하는 Bedrock 리소스 유형에 대한 advanced event selectors를 트레일에 구성할 때만 로깅됩니다. 구성 방법은 Bedrock Advanced Event Selectors를 참조하고, 지원되는 리소스 유형의 전체 목록은 Amazon Bedrock CloudTrail 문서를 참조하세요.

Advanced Event Selectors for Bedrock

다음 advanced event selectors를 사용하여 CloudTrail 트레일에서 Bedrock 데이터 이벤트를 캡처합니다. 각 Bedrock 리소스 유형에는 자체 셀렉터가 필요하며, 각 셀렉터는 resources.ARN 접두사를 사용하여 특정 리소스로 로깅 범위를 지정해야 합니다. 이는 리소스 유형당 하나씩 18개의 별도 셀렉터를 구성합니다. 대부분은 계정으로 범위가 지정된 resources.ARN 접두사와 함께 eventCategory = Data로 필터링합니다. ModelAsyncInvoke 셀렉터는 파운데이션 모델 ARN이 AWS 소유이고 계정 ID를 포함하지 않으므로 eventName 필터링을 대신 사용합니다.

경고

아래 셀렉터는 예시입니다. 플레이스홀더를 교체하지 않고 적용하면 이벤트가 캡처되지 않습니다.

Bedrock 플레이스홀더 참조
플레이스홀더교체 대상확인 위치
ACCOUNT_ID12자리 AWS 계정 IDAWS 콘솔 우측 상단 메뉴
REGIONAWS 리전 (예: us-east-1)콘솔의 리전 선택기
AGENT_ID / ALIAS_ID에이전트 및 별칭 IDBedrock 콘솔 → Agents
KB_IDKnowledge Base IDBedrock 콘솔 → Knowledge bases
FLOW_IDFlow IDBedrock 콘솔 → Prompt flows
GUARDRAIL_IDGuardrail IDBedrock 콘솔 → Guardrails
PROMPT_IDPrompt IDBedrock 콘솔 → Prompt management
POLICY_IDAutomated Reasoning Policy IDBedrock 콘솔 → Automated reasoning
PROJECT_IDData Automation Project IDBedrock 콘솔 → Data automation
TOOL_IDBedrock Tool 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 advanced event selectors 전체 보기 (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 파이프라인에 대한 완전한 가시성을 제공합니다:

Agent & Orchestration

리소스 유형주요 API설명
AWS::Bedrock::AgentAliasInvokeAgent배포된 Bedrock 에이전트 별칭의 호출을 추적
AWS::Bedrock::InlineAgentInvokeInlineAgent인라인 에이전트 호출을 캡처
AWS::Bedrock::FlowAliasInvokeFlowBedrock Prompt Flow 호출을 추적
AWS::Bedrock::FlowExecutionFlow execution APIs프롬프트 플로우 실행 모니터링을 위한 플로우 실행 활동을 캡처
AWS::Bedrock::SessionSession APIs다중 턴 대화에 대한 세션 수준 API 활동을 캡처
Agent & Orchestration 리소스에 대한 셀렉터 참고사항
  • FlowExecution — 플로우 실행 ARN이 플로우 별칭과 flow/ 접두사를 공유하므로 resources.ARN을 특정 플로우 ID로 좁힙니다 (예: flow/FLOW_ID/alias/).
  • Session — 고빈도 읽기 작업의 볼륨을 줄이기 위해 readOnly = false를 사용하여 쓰기 작업(세션 생성 및 업데이트)에 집중합니다.

Model Invocation

리소스 유형주요 API설명
AWS::Bedrock::ModelInvokeModelWithBidirectionalStream양방향 스트리밍 호출을 로깅
AWS::Bedrock::AsyncInvokeGetAsyncInvoke, StartAsyncInvoke비동기 호출 작업을 로깅
AWS::Bedrock::PromptVersionRenderPrompt프롬프트 렌더링 작업을 캡처
AWS::Bedrock::AdvancedOptimizePromptJobAdvanced optimize prompt APIs고급 프롬프트 최적화 작업 활동을 캡처
Model Invocation 리소스에 대한 셀렉터 참고사항
  • Model — 파운데이션 모델 ARN은 AWS 소유입니다 (예: arn:aws:bedrock:REGION::foundation-model/...) 계정 ID를 포함하지 않으므로 이 셀렉터는 resources.ARN 대신 eventName 필터링을 사용합니다.
  • AsyncInvoke — 특정 비동기 작업으로 범위를 지정하기 위해 eventName 필터링을 사용합니다. 비동기 호출에는 AWS::Bedrock::ModelAWS::Bedrock::AsyncInvoke 모두에 대한 셀렉터가 필요합니다.
  • AdvancedOptimizePromptJob — 쓰기 작업(작업 시작)에 집중하기 위해 readOnly = false를 사용합니다.

Safety & Guardrails

리소스 유형주요 API설명
AWS::Bedrock::GuardrailApplyGuardrail가드레일 적용 작업을 캡처
AWS::Bedrock::AutomatedReasoningPolicyAutomated reasoning APIs검증 가능한 AI 출력을 위한 자동화된 추론 정책에 대한 활동을 캡처
AWS::Bedrock::AutomatedReasoningPolicyVersionAutomated reasoning version APIs자동화된 추론 정책의 특정 버전에 대한 활동을 캡처
Safety & Guardrails 리소스에 대한 셀렉터 참고사항
  • AutomatedReasoningPolicy — 계정의 모든 정책을 캡처하지 않도록 특정 정책 ID로 좁힙니다.
  • AutomatedReasoningPolicyVersion — 정책 셀렉터와 동일한 정책 ID 접두사를 사용합니다.

Knowledge & RAG

리소스 유형주요 API설명
AWS::Bedrock::KnowledgeBaseRetrieve, RetrieveAndGenerate데이터 소스 검색 및 수집 활동을 모니터링
AWS::Bedrock::ToolTool APIs도구 사용 작업을 위한 도구 API 활동을 캡처
Knowledge & RAG 리소스에 대한 셀렉터 참고사항
  • Tool — 계정의 모든 도구 활동을 캡처하지 않도록 특정 도구 ID로 좁힙니다.

Data Automation

리소스 유형주요 API설명
AWS::Bedrock::DataAutomationProjectData automation project APIs문서 및 미디어 처리를 위한 프로젝트 활동을 캡처
AWS::Bedrock::DataAutomationInvocationData automation invocation APIs데이터 자동화 호출 활동을 캡처
AWS::Bedrock::DataAutomationProfileData automation profile APIs데이터 자동화 프로필 활동을 캡처
AWS::Bedrock::BlueprintBlueprint APIs데이터 자동화 구성을 위한 블루프린트 활동을 캡처
Data Automation 리소스에 대한 셀렉터 참고사항
  • DataAutomationProject — 특정 프로젝트 ID로 좁힙니다.
  • DataAutomationInvocation, DataAutomationProfile, Blueprint — 모두 쓰기 작업에 집중하기 위해 readOnly = false를 사용합니다.
InlineAgent 비용 최적화

AWS::Bedrock::InlineAgent 셀렉터는 인라인 에이전트가 영구 리소스 ARN을 갖지 않기 때문에 resources.ARN 필터를 포함하지 않습니다. 볼륨과 비용을 줄이기 위해 이 셀렉터는 eventName 필터(InvokeInlineAgent로 범위 지정)와 userIdentity.arn 필터를 사용하여 특정 IAM 역할로 로깅 범위를 지정합니다. BEDROCK_EXECUTION_ROLE_NAME을 실제 역할 이름으로 교체하세요. 인라인 에이전트를 사용하지 않는 경우 이 셀렉터를 완전히 제거하세요. 전체 셀렉터 JSON은 Inline Agent: Filter by IAM Identity를 참조하세요.

경고

모든 관련 리소스 유형에 대해 위의 advanced event selectors를 구성하는 것이 이 가이드에서 AI 워크로드 가시성을 활성화하기 위한 핵심 첫 단계입니다. Advanced event selectors를 지정하지 않고 데이터 이벤트를 활성화하지 마세요 — 필터링되지 않은 데이터 이벤트 로깅은 높은 볼륨과 비용을 발생시킬 수 있습니다. 최신 지원 리소스 유형은 CloudTrail의 Amazon Bedrock 데이터 이벤트를 참조하세요.

Amazon Bedrock AgentCore 데이터 이벤트

Amazon Bedrock AgentCore는 호스팅 런타임, 내장 도구(코드 인터프리터, 브라우저), 자격 증명 및 인증 관리, API 게이트웨이, 영구 메모리를 포함하여 AI 에이전트를 실행, 보호, 연결하기 위한 관리형 인프라를 제공합니다. 이러한 각 컴포넌트는 CloudTrail이 데이터 이벤트로 캡처할 수 있는 데이터 플레인 활동을 생성하여, 에이전트가 코드를 실행하고, 웹을 탐색하고, 서드파티 서비스에 인증하고, 게이트웨이를 통해 사용자와 상호 작용하는 방식에 대한 가시성을 제공합니다.

AgentCore 데이터 이벤트는 코드 실행, 도구 사용, 메모리 작업을 포함한 에이전트 동작에 대한 런타임 가시성을 제공합니다 — 어떤 도구를 호출하는지, 어떤 자격 증명을 가져오는지, 어떤 게이트웨이가 트래픽을 수신하는지, 또는 인식되지 않은 호출자가 에이전트 인프라에 접근하고 있는지 여부를 파악할 수 있습니다.

AgentCore 데이터 이벤트가 AI 보안에 중요한 이유

AgentCore 컴포넌트는 AI 에이전트의 운영 영역, 즉 에이전트가 실제 행동을 취하는 계층을 나타냅니다. Bedrock 데이터 이벤트(위에서 다룸)가 에이전트에게 요청된 내용(모델 호출, 지식 기반에서 검색)을 캡처하는 반면, AgentCore 데이터 이벤트는 에이전트가 실제로 수행하는 내용을 캡처합니다. Agentic AI Security Scoping Matrix는 에이전틱 시스템을 위한 6가지 핵심 보안 차원을 정의합니다 — 아래 항목은 각 AgentCore 기능을 해당하는 매트릭스 차원에 매핑합니다:

  • 코드 실행 — CodeInterpreter를 통해 사용자 제공 코드를 실행하는 에이전트는 파일에 접근하고, 네트워크 호출을 하며, 부작용을 발생시킬 수 있습니다. 이러한 호출을 모니터링하면 의도하지 않은 코드 실행이나 의도된 범위 밖에서 작동하는 에이전트를 탐지할 수 있습니다. (Agentic Matrix: Guardrails — 샌드박싱 및 격리 메커니즘)
  • 웹 브라우징 — Browser 도구를 사용하는 에이전트는 외부 웹사이트를 탐색하여 잠재적으로 민감한 URL에 접근하거나 데이터 전송이 의도된 경계 내에 있는지 확인합니다. 브라우저 활동을 로깅하면 에이전트가 방문하는 모든 페이지에 대한 감사 추적을 제공합니다. (Agentic Matrix: Guardrails — 행동 모니터링)
  • 자격 증명 접근 — 에이전트는 TokenVault에 저장된 OAuth2 토큰, API 키, 워크로드 자격 증명 토큰을 사용하여 서드파티 API에 인증합니다. 예상치 못한 자격 증명 접근 패턴은 비정상적인 에이전트 활동이나 권한 에스컬레이션을 나타낼 수 있습니다. (Agentic Matrix: Identity — 자격 증명 위임 및 인증 정보 관리)
  • 게이트웨이 트래픽 — AgentCore Gateway는 JWT 기반 인증을 사용하는 MCP 프로토콜을 통해 에이전트를 외부 호출자에게 노출합니다. Gateway 데이터 이벤트는 인증 실패를 포함한 모든 인바운드 요청을 캡처합니다 — AWS 환경 외부에서의 의도하지 않은 접근 시도를 탐지하는 데 핵심적입니다. (Agentic Matrix: Scope — 명확한 운영 경계)
  • 에이전트 런타임 활동 — Runtime 및 RuntimeEndpoint 이벤트는 에이전트 수명 주기 작업, 세션 관리, 엔드포인트 호출을 추적합니다. 여기에서의 비정상적인 패턴은 정상 운영 시간 외에 에이전트가 시작, 중지 또는 접근되고 있음을 나타냅니다. (Agentic Matrix: Orchestration — 에이전트-시스템 상호 작용 관리)
  • 메모리 작업 — 영구 메모리를 가진 에이전트는 세션 간에 대화 컨텍스트를 저장하고 검색합니다. 의도하지 않은 메모리 접근은 대화 기록의 검색이나 에이전트 컨텍스트의 수정을 허용할 수 있습니다. 메모리 작업을 모니터링하면 접근이 승인된 범위 내에 있는지 확인하는 데 도움이 됩니다. (Agentic Matrix: Data — 영구 메모리 및 상태 보안)
  • 에이전트 평가 — Evaluator 이벤트는 에이전트 출력의 자동화된 품질 및 안전 평가를 추적합니다. 이를 모니터링하면 평가 파이프라인이 의도대로 구성되어 있는지 확인하는 데 도움이 됩니다. (Agentic Matrix: Audit & Logging — 액션 레벨 에이전트 활동 추적)

AgentCore 데이터 이벤트 리소스 유형

CloudTrail은 다음 AgentCore 리소스 유형에 대한 데이터 이벤트를 지원합니다:

리소스 유형resources.type보안 관련성
Code InterpreterAWS::BedrockAgentCore::CodeInterpreter의도하지 않은 코드 실행, 샌드박스 경계 문제 탐지
Code Interpreter (Custom)AWS::BedrockAgentCore::CodeInterpreterCustom비인가 커스텀 코드 실행 탐지
BrowserAWS::BedrockAgentCore::Browser에이전트 웹 탐색 감사, URL을 통한 의도하지 않은 데이터 전송 탐지
Browser (Custom)AWS::BedrockAgentCore::BrowserCustom커스텀 브라우저 도구 사용 감사

Advanced Event Selectors for AgentCore

다음 advanced event selectors를 사용하여 CloudTrail 트레일에서 AgentCore 데이터 이벤트를 캡처합니다. 이 셀렉터들은 보안 기능에 따라 네 그룹으로 구성됩니다: 내장 도구, 자격 증명 및 인증, 런타임 및 게이트웨이, 메모리 및 평가. 각 셀렉터는 resources.ARN 접두사를 사용하여 로깅 범위를 지정합니다. AWS 관리형 내장 도구(CodeInterpreterBrowser)의 경우 AWS 소유 ARN을 사용하므로 resources.ARN 필터가 생략됩니다 — resources.type 필터만으로 충분합니다.

경고

아래 셀렉터는 예시입니다. 플레이스홀더를 교체하지 않고 적용하면 이벤트가 캡처되지 않습니다. ACCOUNT_IDREGION을 실제 값으로 교체하세요 (위의 Bedrock 플레이스홀더 표 참조). AgentCore 전용 플레이스홀더는 아래에 나열되어 있습니다.

AgentCore 플레이스홀더 참조
플레이스홀더교체 대상확인 위치
GATEWAY_IDAgentCore Gateway IDAgentCore 콘솔 또는 ListGateways API
RUNTIME_IDAgentCore Runtime IDListRuntimes API
DIRECTORY_IDWorkload Identity Directory IDAgentCore 콘솔
PROVIDER_NAMEOAuth2 또는 APIKey credential provider 이름AgentCore 콘솔
MEMORY_IDAgentCore Memory IDAgentCore 콘솔
EVALUATOR_IDAgentCore Evaluator IDAgentCore 콘솔
CUSTOM_TOOL_ID / CUSTOM_BROWSER_ID커스텀 도구 또는 브라우저 구성 IDAgentCore 콘솔

특정 유형의 모든 리소스를 로깅하려면 ARN 접두사에서 리소스 ID를 제거합니다 (예: gateway/GATEWAY_IDgateway/) — 이벤트 볼륨과 비용이 증가합니다.

이 셀렉터들은 에이전트 도구 사용, 즉 에이전트가 실제 세계에서 수행하는 행동을 캡처합니다. Code interpreter 이벤트는 에이전트가 실행하는 코드를 보여주고, browser 이벤트는 에이전트가 방문하는 웹사이트를 보여줍니다. (Agentic AI Security Scoping Matrix Guardrails 차원 구현 — 에이전트 행동에 대한 샌드박싱, 격리 메커니즘, 행동 모니터링.)

중요

AWS 관리형 내장 도구(CodeInterpreterBrowser)는 계정 세그먼트가 aws로 설정된 AWS 소유 리소스 ARN을 사용합니다 (예: arn:aws:bedrock-agentcore:REGION:aws:code-interpreter/), 계정 ID가 아닙니다. 커스텀 도구(CodeInterpreterCustomBrowserCustom)는 계정 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"] }
]
}
]
AgentCore 데이터 이벤트 비용 최적화

AgentCore 데이터 이벤트는 특히 Gateway(모든 인바운드 MCP 요청) 및 Runtime(모든 에이전트 세션 작업)에 대해 상당한 볼륨을 생성할 수 있습니다.

권장 롤아웃 순서:

  1. Group 2(자격 증명)와 Group 3(게이트웨이)부터 시작합니다 — 이들이 일반적으로 보안 우선순위가 가장 높습니다.
  2. 기준 볼륨과 비용을 확인한 후 Group 1과 4로 확장합니다.

리소스 ID별 셀렉터 좁히기: 특정 resources.ARN 값을 사용하여 개별 리소스를 대상으로 합니다 — 예를 들어, 단일 게이트웨이에 대해 arn:aws:bedrock-agentcore:REGION:ACCOUNT_ID:gateway/PROD_GATEWAY_ID. 관리형 내장 도구(CodeInterpreterBrowser)의 경우 AWS 소유 ARN을 사용하므로 resources.ARN 필터가 생략됩니다 — resources.type 필터만으로 충분합니다.

CloudTrail Insights 이벤트

CloudTrail Insights는 계정의 운영 기준을 지속적으로 분석하여 비정상적인 API 활동을 식별하도록 설계되었습니다. 합법적인 사용 자체가 높은 호출 볼륨을 수반할 수 있는 AI 워크로드의 경우, Insights는 절대 호출 볼륨이 단독으로는 합리적으로 보이더라도 확립된 정상에서 벗어나는 비정상적인 급증을 탐지하는 방법을 제공합니다.

Insight 유형

Insight 유형탐지 목적
ApiCallRateInsight기준에서 벗어나는 API 호출 볼륨 급증을 탐지합니다.
ApiErrorRateInsight비정상적인 오류율 패턴을 탐지합니다. AccessDenied 또는 ThrottlingException 오류의 갑작스러운 증가는 자격 증명에 대한 반복적인 접근 시도, 반복적인 의도하지 않은 접근 시도, 또는 자동화된 에이전트가 속도 제한에 도달하는 것을 나타낼 수 있습니다.

구성 가이드

CloudTrail 콘솔에서 트레일로 이동하고 Edit를 선택한 후 Insights 섹션에서 두 Insights 이벤트 유형을 모두 활성화하여 트레일에 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 관리 이벤트는 AWS 환경의 컨트롤 플레인 작업을 기록하도록 설계되었습니다: 리소스 생성 및 삭제, 구성 수정, 권한 변경. AI 워크로드 보안의 경우, 이러한 이벤트는 로깅 비활성화, 감사 추적 리디렉션, AI 서비스 가드레일 약화와 같은 예상치 못한 접근 패턴을 검토용으로 표면화합니다.

모든 리전에서 ReadWrite 관리 이벤트가 로깅되는지 확인합니다. 기본 CloudTrail 트레일은 리전당 하나의 관리 이벤트 무료 사본을 제공하며, 추가 사본에는 요금이 부과됩니다. 자세한 내용은 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 데이터 이벤트 볼륨을 줄입니다:

버킷 이름 접두사를 실제 버킷 이름으로 교체하세요

아래의 버킷 이름 접두사(ai-training-data-, model-artifacts-, cicd-pipeline-)는 예시입니다. AI 학습 데이터, 모델 아티팩트, 파이프라인 자산을 포함하는 S3 버킷의 실제 이름 또는 명명 접두사로 교체하세요. S3 콘솔에서 버킷 이름을 찾거나 aws s3 ls를 실행하여 확인할 수 있습니다. 버킷이 다른 명명 규칙을 사용하는 경우 StartsWith 값을 적절히 조정하세요.

이 셀렉터의 기능

이름이 ai-training-data-, model-artifacts-, cicd-pipeline-으로 시작하는 버킷에 대한 쓰기 작업(readOnly = false)만 캡처하도록 Amazon S3 데이터 이벤트를 필터링합니다. 이는 비인가 쓰기, 삭제, 데이터 스테이징을 탐지하면서도 고볼륨 읽기 작업(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 파이프라인 함수

다음에 대한 InvokeFunction 호출을 로깅하기 위해 Lambda 데이터 이벤트를 활성화합니다:

  • AI 추론 파이프라인 함수
  • 데이터 전처리 및 피처 엔지니어링 워크플로
  • Bedrock 에이전트 오케스트레이션 함수
노트

특히 익숙하지 않은 IAM 역할에서 발생하는 Lambda 호출의 예상치 못한 급증은 Lambda 기반 AI 파이프라인 함수에 대한 의도하지 않은 접근의 초기 지표입니다.

Lambda 프로덕션 전용 셀렉터

이 셀렉터는 개발 및 테스트 함수를 제외하여 프로덕션 AI 워크로드에 로깅을 집중합니다:

함수 이름 접두사를 실제 명명 규칙으로 교체하세요

아래의 함수 이름 접두사(prod-, ai-agent-)는 예시입니다. 조직이 프로덕션 AI Lambda 함수에 사용하는 실제 명명 접두사로 교체하세요. 또한 ACCOUNT_ID를 AWS 계정 ID로, REGION을 리전으로 교체하세요. Lambda 콘솔에서 함수 이름을 찾거나 aws lambda list-functions를 실행하여 확인할 수 있습니다.

이 셀렉터의 기능

ARN이 prod- 또는 ai-agent-로 시작하는 함수에 대해서만 Lambda Invoke 데이터 이벤트를 로깅합니다. StartsWith가 이미 이러한 특정 접두사로 범위를 지정하므로, 개발 및 테스트 함수는 정의상 제외됩니다 — CloudTrail은 다른 연산자를 사용하더라도 단일 셀렉터 내에서 동일한 필드(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에서 VPC 엔드포인트를 통해 AWS 서비스로 이루어진 AWS API 호출을 기록할 수 있도록 설계되었습니다. AI 워크로드의 경우, Bedrock 통합 VPC가 예상치 못한 아웃바운드 호출을 하고 있는지 또는 VPC 엔드포인트 접근 제어가 위반되고 있는지에 대한 가시성을 제공합니다. (Agentic AI Security Scoping Matrix Scope 차원 구현 — 명확한 운영 경계를 강제하고 의도된 네트워크 경계 밖에서 작동하는 에이전트를 탐지.)

AI 워크로드 VPC 엔드포인트

CloudTrail 네트워크 활동 이벤트는 Amazon Bedrock(bedrock.amazonaws.com), Amazon S3(s3.amazonaws.com), AWS Lambda(lambda.amazonaws.com)를 이벤트 소스로 지원합니다. VPC 엔드포인트에서 이러한 이벤트를 활성화하여 허용 및 거부된 접근 시도를 포함하여 각 엔드포인트를 통해 라우팅된 API 호출을 캡처합니다. AI 워크로드의 경우 이는 특히 중요합니다. VPC 내에서 작동하는 Bedrock 에이전트가 지식 기반 데이터 소스용 Amazon S3, 액션 그룹 핸들러용 Lambda 등 다운스트림 서비스에 VPC 엔드포인트를 통해 접근하기 때문입니다. VPC 엔드포인트 수준에서의 접근 거부는 잘못 구성된 엔드포인트 정책이나 프라이빗 네트워크 내에서 AI 리소스에 도달하려는 비인가 워크로드를 나타냅니다.

활성화를 고려할 추가 이벤트 소스:

이벤트 소스모니터링 목적
bedrock.amazonaws.comAI 모델 접근을 모니터링하고 VPC 엔드포인트를 통한 비인가 호출을 탐지합니다.
s3.amazonaws.comVPC 엔드포인트를 통한 학습 데이터 버킷에 대한 비인가 Amazon S3 접근을 탐지합니다.
kms.amazonaws.comAI 모델 암호화 작업에 대한 암호화 키 접근 패턴을 모니터링합니다.
lambda.amazonaws.comAI 파이프라인 함수에서 VPC 엔드포인트를 통한 Lambda 호출을 추적합니다.
sagemaker.amazonaws.comAI 워크로드 환경에서 SageMaker 엔드포인트 활동을 추적합니다.

네트워크 활동 이벤트를 위한 Advanced event selector 필드

초기 배포 시, 최소한의 추가 데이터 볼륨으로 VPC 엔드포인트 정책 위반을 탐지하기 위해 모든 AI 관련 VPC 엔드포인트에서 VpceAccessDenied 오류 캡처에 집중합니다. 아래 셀렉터는 AI 에이전트가 VPC 엔드포인트를 통해 가장 일반적으로 접근하는 세 가지 서비스인 Bedrock, Amazon S3, Lambda를 다룹니다.

이 셀렉터의 기능

Bedrock, Amazon S3, Lambda가 VpceAccessDenied 오류를 반환한 네트워크 활동 이벤트를 로깅하며, 이는 VPC 내의 트래픽이 VPC 엔드포인트 정책에 의해 차단되었음을 나타냅니다. 이는 모든 성공적인 네트워크 활동을 로깅하는 볼륨 없이 전체 AI 워크로드 영역에서 거부된 접근을 캡처합니다. Amazon S3 거부는 학습 데이터 또는 모델 아티팩트 버킷에 도달하지 못한 에이전트를 탐지합니다. Lambda 거부는 액션 그룹 핸들러 또는 AI 파이프라인 함수를 호출하지 못한 에이전트를 탐지합니다.

Network Activity 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관리 이벤트모든 서비스, 모든 리전 (Read + Write)InvokeModel, Converse, ListAsyncInvokes, AgentCore 관리 이벤트를 기본적으로 캡처
2Data EventsAll 18 Bedrock resource typesAgent invocations, RAG, flows, guardrails, sessions, data automation, tools, and more. See Bedrock selectors
3Data EventsAll 14 AgentCore resource typesGateway traffic, runtime operations, built-in tools, credentials, memory, evaluation. See AgentCore selectors
4Insights EventsAccount-wideApiCallRateInsight and ApiErrorRateInsight for management and data events
5Data EventsAWS::S3::Object (AI buckets)Write-only on ai-training-data, model-artifacts, and cicd-pipeline prefixed buckets
6Data EventsAWS::Lambda::FunctionProduction AI functions only; exclude dev and test function name prefixes
7Network Activity EventsBedrock, S3, and Lambda VPC endpointsVpceAccessDenied on bedrock.amazonaws.com, s3.amazonaws.com, and lambda.amazonaws.com

데이터 이벤트 수집 최적화

Advanced event selectors를 사용하면 비용과 로그 볼륨을 모두 제어하는 정밀한 필터링이 가능합니다. 다음 전략들은 각 주요 리소스 유형을 보안적으로 관심 있는 이벤트만으로 범위를 좁히는 방법을 보여줍니다.

Bedrock: 프로덕션 리소스로 범위 한정

위의 advanced event selectors는 이미 Bedrock 데이터 이벤트를 ARN으로 특정 리소스에 범위를 한정합니다. 볼륨을 더 줄이려면 ARN 접두사를 프로덕션 에이전트와 지식 기반만으로 좁히고, 비프로덕션 또는 실험적 리소스를 제외하세요:

리소스 ID를 실제 프로덕션 리소스 식별자로 교체하세요

아래의 리소스 ID(PROD_AGENT_ID, PROD_KB_ID)는 예시입니다. 프로덕션 환경의 실제 에이전트 및 지식 기반 ID로 교체하세요. 이 ID는 Bedrock consoleAgentsKnowledge bases에서 확인하거나 aws bedrock list-agentsaws bedrock list-knowledge-bases 명령으로 찾을 수 있습니다.

이 설정의 효과

Bedrock 데이터 이벤트 로깅을 특정 리소스 ID 접두사와 일치하는 ARN의 에이전트 별칭 및 지식 기반으로만 제한합니다. 프로덕션에서 사용하는 정확한 에이전트 및 지식 기반 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 쓰기 전용 advanced event selector JSON은 Section 6.2를 참조하세요.

Inline Agent: IAM 자격 증명별 필터링

AWS::Bedrock::InlineAgent 셀렉터는 인라인 에이전트에 영구 리소스 ARN이 없기 때문에 resources.ARN 필터링을 지원하지 않습니다. 추가 필터링 없이는 이 셀렉터가 계정 전체의 모든 InvokeInlineAgent 호출을 캡처하여 높은 데이터 이벤트 볼륨과 비용을 발생시킬 수 있습니다. userIdentity.arn 필드를 사용하여 로깅 범위를 특정 IAM 역할(예: 프로덕션 Bedrock 실행 역할)로 한정하고, 높은 볼륨의 인라인 에이전트 호출을 생성하는 개발 또는 자동화 서비스 역할을 제외하세요.

역할 이름을 실제 IAM 역할 이름으로 교체하세요

아래의 역할 이름(BEDROCK_EXECUTION_ROLE_NAME, dev-, test-)은 예시입니다. ACCOUNT_ID를 AWS 계정 ID로, BEDROCK_EXECUTION_ROLE_NAME을 애플리케이션이 InvokeInlineAgent를 호출하는 데 사용하는 실제 IAM 역할 이름으로 교체하세요. IAM consoleRoles에서 역할 이름을 확인하거나 Bedrock 에이전트에 구성된 실행 역할을 확인하세요. "Exclude Dev Roles" 탭에서 dev-test-를 조직에서 비프로덕션 역할에 사용하는 실제 이름 접두사로 교체하세요.

이 설정의 효과

InlineAgent 데이터 이벤트 로깅을 특정 ARN 접두사와 일치하는 IAM 역할의 호출로만 제한합니다. eventName 필터는 InvokeInlineAgent 호출만 캡처하도록 제한하고, userIdentity.arn 필터는 프로덕션 역할로 범위를 한정합니다. ACCOUNT_ID를 AWS 계정 ID로, BEDROCK_EXECUTION_ROLE_NAME을 애플리케이션이 InvokeInlineAgent를 호출하는 데 사용하는 실제 IAM 역할 이름으로 교체하세요.

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"
]
}
]
}
]

userIdentity.arn 필드는 InlineAgent뿐만 아니라 모든 advanced event selector에서 지원됩니다. resources.ARN 필터링이 충분하지 않은 고볼륨 데이터 이벤트 셀렉터에도 동일한 필터링 기법을 적용할 수 있습니다. 지원되는 필드 및 연산자의 전체 목록은 Filtering data events by using advanced event selectors를 참조하세요.

Lambda: 프로덕션 함수만

StartsWith 연산자를 프로덕션 함수 접두사(prod-, ai-agent-)로만 범위를 한정하여 프로덕션 AI 워크로드에 데이터 이벤트 로깅을 집중하세요. 개발 및 테스트 함수는 접두사가 일치하지 않으므로 정의상 제외됩니다.

전체 Lambda 프로덕션 전용 advanced event selector JSON은 Section 6.4를 참조하세요.

CloudTrail Network Activity Events: VpceAccessDenied만

네트워크 활동 이벤트의 경우, Bedrock, Amazon S3, Lambda VPC 엔드포인트에서 거부된 접근만 로깅하면 모든 네트워크 활동을 로깅하는 것에 비해 볼륨을 줄이면서 핵심 보안 이벤트를 캡처할 수 있습니다.

전체 Bedrock, Amazon S3, Lambda VpceAccessDenied 네트워크 활동 이벤트 셀렉터 JSON은 Advanced event selector fields for network activity events를 참조하세요.

AgentCore: 보안 우선순위에 따른 단계적 활성화

AgentCore 데이터 이벤트는 14개의 리소스 유형에 걸쳐 있습니다. 보안 우선순위에 따라 단계적으로 활성화하세요:

  1. Phase 1 (최우선): Gateway (AWS::BedrockAgentCore::Gateway) 및 자격 증명 접근 (TokenVault, OAuth2CredentialProvider, APIKeyCredentialProvider) — 외부 접근과 자격 증명 검색을 캡처하며, 보안상 가장 민감한 두 가지 표면입니다.
  2. Phase 2: Runtime 및 RuntimeEndpoint — 에이전트 수명 주기 및 세션 관리를 캡처합니다.
  3. Phase 3: 내장 도구 (CodeInterpreter, Browser 및 Custom 변형) — 에이전트가 실제 환경에서 수행하는 작업을 캡처합니다.
  4. Phase 4: Memory, WorkloadIdentity, WorkloadIdentityDirectory, Evaluator — 에이전트 상태 및 자격 증명 관리를 캡처합니다.

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 Advanced Event Selectors

AWS Organizations 트레일에서 여러 계정을 다루는 경우, 모든 AI 워크로드 셀렉터를 단일 트레일 구성에 결합하세요. 이것은 Bedrock 데이터 이벤트, AgentCore 데이터 이벤트, S3 쓰기 전용 필터링, Lambda 프로덕션 함수 로깅, Bedrock 네트워크 활동 거부 접근 탐지를 하나의 트레일에 결합하는 완전한 advanced event selector 세트를 정의합니다.

적용 전 모든 자리 표시자 값을 교체하세요

아래의 셀렉터는 모든 서비스 셀렉터를 단일 조직 트레일에 결합한 예시입니다. 적용하기 전에 모든 자리 표시자를 실제 리소스 식별자로 교체해야 합니다.

전체 자리 표시자 참조 테이블은 위의 BedrockAgentCore 섹션을 참조하세요. 여러 계정에 걸치는 조직 트레일의 경우, 다른 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 엔드포인트 거부), 에이전트-리소스 접근 패턴에 대한 크로스 서비스 상관관계를 다룹니다.

모든 쿼리에서 로그 그룹 이름을 교체하세요

모든 쿼리는 YOUR_CLOUDTRAIL_LOG_GROUP을 자리 표시자로 사용합니다. CloudTrail 트레일이 이벤트를 전달하는 CloudWatch Logs 로그 그룹 이름으로 교체하세요(예: aws-cloudtrail-logs/management-events). 이는 CloudTrail 콘솔에서 트레일의 CloudWatch Logs 구성에서 확인할 수 있습니다. 크로스 파이프라인 쿼리는 bedrock-model-invocation-loggingaws/spans도 참조합니다 — 로그 그룹이 다른 이름을 사용하는 경우 해당 이름도 교체하세요.

중요

CloudWatch Logs Insights에서 OpenSearch SQL 구문을 사용할 때, 특수 문자가 포함된 필드는 백틱으로 감싸세요. 예: `userIdentity.arn`, `responseElements.ConsoleLogin`. 대시보드에서 이러한 쿼리 위젯을 생성할 때 쿼리 언어를 SQL로 설정하세요.

Query 1: 비인가 Bedrock 접근 탐지 (관리 및 데이터 이벤트)

Bedrock API에 대해 AccessDenied 또는 UnauthorizedOperation 오류를 받는 모든 IAM 자격 증명을 표면화합니다

관리 이벤트(모델 호출) 및 데이터 이벤트(에이전트, 지식 기반, 플로우, 가드레일 작업) 전반에서 Bedrock API에 대해 AccessDenied 또는 UnauthorizedOperation 오류를 받는 모든 IAM 자격 증명을 빈도별로 순위를 매깁니다. 익숙하지 않은 자격 증명에서 높은 횟수가 발생하면 의도하지 않은 접근 시도의 지표입니다.

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

Query 2: IAM 자격 증명별 Bedrock 에이전트 호출 모니터링

어떤 IAM 자격 증명이 Bedrock 에이전트 및 인라인 에이전트 호출을 트리거하는지 추적합니다

어떤 IAM 자격 증명이 Bedrock 에이전트 및 인라인 에이전트 호출을 트리거하는지 추적합니다. 에이전트는 호출당 여러 다운스트림 API 호출을 체이닝합니다 — 익숙하지 않은 자격 증명이나 볼륨 급증은 높은 접근 범위를 가집니다. 이 쿼리는 AWS::Bedrock::AgentAliasAWS::Bedrock::InlineAgent advanced event selector로 캡처된 데이터 이벤트를 대상으로 합니다.

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

Query 3: IAM 자격 증명별 지식 기반 검색 활동 모니터링

어떤 IAM 자격 증명이 Bedrock Knowledge Bases에 대해 Retrieve 및 RetrieveAndGenerate 호출을 수행하는지 순위를 매깁니다

어떤 IAM 자격 증명이 Bedrock Knowledge Bases에 대해 RetrieveRetrieveAndGenerate 호출을 수행하는지 순위를 매깁니다. 지식 기반에는 조직의 독점 데이터가 포함되어 있으므로 — 익숙하지 않은 자격 증명이나 예기치 않은 볼륨 급증은 이상 데이터 접근을 나타낼 수 있습니다. 이 쿼리는 AWS::Bedrock::KnowledgeBase advanced event selector로 캡처된 데이터 이벤트를 대상으로 합니다.

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

Query 4: 에이전트 크로스 서비스 접근 거부 탐지

다운스트림 서비스(S3, Lambda, KMS, Secrets Manager, SageMaker)에 대한 접근이 거부된 위임 역할을 표면화합니다

위임 역할(일반적으로 Bedrock 에이전트 실행 역할)이 Amazon S3, Lambda, KMS, Secrets Manager, SageMaker에 접근을 시도할 때 거부되는 경우를 표면화합니다. 이는 에이전트-리소스 접근 제어 예외를 탐지하기 위한 핵심 쿼리입니다. 단일 역할에서 높은 횟수가 발생하면 에이전트 권한 경계의 잘못된 구성이거나 에이전트가 의도된 범위 밖의 리소스에 접근하는 것을 나타냅니다. (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

Query 6: 예기치 않은 소스 IP에서의 Bedrock 호출 탐지

Bedrock 및 AgentCore 호출을 수행하는 모든 고유 소스 IP 주소를 나열합니다

모델 호출, 에이전트 호출, 지식 기반 검색, 플로우 호출, 비동기 호출, 가드레일 적용, AgentCore 게이트웨이 호출을 포함하여 Bedrock 및 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

Query 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

Query 23: Bedrock 세션 활동 모니터링

멀티턴 Bedrock 대화에 대한 세션 레벨 API 활동을 추적합니다

세션 생성, 업데이트, 검색을 포함하여 Bedrock 전반의 모든 세션 작업을 표면화합니다. 세션은 멀티턴 대화에서 상태를 유지합니다 — 익숙하지 않은 자격 증명이 세션을 생성하거나 접근하면 대화형 AI 리소스의 이상 사용을 나타낼 수 있습니다. (Agentic AI Security Scoping Matrix Orchestration 차원 — 에이전트-시스템 간 상호 작용 관리 및 세션 플로우 제어를 구현합니다.)

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

Query 24: Bedrock Flow Execution 활동 모니터링

프롬프트 플로우 실행 모니터링을 위한 플로우 실행 작업을 추적합니다

Flow Execution은 Bedrock Prompt Flows의 활성 실행을 나타냅니다 — 모델 호출, 데이터 변환, 조건부 로직을 체이닝하는 다단계 AI 파이프라인입니다. 익숙하지 않은 자격 증명에서의 예기치 않은 플로우 실행이나 볼륨 급증은 이상 오케스트레이션 활동을 나타낼 수 있습니다. (Agentic AI Security Scoping Matrix Orchestration 차원 — 실행 플로우 제어 및 에이전트-시스템 간 상호 작용 관리를 구현합니다.)

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

Query 25: Bedrock Data Automation 활동 모니터링

문서 및 미디어 처리를 위한 데이터 자동화 프로젝트 및 호출 활동을 추적합니다

Bedrock Data Automation은 AI 파이프라인을 통해 문서, 이미지, 미디어를 처리합니다. 의도하지 않은 호출은 자동화 워크플로우를 통해 의도된 경계 밖에서 문서를 처리하거나 데이터를 이동시킬 수 있습니다. 이 쿼리는 프로젝트 및 호출 전반의 모든 데이터 자동화 활동을 표면화합니다. (Generative AI Security Scoping Matrix Governance & Compliance 차원 — 데이터 처리 작업 및 데이터 주권에 대한 감사 추적을 구현합니다.)

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

Query 26: Bedrock Tool 호출 모니터링

도구 사용 작업에 대한 Bedrock Tool API 활동을 추적합니다

Bedrock Tool 이벤트는 대화 중 모델이 도구를 호출할 때를 캡처합니다 — 이것은 모델이 도구 사용을 통해 실제 환경에서 수행하는 작업입니다. 예기치 않은 도구 호출 패턴이나 익숙하지 않은 호출자는 모델이 의도된 범위 밖에서 작동하는 것을 나타냅니다. (Agentic AI Security Scoping Matrix Guardrails 차원 — 도구 사용 작업에 대한 행동 모니터링 — 및 Scope 차원 — 모델이 호출할 수 있는 도구에 대한 운영 경계 적용을 구현합니다.)

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 스팬과 조인하여 단일 파이프라인만으로는 답할 수 없는 질문에 대응합니다.

사전 요구사항

이 쿼리들은 세 가지 파이프라인 모두가 활성화되어 있어야 합니다:

  • Bedrock 및 AgentCore 관리 및 데이터 이벤트와 함께 YOUR_CLOUDTRAIL_LOG_GROUP에 전달되는 CloudTrail
  • Bedrock Model Invocation Logging 활성화, bedrock-model-invocation-logging에 전달
  • Agent Telemetry (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에는 없음
각 쿼리 펼치기

아래 쿼리 제목을 클릭하면 전체 설명, 메타데이터, SQL 문을 볼 수 있습니다.

Query 18: 누가 무엇을 질문했고, 모델은 무엇을 답했는가?

CloudTrail 호출자 자격 증명과 Bedrock Model Invocation Logging 프롬프트 및 응답 콘텐츠를 조인합니다
  • 목적: CloudTrail(호출자 자격 증명, 소스 IP)과 Bedrock Model Invocation Logging(프롬프트 및 응답 콘텐츠)을 requestId로 조인합니다. "누가 모델에 무엇을 질문했고, 모델이 무엇을 답했는가?"에 답하기 위해 자주 사용되는 쿼리입니다 — 보안 감사, 컴플라이언스 리뷰, 할루시네이션 조사의 기초입니다. 예: 고객이 불쾌한 모델 응답을 보고합니다; 이 쿼리는 호출자의 IAM 역할, 소스 IP, 전송된 정확한 프롬프트, 사용된 추론 파라미터, 응답을 한 행에 제공합니다. (Generative AI Security Scoping Matrix Governance & Compliance 차원 — 데이터 주권 및 컴플라이언스 리뷰 프로세스를 지원하는 감사 추적 — 및 Agentic AI Security Scoping Matrix Audit & Logging 차원 — 자격 증명 컨텍스트를 포함한 액션 레벨 활동 추적을 구현합니다.)
  • 소스: 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

Query 19: 호출자 자격 증명과 연결된 에이전트 세션 성능

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

Query 20: 전체 세 파이프라인 조인 — 세션, 콘텐츠, 성능

세 개의 로그 그룹을 requestId로 조인하여 단일 모델 호출의 통합 뷰를 제공합니다
  • 목적: 세 개의 로그 그룹을 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

Query 21: 가드레일 수정과 다운스트림 모델 콘텐츠 상관관계

CloudTrail에서 가드레일 변경을 찾고 변경 후 모델 응답과 상관시킵니다
  • 목적: CloudTrail에서 UpdateGuardrail 또는 DeleteGuardrail 이벤트를 찾고 변경 후 시간 범위의 모델 응답과 상관시킵니다. 가드레일 수정이 검증되지 않은 또는 정책 위반 모델 출력을 선행했는지 탐지합니다. 예: UpdateGuardrail에 대한 보안 알림이 트리거됩니다; 이 쿼리는 약화된 가드레일 하에서 생성된 모델 응답을 즉시 보여주어 검토할 수 있습니다. (Agentic AI Security Scoping Matrix Guardrails 차원 — 동적 행동 모니터링 — 및 Generative AI Security Scoping Matrix Risk Management 차원 — 가드레일 수정 및 다운스트림 영향 탐지를 구현합니다.)
  • 소스: 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

Query 22: 크로스 서비스 접근 거부가 있는 에이전트 세션

ADOT 에이전트 세션과 동일 위임 역할의 CloudTrail AccessDenied 이벤트를 상관시킵니다
  • 목적: ADOT 에이전트 세션과 동일 위임 역할의 CloudTrail AccessDenied 이벤트를 상관시킵니다. "어떤 에이전트 세션이 다운스트림 서비스에서 권한 오류를 트리거했는가?"에 답합니다. 예: 에이전트가 도구에서 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
성능 참고사항

CloudWatch Logs Insights SQL의 크로스 로그 그룹 JOIN은 대규모 데이터셋에서 느릴 수 있습니다. 긴 시간 범위의 대시보드 위젯으로 예약하기 전에 좁은 시간 범위(최근 15분, 최근 1시간)로 테스트하세요. 지속적인 상관관계를 위해서는 세 로그 그룹 모두를 단일 대상(S3, OpenSearch)으로 내보내고 그곳에서 조인을 실행하는 것을 고려하세요.

Metric Filters

Metric filters는 CloudTrail 로그 이벤트에서 값을 추출하고 사용자 지정 CloudWatch 메트릭을 생성하도록 설계되어 있으며, 지속적인 쿼리 실행 없이도 거의 실시간 알림을 가능하게 합니다. 필터 패턴 구문은 JSON 속성 셀렉터를 사용하여 CloudTrail 이벤트 레코드의 특정 필드를 매칭합니다. 아래 필터는 AI 워크로드 보안 이벤트에 특화되어 있으며, Bedrock 리소스에 대한 비인가 접근, 에이전트 활동 이상, 가드레일 수정, AI 인프라 구성 변경을 탐지합니다.

Metric Filter 1: Bedrock 서비스에 대한 비인가 접근

Bedrock API에 대한 AccessDenied 및 UnauthorizedOperation 오류를 캡처합니다

단일 자격 증명에서 Bedrock 호출 거부가 갑자기 증가하면 반복적인 의도하지 않은 접근 시도이거나, 에이전트가 인가된 범위 외의 모델 또는 지식 기반에 접근하려는 시도를 나타내는 경우가 많습니다.

Filter Pattern:

{ ($.eventSource = "bedrock.amazonaws.com") && (($.errorCode = "AccessDenied") || ($.errorCode = "UnauthorizedOperation")) }
  • Metric Namespace: AIWorkloadMetrics
  • Metric Name: BedrockUnauthorizedAccess

Metric Filter 2: Bedrock 에이전트 호출

Bedrock 에이전트 및 인라인 에이전트의 호출을 집계합니다

에이전트는 단일 호출 내에서 여러 서비스에 걸쳐 다수의 API 호출을 연쇄할 수 있어 높은 영향도의 공격 표면이 됩니다. 이 메트릭을 추적하여 인식되지 않은 호출자에 의해 에이전트가 트리거되고 있음을 나타낼 수 있는 예기치 않은 에이전트 활동이나 볼륨 급증을 감지하세요.

Filter Pattern:

{ ($.eventSource = "bedrock.amazonaws.com") && ($.eventName = "InvokeAgent" || $.eventName = "InvokeInlineAgent") }
  • Metric Namespace: AIWorkloadMetrics
  • Metric Name: BedrockAgentInvocations

Metric Filter 3: Bedrock Knowledge Base 검색 활동

Knowledge Base에 대한 Retrieve 및 RetrieveAndGenerate 호출을 추적합니다

Knowledge Base에는 조직의 독점 데이터가 포함되어 있으며, 비정상적인 검색 활동은 비인가 데이터 접근을 나타낼 수 있습니다. 예기치 않은 자격 증명이나 볼륨 급증을 모니터링하세요.

Filter Pattern:

{ ($.eventSource = "bedrock.amazonaws.com") && ($.eventName = "Retrieve" || $.eventName = "RetrieveAndGenerate") }
  • Metric Namespace: AIWorkloadMetrics
  • Metric Name: BedrockKnowledgeBaseRetrievals

Metric Filter 6: Bedrock 모델 호출 볼륨

기준선 설정 및 급증 탐지를 위해 모든 Bedrock 모델 호출을 집계합니다

이 메트릭을 사용하여 정상적인 AI 모델 사용량의 기준선을 수립하고, 의도하지 않은 자동화 활동, 의도하지 않은 자격 증명 사용, 또는 의도하지 않은 재귀 순환에 빠진 에이전트를 나타낼 수 있는 볼륨 급증을 감지하세요.

Filter Pattern:

{ ($.eventSource = "bedrock.amazonaws.com") && ($.eventName = "InvokeModel" || $.eventName = "InvokeModelWithResponseStream" || $.eventName = "Converse" || $.eventName = "ConverseStream" || $.eventName = "InvokeModelWithBidirectionalStream" || $.eventName = "GetAsyncInvoke" || $.eventName = "StartAsyncInvoke") }
  • Metric Namespace: AIWorkloadMetrics
  • Metric Name: BedrockModelInvocations

Metric Filter 8: Bedrock Flow 호출

Bedrock Prompt Flow 별칭에 대한 InvokeFlow 호출을 추적합니다

Flow는 다단계 AI 파이프라인을 오케스트레이션합니다. 익숙하지 않은 자격 증명으로부터의 예기치 않은 플로우 호출이나 예상치 못한 볼륨 변화는 인식되지 않은 자격 증명이 오케스트레이션 로직을 트리거하고 있음을 나타낼 수 있습니다. 이는 AWS::Bedrock::FlowAlias advanced event selector로 캡처되는 데이터 이벤트입니다.

Filter Pattern:

{ ($.eventSource = "bedrock.amazonaws.com") && ($.eventName = "InvokeFlow") }
  • Metric Namespace: AIWorkloadMetrics
  • Metric Name: BedrockFlowInvocations

Metric Filter 21: Bedrock 세션 활동

다중 턴 Bedrock 대화의 세션 수준 API 작업을 집계합니다

세션은 다중 턴 대화에서 상태를 유지합니다. 이 메트릭을 추적하여 의도하지 않은 대화형 AI 리소스 사용을 나타낼 수 있는 예기치 않은 세션 생성 또는 액세스 패턴을 감지하세요. (Agentic AI Security Scoping Matrix Orchestration 차원 — 에이전트-시스템 상호작용 관리 및 세션 흐름 제어를 구현합니다.)

Filter Pattern:

{ ($.eventSource = "bedrock.amazonaws.com") && ($.resources[0].type = "AWS::Bedrock::Session") }
  • Metric Namespace: AIWorkloadMetrics
  • Metric Name: BedrockSessionOperations

Metric Filter 22: Bedrock Flow 실행 활동

프롬프트 흐름 실행을 모니터링하기 위한 흐름 실행 작업을 집계합니다

흐름 실행은 다단계 AI 파이프라인의 활성 실행을 나타냅니다. 예기치 않은 볼륨 변화는 AI 파이프라인의 의도하지 않은 오케스트레이션 또는 재시도 루프에 갇힌 흐름을 나타냅니다. (Agentic AI Security Scoping Matrix Orchestration 차원 — 실행 흐름 제어 및 에이전트-시스템 상호작용 관리를 구현합니다.)

Filter Pattern:

{ ($.eventSource = "bedrock.amazonaws.com") && ($.resources[0].type = "AWS::Bedrock::FlowExecution") }
  • Metric Namespace: AIWorkloadMetrics
  • Metric Name: BedrockFlowExecutions

Metric Filter 23: Bedrock 데이터 자동화 호출

문서 및 미디어 처리를 위한 데이터 자동화 호출을 집계합니다

데이터 자동화는 AI 파이프라인을 통해 문서, 이미지 및 미디어를 처리합니다. 의도하지 않은 호출은 문서를 처리하거나 자동화 워크플로우를 통해 의도된 경계 밖으로 데이터를 이동시킬 수 있습니다. (Generative AI Security Scoping Matrix Governance & Compliance 차원 — 데이터 처리 작업에 대한 감사 추적을 구현합니다.)

Filter Pattern:

{ ($.eventSource = "bedrock.amazonaws.com") && ($.resources[0].type = "AWS::Bedrock::DataAutomationInvocation" || $.resources[0].type = "AWS::Bedrock::DataAutomationProject") }
  • Metric Namespace: AIWorkloadMetrics
  • Metric Name: BedrockDataAutomationInvocations

Metric Filter 24: Bedrock 도구 호출

도구 사용 작업에 대한 Bedrock 도구 API 활동을 집계합니다

도구 이벤트는 모델이 대화 중에 도구를 호출할 때를 캡처합니다 — 이는 모델이 실제 세계에서 수행하는 작업입니다. 예기치 않은 급증은 모델이 의도된 범위를 벗어나 작동하거나 인식되지 않은 호출자가 도구 사용을 트리거하고 있음을 나타냅니다. (Agentic AI Security Scoping Matrix Guardrails 차원 — 도구 사용 작업에 대한 행동 모니터링을 구현합니다.)

Filter Pattern:

{ ($.eventSource = "bedrock.amazonaws.com") && ($.resources[0].type = "AWS::Bedrock::Tool") }
  • Metric Namespace: AIWorkloadMetrics
  • Metric Name: BedrockToolInvocations

CloudWatch 알람

Section 11에서 정의한 각 메트릭 필터에 CloudWatch Alarms을 생성하세요. Amazon SNS를 통해 보안 운영 팀에 적절한 심각도 등급으로 알람 알림을 라우팅하세요. 아래 표는 각 알람에 권장되는 임계값과 평가 기간을 제공합니다.

이러한 알람은 구성 변경, 무단 액세스 및 인증 실패 시 트리거됩니다 — SNS를 통해 보안 팀에 라우팅하세요.

Alarm NameMetricThresholdPeriod
Bedrock Unauthorized AccessBedrockUnauthorizedAccess> 55 min
Bedrock Guardrail ModificationBedrockGuardrailChanges> 01 min
Bedrock Logging Config ChangeBedrockLoggingConfigChanges> 01 min
AI Role Permission EscalationAIRolePermissionChanges> 01 min
AI Services VPC Endpoint Access DeniedAIServicesVpceAccessDenied> 05 min
Agent Cross-Service Access DeniedAgentCrossServiceAccessDenied> 105 min
CloudTrail Insights AnomalyCloudTrailInsightsAnomalies> 05 min
CloudTrail Logging DisruptionCloudTrailLoggingDisruption> 01 min
AgentCore Gateway Auth FailuresAgentCoreGatewayAuthFailures> 55 min
AgentCore Credential Access AnomalyAgentCoreCredentialAccess> 505 min
AgentCore Gateway Config ChangeAgentCoreGatewayConfigChanges> 01 min
Automated Reasoning Policy ChangeBedrockAutomatedReasoningChanges> 01 min

Contributor Insights 규칙

CloudWatch Contributor Insights는 시계열 데이터를 거의 실시간으로 분석하여 CloudWatch Logs 로그 그룹의 활동 패턴에 영향을 미치는 상위 기여자를 표면화하도록 설계되었습니다. CloudTrail 로그 그룹에 적용하면, Contributor Insights 규칙은 수동 쿼리 실행 없이 AI 워크로드 전반에서 활동을 주도하는 상위 IAM ID, 리소스 및 소스 IP를 지속적으로 식별합니다. 아래 규칙은 이 가이드에서 캡처하는 모든 이벤트 카테고리를 포함합니다: 관리 이벤트, 데이터 이벤트, 네트워크 활동 이벤트 및 보안 구성 변경.

중요

Contributor Insights 규칙은 CloudWatch Logs Standard 로그 클래스 로그 그룹에만 적용할 수 있습니다. CloudTrail 전송 로그 그룹이 Standard 클래스로 설정되어 있는지 확인하세요.

Rule 1: Bedrock 모델을 호출하는 상위 IAM ID

가장 많은 Bedrock 모델 호출 호출을 수행하는 IAM 주체의 순위를 매깁니다

갑자기 새로운 ID가 상위 기여자로 나타나거나, 기존 ID의 크게 증가하면 우선적인 대응이 필요합니다.

Rule Name: 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"]
}

Rule 2: Bedrock 에이전트를 호출하는 상위 IAM ID

Bedrock 에이전트 호출을 트리거하는 IAM 주체를 표면화합니다

Rule Name: 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"]
}

Rule 3: Knowledge Base에서 검색하는 상위 IAM ID

Bedrock Knowledge Base에서 검색하는 IAM 주체의 순위를 매깁니다

Rule Name: 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"]
}

Rule 4: Bedrock Flow를 호출하는 상위 IAM ID

Bedrock Prompt Flow 호출을 트리거하는 IAM 주체를 추적합니다

Rule Name: 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"]
}

Rule 19: Bedrock 세션 활동별 상위 IAM ID

Bedrock 세션을 생성하고 접근하는 IAM 주체를 표면화합니다

Rule Name: 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"]
}

Rule 20: Bedrock Flow 실행 활동별 상위 IAM ID

Bedrock 흐름 실행을 수행하는 IAM 주체를 표면화합니다

Rule Name: 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"]
}

Rule 21: Bedrock 데이터 자동화 활동별 상위 IAM ID

문서 및 미디어 처리를 위해 Bedrock 데이터 자동화를 호출하는 IAM 주체를 표면화합니다

Rule Name: 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"]
}

Rule 22: Bedrock 도구 호출별 상위 IAM ID

Bedrock 도구 사용 작업을 트리거하는 IAM 주체를 표면화합니다

Rule Name: 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 데이터 이벤트 집계

Event Aggregation은 데이터 이벤트를 5분 요약으로 통합하여 액세스 빈도, 오류율, 가장 자주 사용되는 API 작업 등 주요 트렌드에 대한 가시성을 제공하도록 설계되었습니다. 이를 통해 보안 모니터링 및 트렌드 분석에 권장되는 인사이트를 유지하면서 다운스트림 분석 시스템으로 전송되는 데이터 볼륨을 크게 줄입니다. 집계된 이벤트는 집계 이벤트 레코드에서 eventCategory = AggregatedeventType = AwsAggregatedEvent 필드를 사용합니다.

집계 활성화

CloudTrail 콘솔로 이동하여 트레일을 선택하세요. Aggregated Events 섹션에서 Edit를 선택하고 다음 집계 템플릿을 활성화하세요:

  • API Activity — API 호출 빈도, 상위 호출자, 소스 IP 분포를 포함한 데이터 이벤트의 5분 요약
  • Resource Access — 누가 어떤 리소스에 얼마나 자주 접근하는지를 보여주는 AWS 리소스의 활동 패턴
  • User Actions — IAM 주체별 API 호출 활동 패턴으로, 행동 이상을 식별하는 데 유용

CloudTrail 집계 이벤트 쿼리

집계된 이벤트는 eventCategory = 'Aggregated'로 CloudWatch Logs 로그 그룹의 표준 이벤트와 함께 전달됩니다. 다음 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 Model Invocation Logging 및 Agent Telemetry (ADOT SDK))을 중앙 집중식 뷰로 결합하는 통합 CloudWatch 대시보드를 구축하세요. 아래 레이아웃은 대상별로 위젯을 구성합니다 — 보안/감사는 왼쪽, 운영 모니터링은 가운데, 비용/FinOps는 오른쪽 — 그리고 상위 수준 상태 지표에서 상세 조사 쿼리까지 계층화합니다.

대시보드 이름

기본 모니터링 리전에서 AI-Workload-Security-Dashboard라는 이름으로 대시보드를 생성하세요.

AI-Workload-Security-Dashboard

권장 위젯 레이아웃

프로 팁

Logs Insights 위젯의 경우, 쿼리 소스에 따라 SQL 또는 CWLI를 쿼리 언어로 선택하세요. 크로스 로그 그룹 JOIN 쿼리(크로스 파이프라인 상관 쿼리에서 제공)는 SQL을 사용해야 합니다. 단일 로그 그룹 쿼리는 어느 것이든 사용할 수 있습니다.

Row 1 — 상위 수준 상태 및 주요 카운터.

WidgetWidget TypeData Source
Alarm Status GridAlarm StatusCloudWatch Alarms의 모든 메트릭 필터 알람
Bedrock Model Invocations CountNumber (Metric)AIWorkloadMetrics/BedrockModelInvocations
Total Bedrock SpendSingle value (Logs)Model Invocation Log — 총 비용 쿼리 (FinOps 대시보드)
Agent Cross-Service Denied CountNumber (Metric)AIWorkloadMetrics/AgentCrossServiceAccessDenied
노트

Row 5-7은 동반 가이드 Custom Dashboards for GenAI Telemetry의 쿼리를 사용합니다. 여기에 중복하지 않고 해당 쿼리를 직접 사용하세요.

결론 및 다음 단계

이 가이드는 AWS에서 AI 워크로드를 위한 엔드투엔드 모니터링 및 감사 아키텍처를 다루었습니다 — 세 가지 텔레메트리 파이프라인, 각각의 활성화, CloudTrail 특정 탐지(메트릭 필터, 알람, Contributor Insights)(Bedrock 및 AgentCore 데이터 이벤트 모두), CloudTrail을 Bedrock Model Invocation Logging 및 ADOT 스팬과 조인하는 크로스 파이프라인 상관 쿼리, 그리고 통합 CloudWatch 대시보드. 각 섹션은 구현 개요의 단계별 로드맵에 따라 점진적으로 구현되도록 설계되었습니다.

핵심 아이디어: CloudTrail만으로는 누가 무엇을 했는지를 보여주고, Model Invocation Logging은 모델이 무엇을 말했는지를 보여주며, ADOT는 에이전트가 어떻게 수행했는지를 보여줍니다. AgentCore 데이터 이벤트를 통해 CloudTrail은 이제 에이전트가 실제로 무엇을 했는지도 보여줍니다 — 어떤 도구를 호출했는지, 어떤 자격 증명에 접근했는지, 어떤 게이트웨이가 트래픽을 수신했는지, 메모리에 무엇을 저장했는지. 가치는 조사 중에 이러한 신호를 조인하는 데서 나옵니다 — 단일 파이프라인으로는 모든 질문에 답할 수 없습니다.

이러한 기능을 함께 사용하면 Generative AI Security Scoping MatrixAgentic AI Security Scoping Matrix에서 정의한 보안 차원에 대한 구체적인 구현을 제공합니다.

다음 단계

  1. Phase 1부터 시작하세요. 세 가지 텔레메트리 파이프라인을 모두 활성화하세요. 나머지 두 가지(Model Invocation Logging, ADOT)가 상관 쿼리를 가능하게 합니다.
  2. CloudTrail Bedrock 데이터 이벤트를 활성화하세요. AI 워크로드 감사를 위한 중요한 단계입니다.
  3. CloudTrail AgentCore 데이터 이벤트를 활성화하세요. Gateway 및 자격 증명 액세스(그룹 2 및 3)부터 시작한 다음, 기준 볼륨을 설정한 후 내장 도구 및 메모리(그룹 1 및 4)로 확장하세요.
  4. 기준선을 검증하세요. Security Analytics의 쿼리 2와 4, 그리고 Security Analytics의 AgentCore 탭에서 쿼리 12-14를 실행하여 알람 임계값을 설정하기 전에 정상 사용량을 확립하세요.
  5. 응답을 자동화하세요. CloudWatch Alarms를 Amazon SNS 주제, AWS Lambda 함수 또는 Systems Manager 런북에 연결하여 탐지와 교정 사이의 격차를 줄이세요.
  6. GuardDuty와 통합하세요. Amazon GuardDuty는 여기서의 맞춤 모니터링을 보완하는 관리형 위협 탐지를 제공합니다. GuardDuty는 탐지 규칙을 유지할 필요 없이 CloudTrail 이벤트에서 알려진 위협 패턴을 분석합니다.
  7. 비용을 검토하세요. 데이터 이벤트, Insights 분석 및 네트워크 활동 이벤트는 모두 요금이 발생합니다. CloudTrail 요금 페이지데이터 이벤트 수집 최적화의 볼륨 감소 전략을 사용하세요.

동반 가이드