CloudTrail 네트워크 활동 이벤트 정리
네트워크 활동 이벤트란
네트워크 활동 이벤트(Network Activity Events)란 VPC 엔드포인트를 통과한 AWS API 호출을 엔드포인트 소유자 계정에 기록하는 CloudTrail 이벤트 유형
- 기록 주체: 호출한 계정이 아니라 VPC 엔드포인트를 소유한 계정
- 포착 범위: 사설 VPC에서 엔드포인트를 거쳐 AWS 서비스로 나간 호출
- 목적: 조직 밖 자격 증명이 내 엔드포인트를 경유하려는 시도 탐지
- 기본값: 미기록.
eventSource별로 명시 설정해야 함 - 과금: 기록한 만큼 별도 청구, 관리 이벤트에 있는 첫 사본 무료 없음
graph LR
In["조직 내부 자격 증명"] --> VPCE["VPC Endpoint<br/>(내 계정 소유)"]
Out["조직 밖 자격 증명"] --> VPCE
VPCE --> SVC["AWS 서비스"]
VPCE -. 기록 .-> CT["CloudTrail<br/>(엔드포인트 소유자 계정)"]
- 호출자가 다른 계정 소속이어도 내 엔드포인트를 지나갔으면 내 트레일에 남음
- 데이터 경계(Data Perimeter) 설계에서 조직 밖 자격 증명의 접근 시도를 확인할 수 있는 경로는 이것뿐
엔드포인트 정책과의 역할 구분
VPC 엔드포인트 정책과 네트워크 활동 이벤트는 대체재가 아니라 차단과 기록으로 나뉨
| 구분 | VPC 엔드포인트 정책 | 네트워크 활동 이벤트 |
|---|---|---|
| 역할 | 조건에 안 맞는 호출을 거부 | 엔드포인트를 지난 호출을 기록 |
| 개입 시점 | 요청을 처리하기 전 차단 | 허용·거부 결과와 함께 기록 |
| 남는 것 | 거부 결과만, 시도 내역은 미보존 | 호출자·이벤트명·엔드포인트 ID |
| 조직 밖 자격 증명 | aws:PrincipalOrgID 조건으로 차단 가능 |
누가 몇 번 시도했는지 식별 가능 |
| 비용 | 없음 | 기록 건수 기준 과금 |
- 정책만 걸면 막히기는 하나 누가 두드렸는지 남지 않음 → 침해 조사 시 근거 부재
- 두 가지를 같이 써서 정책으로 막고 이벤트로 시도를 남기는 구성이 일반적
이벤트 유형 비교
CloudTrail 이벤트는 세 유형으로 나뉘고, 네트워크 활동 이벤트만 엔드포인트 경유 트래픽을 다룸
| 비교 항목 | 관리 이벤트 | 데이터 이벤트 | 네트워크 활동 이벤트 |
|---|---|---|---|
eventCategory |
Management |
Data |
NetworkActivity |
| 기록 대상 | 리소스 제어 평면 작업 | 리소스 내부 데이터 작업 | VPC 엔드포인트 경유 호출 |
| 기본 기록 | 기록됨 | 미기록 | 미기록 |
| 트레일 전달 요금 | 첫 사본 무료, 추가 사본 100,000건당 $2.00 | 100,000건당 $0.10 | 100,000건당 $0.10 |
- 요금은 트레일이 S3로 전달하는 이벤트 기준, 이벤트 데이터 스토어(CloudTrail Lake)는 수집 용량(GB) 기준의 별도 체계
- 네트워크 활동 이벤트를 이벤트 데이터 스토어에 담으려면 CloudTrail events 타입이어야 함
고급 이벤트 선택기 필드
네트워크 활동 이벤트는 고급 이벤트 선택기(Advanced Event Selector)로만 설정 가능
| 필드 | 필수 | 사용 가능 연산자 | 설명 |
|---|---|---|---|
eventCategory |
필수 | Equals만 |
값은 NetworkActivity 고정 |
eventSource |
필수 | Equals만 |
s3.amazonaws.com, kms.amazonaws.com 등. 현재 70여 개 |
eventName |
선택 | 전체 | 예: CreateKey, ListKeys |
errorCode |
선택 | Equals만 |
유효값은 VpceAccessDenied 하나뿐 |
vpcEndpointId |
선택 | 전체 | 호출이 통과한 엔드포인트 식별 |
userIdentity.arn |
선택 | 전체 | 호출한 IAM 자격 증명. 트레일 전용 |
eventSource가Equals만 받으므로 여러 서비스를 담으려면 선택기를 서비스별로 따로 만들어야 함- S3는 지원하되 Multi-Region Access Points 경유 호출은 미지원
userIdentity.arn 필터
2026년 7월 추가된 필드로, 호출한 IAM 자격 증명에 따라 기록 여부가 갈림
- 활용: 신뢰하는 IAM 역할 집합에 없는 자격 증명의
VpceAccessDenied만 남기는 구성 - 효과: 승인된 주체의 성공 호출까지 전부 기록하는 비용 없이 유출 시도만 포착
- 조합:
eventName·vpcEndpointId와 함께 걸어 기록 범위를 좁힐 수 있음
이벤트 유형별 지원 범위
같은 userIdentity.arn인데 이벤트 유형마다 쓸 수 있는 곳이 다름
| 이벤트 유형 | 트레일 | 이벤트 데이터 스토어 |
|---|---|---|
| 관리 이벤트 | ❌ | ✅ |
| 데이터 이벤트 | ✅ | ✅ |
| 네트워크 활동 이벤트 | ✅ | ❌ |
- 관리 이벤트의 트레일 선택기가 받는 필드는
eventCategory·eventSource·readOnly세 개뿐 →eventName·eventType·sessionCredentialFromConsole도 이벤트 데이터 스토어에서만 사용 가능 - 네트워크 활동 이벤트는 방향이 반대라 이벤트 데이터 스토어에서 자격 증명 필터를 못 씀
- CloudTrail Lake로 감사를 통합하려던 설계라면 이 지점에서 트레일을 따로 남겨야 함
설정 예시
신뢰 역할을 뺀 나머지 자격 증명의 S3 접근 거부만 기록하는 선택기
aws cloudtrail put-event-selectors \
--trail-name dotoryeee-audit-trail \
--region ap-northeast-2 \
--advanced-event-selectors '[
{
"Name": "Log untrusted VpceAccessDenied for S3",
"FieldSelectors": [
{ "Field": "eventCategory", "Equals": ["NetworkActivity"] },
{ "Field": "eventSource", "Equals": ["s3.amazonaws.com"] },
{ "Field": "errorCode", "Equals": ["VpceAccessDenied"] },
{ "Field": "userIdentity.arn", "NotStartsWith": ["arn:aws:sts::111122223333:assumed-role/dotoryeee-app-role"] }
]
}
]'
- 설정 확인은
aws cloudtrail get-event-selectors --trail-name dotoryeee-audit-trail - 이벤트 데이터 스토어는
create-event-data-store또는update-event-data-store를 쓰되userIdentity.arn은 제외해야 함
조건 평가 규칙
한 필드에 조건을 여러 개 걸면 연산자 성격에 따라 결합 방식이 갈림
| 연산자 그룹 | 연산자 | 결합 |
|---|---|---|
| SELECT | Equals, StartsWith, EndsWith |
서로 OR. 하나만 맞아도 통과 |
| DESELECT | NotEquals, NotStartsWith, NotEndsWith |
서로 AND. 하나만 걸려도 제외 |
- 두 그룹은 AND로 묶임 → DESELECT에 걸리면 SELECT를 만족해도 전달되지 않음
- 와일드카드
*는 미지원 → 여러 값을 한 조건으로 잡으려면 접두·접미 연산자를 씀 - 한 트레일 또는 이벤트 데이터 스토어의 모든 조건에 쓴 값의 합계는 500개까지
기록된 이벤트 확인
기록만 켜두면 쌓이기만 하므로 소비 경로를 같이 설계해야 함
- 트레일 대상은 S3 버킷 → Athena로
VpceAccessDenied발생 건수를 집계 - 이벤트 데이터 스토어에 담았다면 CloudTrail Lake의 SQL로 조회
- 조회 시 유용한 필드는
userIdentity.arn,vpcEndpointId,eventName,sourceIPAddress - 네트워크 활동 이벤트는 CloudWatch Logs 전달 대상이 아님 → 지표 필터·알람으로 바로 잇는 경로는 없음
운영 주의
- 트레일에 고급 이벤트 선택기를 적용하면 기존 기본 이벤트 선택기가 덮어써짐 → 데이터 이벤트 설정을 먼저 옮겨 적어야 함
- 트레일은 기본 선택기와 고급 선택기를 같이 쓸 수 없음
- 서비스마다 선택기를 따로 만들어야 하니 대상이 늘면 선택기 목록 관리가 필요
- 기록 범위를 좁히지 않고 켜면 정상 트래픽까지 전부 과금 대상
errorCode유효값과eventSource목록은 계속 늘어나는 값이라 설정 전 현행 문서 확인 권장
결론
- 네트워크 활동 이벤트는 VPC 엔드포인트를 지난 호출을 소유자 계정에 남기는 유형으로, 조직 밖 자격 증명의 접근 시도를 보는 경로
- 엔드포인트 정책이 차단을 맡고 이 이벤트가 시도 기록을 맡는 구성이 실용적
userIdentity.arn필터로 신뢰 역할을 제외하면 거부 이벤트만 남겨 비용과 노이즈를 함께 줄일 수 있음- 같은 필드인데 관리 이벤트는 이벤트 데이터 스토어에서만, 네트워크 활동 이벤트는 트레일에서만 동작하므로 감사 저장소를 고르기 전에 확인할 것