본문으로 건너뛰기

AWS CloudTrail 연동

이 가이드는 AWS CloudTrail을 KYRA MDR에 연결하여 AWS 환경을 실시간으로 모니터링하는 방법을 설명합니다. KYRA MDR은 CloudTrail 이벤트를 분석하여 비인가 접근, 잘못된 설정 및 의심스러운 API 활동을 탐지합니다.


사전 준비

  • 관리자 접근 권한이 있는 활성 AWS 계정 (또는 역할 및 S3 버킷 알림을 생성할 수 있는 IAM 권한)
  • AWS 계정에서 CloudTrail 활성화 (관리 이벤트에 대해 기본적으로 활성화)
  • 활성 구독이 있는 KYRA MDR 계정

아키텍처 개요

AWS CloudTrail → S3 Bucket → SNS Topic → KYRA Cloud Sensor → KYRA MDR 플랫폼
(S3 폴링)

KYRA MDR은 교차 계정 IAM 역할을 사용하여 S3 버킷에서 CloudTrail 로그를 읽습니다. KYRA가 읽기 전까지 데이터는 사용자의 통제 하에 있습니다.


1단계: KYRA용 IAM 역할 생성

KYRA MDR이 CloudTrail 로그를 읽을 수 있도록 교차 계정 IAM 역할을 생성합니다.

AWS 콘솔 사용

  1. IAM > Roles > Create Role로 이동
  2. Another AWS account 선택
  3. KYRA MDR의 AWS Account ID 입력: 123456789012 (콘솔 > 설정 > 클라우드 연동에서 제공)
  4. Require external ID를 체크하고 콘솔에 표시된 External ID를 입력
  5. Next를 클릭하고 아래 정책을 연결

IAM 정책

KYRAMDRCloudTrailReadOnly라는 이름의 커스텀 정책을 생성합니다:

{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowCloudTrailBucketAccess",
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::your-cloudtrail-bucket",
"arn:aws:s3:::your-cloudtrail-bucket/AWSLogs/*"
]
},
{
"Sid": "AllowSNSSubscription",
"Effect": "Allow",
"Action": [
"sns:Subscribe",
"sns:ConfirmSubscription"
],
"Resource": "arn:aws:sns:*:*:your-cloudtrail-topic"
},
{
"Sid": "AllowCloudTrailDescribe",
"Effect": "Allow",
"Action": [
"cloudtrail:DescribeTrails",
"cloudtrail:GetTrailStatus",
"cloudtrail:LookupEvents"
],
"Resource": "*"
}
]
}

신뢰 정책

역할의 신뢰 정책은 다음과 같아야 합니다:

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::123456789012:role/KYRACloudSensor"
},
"Action": "sts:AssumeRole",
"Condition": {
"StringEquals": {
"sts:ExternalId": "your-external-id-from-console"
}
}
}
]
}

AWS CLI 사용

Terminal window
# 정책 생성
aws iam create-policy \
--policy-name KYRAMDRCloudTrailReadOnly \
--policy-document file://kyra-policy.json
# 신뢰 정책으로 역할 생성
aws iam create-role \
--role-name KYRAMDRRole \
--assume-role-policy-document file://kyra-trust-policy.json
# 정책 연결
aws iam attach-role-policy \
--role-name KYRAMDRRole \
--policy-arn arn:aws:iam::YOUR_ACCOUNT_ID:policy/KYRAMDRCloudTrailReadOnly

2단계: CloudTrail 설정

멀티 리전 CloudTrail 트레일이 아직 없다면 생성합니다:

트레일 생성 (필요 시)

Terminal window
aws cloudtrail create-trail \
--name kyra-mdr-trail \
--s3-bucket-name your-cloudtrail-bucket \
--is-multi-region-trail \
--enable-log-file-validation \
--sns-topic-name your-cloudtrail-topic
aws cloudtrail start-logging --name kyra-mdr-trail

데이터 이벤트 활성화 (선택사항이지만 권장)

데이터 이벤트는 S3 객체 수준 및 Lambda 호출 활동에 대한 가시성을 제공합니다:

Terminal window
aws cloudtrail put-event-selectors \
--trail-name kyra-mdr-trail \
--event-selectors '[
{
"ReadWriteType": "All",
"IncludeManagementEvents": true,
"DataResources": [
{
"Type": "AWS::S3::Object",
"Values": ["arn:aws:s3"]
},
{
"Type": "AWS::Lambda::Function",
"Values": ["arn:aws:lambda"]
}
]
}
]'

참고: 데이터 이벤트는 대량의 볼륨을 생성하고 추가 CloudTrail 비용이 발생할 수 있습니다. 관리 이벤트만으로 시작하고 필요에 따라 데이터 이벤트를 추가하세요.


3단계: KYRA 콘솔에서 연결

  1. KYRA MDR 콘솔을 열기
  2. 설정 > 연동 > 연동 추가로 이동
  3. AWS CloudTrail 선택
  4. 입력:
    • AWS Account ID: 12자리 AWS 계정 ID
    • IAM Role ARN: arn:aws:iam::YOUR_ACCOUNT_ID:role/KYRAMDRRole
    • S3 Bucket Name: CloudTrail S3 버킷
    • S3 Region: 버킷의 리전 (예: 서울의 경우 ap-northeast-2)
    • SNS Topic ARN (선택사항): 실시간 알림용
  5. 연결 테스트 클릭 — KYRA가 역할을 수임하고 버킷을 나열 시도
  6. 저장 클릭

