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 콘솔 사용
- IAM > Roles > Create Role로 이동
- Another AWS account 선택
- KYRA MDR의 AWS Account ID 입력:
123456789012(콘솔 > 설정 > 클라우드 연동에서 제공) - Require external ID를 체크하고 콘솔에 표시된 External ID를 입력
- 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 사용
# 정책 생성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/KYRAMDRCloudTrailReadOnly2단계: CloudTrail 설정
멀티 리전 CloudTrail 트레일이 아직 없다면 생성합니다:
트레일 생성 (필요 시)
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 호출 활동에 대한 가시성을 제공합니다:
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 콘솔에서 연결
- KYRA MDR 콘솔을 열기
- 설정 > 연동 > 연동 추가로 이동
- AWS CloudTrail 선택
- 입력:
- 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 (선택사항): 실시간 알림용
- 연결 테스트 클릭 — KYRA가 역할을 수임하고 버킷을 나열 시도
- 저장 클릭
4단계: 이벤트 확인
연동 상태 확인
콘솔에서 설정 > 연동으로 이동합니다. AWS CloudTrail 연동에 다음이 표시되어야 합니다:
- 상태: 연결됨
- 마지막 동기화: 최근 5분 이내
- 처리된 이벤트: 증가하는 수치
AWS 이벤트 검색
- 로그 검색으로 이동
source_type:aws-cloudtrail로 필터링- 다음과 같은 이벤트가 표시되어야 합니다:
ConsoleLogin— AWS 콘솔 로그인AssumeRole— 역할 수임 이벤트RunInstances— EC2 인스턴스 시작CreateBucket— S3 버킷 생성
테스트 이벤트 생성
# 테스트 보안 그룹 생성 및 삭제 (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_ID5-15분 내(CloudTrail 전달 지연)에 KYRA MDR에서 CreateSecurityGroup 및 DeleteSecurityGroup 이벤트가 표시되어야 합니다.
필요 권한 요약
| 권한 | 목적 |
|---|---|
s3:GetObject | S3에서 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.004 | Root 계정 로그인 탐지 |
| IAM 사용자 생성 | CreateUser | T1136.003 | 새 IAM 사용자 생성 |
| MFA 비활성화 | DeactivateMFADevice | T1556 | 계정에서 MFA 제거 |
| 보안 그룹 개방 | AuthorizeSecurityGroupIngress | T1562.007 | 0.0.0.0/0 인그레스 규칙 추가 |
| CloudTrail 비활성화 | StopLogging | T1562.008 | 트레일 로깅 중지 |
| S3 버킷 공개 | PutBucketPolicy | T1530 | 버킷 정책이 공개 접근 허용 |
| 비정상 리전 | 모든 이벤트 | T1535 | 비정상적인 AWS 리전에서의 API 호출 |
| 접근 키 유출 | 비정상 IP에서의 GetCallerIdentity | T1528 | 유출 가능한 자격증명 |
다중 계정 설정
여러 계정이 있는 AWS Organizations의 경우, 조직 트레일로 중앙화된 CloudTrail을 사용할 수 있습니다:
- 관리 계정에서 Organization Trail 활성화
- 모든 구성원 계정의 이벤트가 단일 S3 버킷으로 전달
- 관리 계정에서만 KYRA IAM 역할 생성
- KYRA MDR이 모든 계정의 이벤트를 수집
aws cloudtrail create-trail \ --name kyra-org-trail \ --s3-bucket-name your-org-cloudtrail-bucket \ --is-organization-trail \ --is-multi-region-trail문제 해결
연결 테스트 실패
- Role ARN 확인: 계정 ID와 역할 이름을 다시 확인
- External ID 일치: 신뢰 정책의 External ID가 콘솔과 일치해야 함
- 신뢰 정책: principal이 사용자의 AWS 계정이 아닌 KYRA의 AWS 계정이어야 함
- S3 버킷 존재: 버킷 이름과 리전 확인
이벤트가 표시되지 않는 경우
- CloudTrail 활성화?
aws cloudtrail get-trail-status --name your-trail실행 —IsLogging: true확인 - S3 권한? 올바른 버킷과 경로에 대한
s3:GetObject및s3:ListBucket확인 - 전달 지연: CloudTrail은 약 5-15분마다 S3에 로그를 전달합니다 — 실시간이 아닙니다
- 리전 불일치? 콘솔의 S3 리전이 실제 버킷 리전과 일치하는지 확인
높은 비용
CloudTrail 관리 이벤트는 첫 번째 트레일에 대해 무료입니다. 데이터 이벤트는 100,000 이벤트당 비용이 발생합니다. 비용을 줄이려면:
- 관리 이벤트만으로 시작 (기본값)
- 특정 S3 버킷 또는 Lambda 함수를 필터링하는 이벤트 셀렉터 사용
- 쓰기 이벤트만으로 충분하면 읽기 전용 데이터 이벤트 제외