이것저것

[SK shieldus Rookies 29기] 33일차 본문

SK Shieldus Rookies 29

[SK shieldus Rookies 29기] 33일차

atfield1988 2026. 1. 14. 10:42

9. AWS 보안 개요

9.1 클라우드 보안 3대 원칙

CIA 트라이어드 (Confidentiality, Integrity, Availability)

정보 보안의 3가지 핵심 원칙

  1. Confidentiality (기밀성)
  • 권한 있는 사람만 접근
  • 암호화, 접근 제어
  1. Integrity (무결성)
  • 데이터가 변조되지 않음
  • 해시, 디지털 서명
  1. Availability (가용성)
  • 필요할 때 항상 접근 가능
  • 중복화, 백업, 장애 조치

예시

온라인 뱅킹 서비스:

기밀성 (Confidentiality):

  • 계좌 정보를 나만 볼 수 있어야 함
  • HTTPS 암호화, 로그인 인증

무결성 (Integrity):

  • 송금 금액이 도중에 변경되면 안 됨
  • 거래 기록이 조작 불가능해야 함
  • 디지털 서명으로 검증

가용성 (Availability):

  • 언제든지 계좌 조회 가능해야 함
  • 장애 발생 시에도 빠르게 복구
  • 다중 데이터센터 배치

9.2 AWS 공동 책임 모델(Shared Responsibility Model)

모델 이해하기

서비스별 책임 구분

IaaS (EC2 예시)

AWS 책임:

  • 물리 보안
  • 네트워크 인프라
  • 하이퍼바이저 관리
  • 하드웨어 패치

사용자 책임:

  • OS 보안 (보안 그룹, 방화벽)
  • 애플리케이션 보안
  • 데이터 암호화
  • 접근 관리 (IAM)
  • 로그 모니터링

PaaS (RDS 예시)

AWS 책임:

  • 물리 보안
  • 네트워크 인프라
  • 데이터베이스 엔진 관리
  • OS 패치
  • 자동 백업

사용자 책임:

  • 데이터베이스 계정 관리
  • 암호화 키 관리
  • 접근 제어 (보안 그룹)
  • 데이터 마스킹
  • 감시 및 로깅

SaaS (예: AWS 관리 서비스)

AWS 책임:

  • 모든 보안 관리
  • 인프라
  • 소프트웨어
  • 데이터 보호

사용자 책임:

  • 계정 보안 (MFA 설정)
  • 접근 권한 관리
    └─ 데이터 분류

공동 책임 체크리스트

AWS가 관리하는 것:
□ 데이터센터 물리 보안
□ 네트워크 인프라 보안
□ 하드웨어 패치 및 관리
□ 기본 인프라 DDoS 방어
□ 서비스 가용성

사용자가 관리해야 할 것:
□ 강력한 암호 설정
□ MFA 활성화
□ IAM 권한 최소화
□ 보안 그룹 올바르게 설정
□ 데이터 암호화
□ 로그 수집 및 모니터링
□ 정기적 보안 감사
□ 인증서 갱신
□ 소프트웨어 업데이트
□ 재해 복구 계획


9.3AWS 보안 서비스 상세

AWS KMS (Key Management Service)

KMS 개념

KMS = 암호화 키 관리 서비스

특징:

  • 마스터 키(Master Key) 생성 및 관리
  • 키 자동 회전
  • 감사 로깅 (누가, 언제, 뭘 사용했는지)
  • CloudTrail과 통합
  • AWS 서비스 통합 (RDS, S3, EBS, Lambda 등)

KMS 암호화 방식

  1. CMK (Customer Master Key) 생성

    • AWS 또는 사용자가 관리하는 키
  2. Data Key 생성

    • CMK로 암호화된 데이터 키
    • 실제 데이터 암호화에 사용
  3. Envelope Encryption(봉투 암호화)
    )

KMS 사용 사례

import boto3
import base64

# KMS 클라이언트 초기화
kms_client = boto3.client('kms')