4단계: 이벤트 확인

연동 상태 확인

콘솔에서 설정 > 연동으로 이동합니다. AWS CloudTrail 연동에 다음이 표시되어야 합니다:

  • 상태: 연결됨
  • 마지막 동기화: 최근 5분 이내
  • 처리된 이벤트: 증가하는 수치

AWS 이벤트 검색

  1. 로그 검색으로 이동
  2. source_type:aws-cloudtrail로 필터링
  3. 다음과 같은 이벤트가 표시되어야 합니다:
    • ConsoleLogin — AWS 콘솔 로그인
    • AssumeRole — 역할 수임 이벤트
    • RunInstances — EC2 인스턴스 시작
    • CreateBucket — S3 버킷 생성

테스트 이벤트 생성

Terminal window
# 테스트 보안 그룹 생성 및 삭제 (CloudTrail 이벤트 생성)
SG_ID=$(aws ec2 create-security-group --group-name kyra-test --description "KYRA test" --output text --query 'GroupId')
aws ec2 delete-security-group --group-id $SG_ID

5-15분 내(CloudTrail 전달 지연)에 KYRA MDR에서 CreateSecurityGroupDeleteSecurityGroup 이벤트가 표시되어야 합니다.


필요 권한 요약

권한목적
s3:GetObjectS3에서 CloudTrail 로그 파일 읽기
s3:ListBucket수집을 위한 새 로그 파일 나열
sns:Subscribe실시간 CloudTrail 알림 구독
cloudtrail:DescribeTrails트레일 설정 확인
cloudtrail:GetTrailStatus트레일 상태 확인
cloudtrail:LookupEvents초기 동기화를 위한 최근 이벤트 조회

KYRA MDR은 읽기 전용 접근만 사용합니다. AWS 리소스나 CloudTrail 설정을 수정하지 않습니다.


탐지 규칙

KYRA MDR에는 AWS CloudTrail용 내장 탐지 규칙이 포함되어 있습니다:

탐지이벤트 이름MITRE ATT&CK설명
Root 계정 사용ConsoleLogin (root)T1078.004Root 계정 로그인 탐지
IAM 사용자 생성CreateUserT1136.003새 IAM 사용자 생성
MFA 비활성화DeactivateMFADeviceT1556계정에서 MFA 제거
보안 그룹 개방AuthorizeSecurityGroupIngressT1562.0070.0.0.0/0 인그레스 규칙 추가
CloudTrail 비활성화StopLoggingT1562.008트레일 로깅 중지
S3 버킷 공개PutBucketPolicyT1530버킷 정책이 공개 접근 허용
비정상 리전모든 이벤트T1535비정상적인 AWS 리전에서의 API 호출
접근 키 유출비정상 IP에서의 GetCallerIdentityT1528유출 가능한 자격증명

다중 계정 설정

여러 계정이 있는 AWS Organizations의 경우, 조직 트레일로 중앙화된 CloudTrail을 사용할 수 있습니다:

  1. 관리 계정에서 Organization Trail 활성화
  2. 모든 구성원 계정의 이벤트가 단일 S3 버킷으로 전달
  3. 관리 계정에서만 KYRA IAM 역할 생성
  4. KYRA MDR이 모든 계정의 이벤트를 수집
Terminal window
aws cloudtrail create-trail \
--name kyra-org-trail \
--s3-bucket-name your-org-cloudtrail-bucket \
--is-organization-trail \
--is-multi-region-trail

문제 해결

연결 테스트 실패

  1. Role ARN 확인: 계정 ID와 역할 이름을 다시 확인
  2. External ID 일치: 신뢰 정책의 External ID가 콘솔과 일치해야 함
  3. 신뢰 정책: principal이 사용자의 AWS 계정이 아닌 KYRA의 AWS 계정이어야 함
  4. S3 버킷 존재: 버킷 이름과 리전 확인

이벤트가 표시되지 않는 경우

  1. CloudTrail 활성화? aws cloudtrail get-trail-status --name your-trail 실행 — IsLogging: true 확인
  2. S3 권한? 올바른 버킷과 경로에 대한 s3:GetObjects3:ListBucket 확인
  3. 전달 지연: CloudTrail은 약 5-15분마다 S3에 로그를 전달합니다 — 실시간이 아닙니다
  4. 리전 불일치? 콘솔의 S3 리전이 실제 버킷 리전과 일치하는지 확인

높은 비용

CloudTrail 관리 이벤트는 첫 번째 트레일에 대해 무료입니다. 데이터 이벤트는 100,000 이벤트당 비용이 발생합니다. 비용을 줄이려면:

  • 관리 이벤트만으로 시작 (기본값)
  • 특정 S3 버킷 또는 Lambda 함수를 필터링하는 이벤트 셀렉터 사용
  • 쓰기 이벤트만으로 충분하면 읽기 전용 데이터 이벤트 제외