# 1. 데이터 암호화
response = kms_client.encrypt(
    KeyId='arn:aws:kms:us-east-1:123456789012:key/12345678-1234-1234-1234-123456789012',
    Plaintext=b'my_sensitive_data'
)

ciphertext = response['CiphertextBlob']
print(f"Encrypted: {base64.b64encode(ciphertext)}")

# 2. 데이터 복호화
decrypt_response = kms_client.decrypt(CiphertextBlob=ciphertext)
plaintext = decrypt_response['Plaintext']
print(f"Decrypted: {plaintext.decode()}")

AWS WAF (Web Application Firewall)

WAF 개념

WAF = 웹 애플리케이션 보안 방화벽

보호 대상:

  • ALB (Application Load Balancer)
  • CloudFront (CDN)
  • API Gateway
  • AppSync (GraphQL)

방어 기능:

  • SQL Injection 공격 탐지
  • XSS (Cross-Site Scripting) 차단
  • DDoS 공격 방어
  • Rate Limiting (요청 제한)
  • Geo Blocking (지역 차단)
  • Bot 관리

WAF Rule 예시

{
  "Name": "SQLiProtectionRule",
  "Priority": 1,
  "Statement": {
    "SqliMatchStatement": {
      "FieldToMatch": {
        "Body": {}
      },
      "TextTransformations": [
        {
          "Priority": 0,
          "Type": "URL_DECODE"
        }
      ]
    }
  },
  "Action": {
    "Block": {}
  },
  "VisibilityConfig": {
    "SampledRequestsEnabled": true,
    "CloudWatchMetricsEnabled": true,
    "MetricName": "SQLiProtectionRule"
  }
}

AWS Shield

Shield 개념

Shield = DDoS 공격 방어 서비스

2가지 레벨:

  1. AWS Shield Standard (무료)

    • 모든 AWS 고객에게 자동 제공
    • L3/L4 DDoS 공격 방어
    • 기본적인 네트워크 보호
  2. AWS Shield Advanced (유료)

    • L3/L4/L7 DDoS 공격 방어
    • 24/7 DDoS Response Team (DRT)
    • 비용 보호 (공격으로 인한 요금 보호)
    • WAF 통합

Amazon GuardDuty

GuardDuty 개념

GuardDuty = AI 기반 위협 탐지 서비스

데이터 분석:

  • CloudTrail Logs (API 호출)
  • VPC Flow Logs (네트워크 트래픽)
  • DNS Logs (DNS 쿼리)

위협 탐지:

  • 비정상적인 API 호출
  • 데이터 유출 시도
  • 암호화폐 채굴 활동 (CryptoCurrency)
  • 암호화폐 채굴기 설치 (Trojan)
  • 무단 접근 시도
  • 악성 IP 통신

GuardDuty Finding 예시

Finding 1: CryptoCurrencyEC2BitcoinTool
├─ Severity: HIGH
├─ Resource: EC2 Instance i-011e73af27562827b
├─ Description: Bitcoin 채굴기 탐지됨
└─ Action: EC2 즉시 격리, 스냅샷 생성, 이미지 분석

Finding 2: UnauthorizedAccess:EC2/RDPBrute
├─ Severity: HIGH
├─ Resource: EC2 Instance i-0191573dec3b66924
├─ Description: RDP 포트에서 무차별 공격 탐지
└─ Action: 보안 그룹 업데이트 (RDP 차단)

Finding 3: Trojan:EC2/DNSDataExfiltration
├─ Severity: CRITICAL
├─ Resource: EC2 Instance i-011e73af27562827b
├─ Description: DNS를 통한 데이터 유출 탐지
└─ Action: 네트워크 격리, 즉시 조사

Amazon Macie

Macie = 데이터 보안 및 개인정보보호 서비스

기능:

  • S3의 민감한 데이터 자동 탐지
  • PII (개인식별정보) 발견
  • PCI-DSS, HIPAA 규정 준수 확인
  • 데이터 분류 및 태그 지정
  • 비정상적인 S3 활동 탐지

예시:

  • S3 버킷에서 신용카드 번호 발견 → 자동 태그
  • 갑자기 대량의 S3 다운로드 → 경고
  • 공개 액세스 가능한 파일 발견 → 알림

AWS Secrets Manager

Secrets Manager = 민감한 정보 관리

관리 항목:

  • 데이터베이스 암호
  • API 키
  • OAuth 토큰
  • SSH 키
  • 기타 비밀 정보

기능:

  • 자동 순환 (자동 암호 변경)
  • 버전 관리
  • CloudTrail 감시
  • 암호화된 저장소
  • 권한 기반 접근 제어

Secrets Manager 사용 예시

import boto3
import json

secrets_client = boto3.client('secretsmanager')

# 1. 비밀 생성
response = secrets_client.create_secret(
    Name='prod/db/password',
    SecretString=json.dumps({
        'username': 'dbadmin',
        'password': 'MySecurePassword123!'
    }),
    Description='Production Database Password'
)

# 2. 비밀 조회
secret_response = secrets_client.get_secret_value(SecretId='prod/db/password')
secret = json.loads(secret_response['SecretString'])

db_password = secret['password']
print(f"Database Password Retrieved (비밀번호 조회됨)")

# 3. 자동 순환 설정
secrets_client.rotate_secret(
    SecretId='prod/db/password',
    RotationLambdaARN='arn:aws:lambda:...',
    RotationRules={'AutomaticallyAfterDays': 30}
)

9.4로그 및 감시 서비스

AWS CloudTrail

CloudTrail 개념

CloudTrail = AWS API 호출 기록 서비스

기록하는 것:

  • WHO: 누가 (IAM 사용자/역할)
  • WHAT: 뭘 (어떤 API 호출)
  • WHEN: 언제 (타임스탬프)
  • WHERE: 어디서 (소스 IP)
  • HOW: 성공/실패 여부

기록되는 이벤트:

  • EC2 인스턴스 시작/중지
  • S3 버킷 생성/삭제
  • IAM 사용자 추가/제거
  • RDS 스냅샷 생성
  • 모든 AWS API 호출

CloudTrail Log 예시

{
  "eventVersion": "1.05",
  "userIdentity": {
    "type": "IAMUser",
    "principalId": "AIDAI23HXC3A5JCJQFVHQ",
    "arn": "arn:aws:iam::123456789012:user/alice",
    "accountId": "123456789012",
    "userName": "alice"
  },
  "eventTime": "2025-12-22T10:15:30Z",
  "eventSource": "ec2.amazonaws.com",
  "eventName": "TerminateInstances",
  "awsRegion": "us-east-1",
  "sourceIPAddress": "203.0.113.45",
  "userAgent": "aws-cli/2.1.0",
  "requestParameters": {
    "instancesSet": {
      "items": [
        {
          "instanceId": "i-1234567890abcdef0"
        }
      ]
    }
  },
  "responseElements": null,
  "requestId": "12345678-1234-1234-1234-123456789012",
  "eventID": "1234567890",
  "resources": [
    {
      "ARN": "arn:aws:ec2:us-east-1:123456789012:instance/i-1234567890abcdef0",
      "accountId": "123456789012",
      "type": "AWS::EC2::Instance"
    }
  ]
}

CloudTrail 활성화

  1. S3 버킷 생성

    • CloudTrail 로그 저장소
  2. CloudTrail 트레일 생성

    • 이벤트 유형 선택 (Management, Data, Insights)
    • S3 버킷 지정
  3. CloudWatch Logs와 통합 (Optional)

    • 실시간 로그 분석
  4. SNS 알림 설정 (Optional)

    • 중요 이벤트 시 즉시 알림

설정 시간: 약 15분

VPC Flow Logs

VPC Flow Logs 개념

VPC Flow Logs = 네트워크 트래픽 기록

기록하는 것:

  • 소스 IP, 목적지 IP
  • 소스 포트, 목적지 포트
  • 프로토콜 (TCP, UDP, ICMP)
  • 송수신 바이트/패킷 수
  • ACCEPT/REJECT 여부

Log에 포함되지 않는 정보

  • Amazon DNS 서버 트래픽(개인 호스트 영역 쿼리 포함)
  • Amazon에서 제공하는 Windows 라이선스 활성화 트래픽
  • 인스턴스 메타 데이터 요청(169.254.169.254)
  • DHCP 요청과 응답
  • ARP 및 NTP(169.254.169.123

VPC Flow Logs 포맷

version account-id interface-id srcaddr dstaddr srcport 
dstport protocol packets bytes start end action log-status

예시:
2 123456789012 eni-1234567890abcdef0 10.0.1.5 10.0.2.3 
49753 443 6 10 1234 1640000000 1640000060 ACCEPT OK

VPC Flow Logs 분석

import boto3

logs_client = boto3.client('logs')

# CloudWatch Logs에서 거부된 연결 조회
query = """
fields @timestamp, srcip, dstip, dstport, action
| filter action = "REJECT"
| stats count() by dstport
"""

response = logs_client.start_query(
    logGroupName='/aws/vpc/flowlogs',
    startTime=int((datetime.now() - timedelta(hours=1)).timestamp()),
    endTime=int(datetime.now().timestamp()),
    queryString=query
)

print("Rejected connections by destination port:")
# 포트별 거부된 연결 수 출력

CloudWatch Logs

CloudWatch Logs 개념

CloudWatch Logs = 로그 수집 및 분석

로그 수집 대상:

  • EC2 애플리케이션 로그
  • Lambda 함수 로그
  • VPC Flow Logs
  • CloudTrail
  • Route 53 쿼리 로그
  • ALB 액세스 로그

기능:

  • 실시간 검색
  • 로그 필터링
  • 메트릭 생성
  • 알람 설정
  • 보관 정책 (자동 삭제)

CloudWatch Logs Insights 쿼리 예시

-- 1. 에러 로그 개수 세기
fields @timestamp, @message
| filter @message like /ERROR/
| stats count() as error_count

-- 2. 상위 10개 에러 메시지
fields @message
| filter @message like /ERROR/
| stats count() as count by @message
| sort count desc
| limit 10

-- 3. API 응답 시간 분석
fields @duration
| filter ispresent(@duration)
| stats avg(@duration), max(@duration), pct(@duration, 99)

-- 4. 시간대별 요청 수
fields @timestamp
| stats count() by bin(5m)

9.5규정 준수 및 감시

AWS Config

Config 개념

AWS Config = 리소스 규정 준수 모니터링

기능:

  • 리소스 인벤토리 기록
  • 설정 변경 추적
  • 규정 준수 규칙 정의
  • 비준수 리소스 탐지
  • 자동 재구성 (자동 수정)

Config Rule 예시

  1. encrypted-volumes
    • EBS 볼륨이 암호화되었는가?
    • 비준수: 암호화되지 않은 볼륨
  1. cloudtrail-enabled
    • CloudTrail이 활성화되었는가?
    • 비준수: CloudTrail 비활성화
  1. root-account-mfa-enabled
    • Root 계정에 MFA가 설정되었는가?
    • 비준수: MFA 미설정
  1. iam-password-policy
    • IAM 암호 정책이 강력한가?
    • 비준수: 약한 정책 (예: 8자 이하)
  1. s3-bucket-public-read-prohibited
    • S3 버킷이 공개 읽기 가능한가?
    • 비준수: 공개 액세스 허용

AWS Systems Manager

Systems Manager 기능

Systems Manager = EC2 및 온프레미스 서버 관리

주요 기능:

  • Session Manager (SSH/RDP 없이 접속)
  • Patch Manager (OS 패치 자동화)
  • State Manager (원하는 상태 유지)
  • Inventory (리소스 인벤토리)
  • Run Command (원격 명령어 실행)

Session Manager 예시

기존 방식 (보안 취약):
ec2-user@44.55.66.77$ ssh -i mykey.pem ...

  • SSH 키 필요
  • 공개 IP 필요
  • 키 분실 시 위험

Systems Manager 방식 (보안 강화):
$ aws ssm start-session --target i-1234567890abcdef0

  • SSH 키 불필요
  • 공개 IP 불필요
  • IAM 권한으로 제어
  • 모든 세션 로깅 (CloudTrail)

9.6 보안 베스트 프랙티스

IAM 보안 베스트 프랙티스

해야 할 것

  • Root 계정 사용 최소화
  • Root 계정에 MFA 설정
  • 강력한 암호 정책
  • 정기적 접근 검토
  • 불필요한 사용자 삭제
  • IAM 역할 사용 (임시 자격증명)

하지 말아야 할 것

  • Root 계정 접근 키 생성
  • 하드코딩된 자격증명
  • 와일드카드 권한
    (와일드카드는 조직의 IAM ID(사용자, 그룹, 역할)에 의도치 않은 권한을 부여)
  • 과도한 권한 부여
  • 비활성 사용자 방치
  • 암호 공유

네트워크 보안 베스트 프랙티스

VPC 설계:

  • Public Subnet (웹 서버, ALB)
  • Private Subnet (애플리케이션, 데이터베이스)
  • NAT Gateway (아웃바운드 트래픽)
  • VPC Endpoint (AWS 서비스 접근)

보안 그룹:

  • Inbound: 필요한 포트만 (80, 443, 22)
  • Outbound: 기본 모두 허용
  • 정기적 감사

NACL:

  • Stateless 규칙
  • 명시적 거부
  • 프로토콜별 관리

데이터 보안 베스트 프랙티스

저장 데이터 보호:

  • S3: 서버 측 암호화 활성화 (SSE-S3 또는 SSE-KMS)
  • RDS: 스토리지 암호화 활성화
  • EBS: 볼륨 암호화 활성화
  • Secrets Manager: 민감 정보 암호화

전송 중 데이터 보호:

  • HTTPS/TLS 사용 (포트 443)
  • VPN 또는 Direct Connect 사용
  • API 호출 시 HTTPS 강제
  • 자체 서명 인증서 사용 금지

데이터 분류:

  • Public: 공개 정보
  • Internal: 내부 정보
  • Confidential: 민감 정보
  • Restricted: 극도로 민감한 정보

접근 제어:

  • 데이터 소유자 정의
  • 최소 권한 부여
  • 정기적 검토
  • 감사 로깅

AWS Best Practice Official Site 참조


보안 감시 대시보드 구성

CloudWatch Dashboard 구성요소:

  1. 보안 메트릭

    • Failed API Calls (실패한 API 호출)
    • UnauthorizedAPICall (미인가 API 호출)
    • ConsoleSigninFailures (콘솔 로그인 실패)
    • RootAccountUsage (Root 계정 사용)
  2. GuardDuty 메트릭

    • High Severity Findings (심각한 위협)
    • Medium Severity Findings (중간 위협)
    • Finding Count Trend (위협 추이)
  3. Config 메트릭

    • Non-Compliant Resources (비준수 리소스)
    • Compliant Resources (준수 리소스)
    • Compliance Trend (준수 추이)
  4. VPC Flow Logs

    • Rejected Connections (거부된 연결)
    • Top Rejected Ports (거부된 포트)
    • Suspicious IPs (의심 IP)

알람 설정:

  • Root 계정 사용 → 즉시 알림
  • MFA 없이 로그인 → 즉시 알림
  • 고위험 GuardDuty Finding → 15분 알림
  • 비준수 리소스 증가 → 1시간 알림
  • 거부된 연결 급증 → 5분 알림

드디어 클라우드 보안 기술이 끝났다!
막판에 서비스들이 쏟아지니까 정신을 못 차리겠다.