| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
- 기술 특강 및 OT
- 시스템-네트워크 보안 기술
- 쉴더스
- Kali#Linux#Brute#Force#Attack#Test#DVWA#Hacking#Low#무차별#대입#공격#해킹
- 클라우드 보안 기술
- 클라우드 보안 기반
- DVWA#INSTALL#github#security#kali#linux
- sk 쉴더스 루키즈
- 클라우드기반 보안 시스템 구축/운영 실무
- Kali#Linux#KALI#LINUX#INSTALL#github#설치
- 모듈프로젝트
- 인프라 활용을 위한 파이썬
- rocky linux#siem#project#threat detection#soc#onpremise#ids#python#csv#pipeline#kali linux#DVWA#security monitoring
- 보고서
- DVWA#Brute#Force#Attack#Test#Kali#Linux#Medium#Level#sleep
- 클라우드 기반
- AI #취업
- 애플리케이션 보안 기술
- CERT
- 개인정보보호
- Case Study
- kisa #보안관제
- 모의침투
- 29기
- VMWARE#INSTALL#설치
- Foxyproxy#install#setting#firefox
- #루키즈
- 모듈 프로젝트
- 루키즈
- sk shieldus
- Today
- Total
이것저것
[SK shieldus Rookies 29기] 33일차 본문
9. AWS 보안 개요
9.1 클라우드 보안 3대 원칙
CIA 트라이어드 (Confidentiality, Integrity, Availability)
정보 보안의 3가지 핵심 원칙
- Confidentiality (기밀성)
- 권한 있는 사람만 접근
- 암호화, 접근 제어
- Integrity (무결성)
- 데이터가 변조되지 않음
- 해시, 디지털 서명
- 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 암호화 방식
CMK (Customer Master Key) 생성
- AWS 또는 사용자가 관리하는 키
Data Key 생성
- CMK로 암호화된 데이터 키
- 실제 데이터 암호화에 사용
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가지 레벨:
AWS Shield Standard (무료)
- 모든 AWS 고객에게 자동 제공
- L3/L4 DDoS 공격 방어
- 기본적인 네트워크 보호
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 활성화
S3 버킷 생성
- CloudTrail 로그 저장소
CloudTrail 트레일 생성
- 이벤트 유형 선택 (Management, Data, Insights)
- S3 버킷 지정
CloudWatch Logs와 통합 (Optional)
- 실시간 로그 분석
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 OKVPC 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 예시
- encrypted-volumes
- EBS 볼륨이 암호화되었는가?
- 비준수: 암호화되지 않은 볼륨

- cloudtrail-enabled
- CloudTrail이 활성화되었는가?
- 비준수: CloudTrail 비활성화

- root-account-mfa-enabled
- Root 계정에 MFA가 설정되었는가?
- 비준수: MFA 미설정

- iam-password-policy
- IAM 암호 정책이 강력한가?
- 비준수: 약한 정책 (예: 8자 이하)

- 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 구성요소:
보안 메트릭
- Failed API Calls (실패한 API 호출)
- UnauthorizedAPICall (미인가 API 호출)
- ConsoleSigninFailures (콘솔 로그인 실패)
- RootAccountUsage (Root 계정 사용)
GuardDuty 메트릭
- High Severity Findings (심각한 위협)
- Medium Severity Findings (중간 위협)
- Finding Count Trend (위협 추이)
Config 메트릭
- Non-Compliant Resources (비준수 리소스)
- Compliant Resources (준수 리소스)
- Compliance Trend (준수 추이)
VPC Flow Logs
- Rejected Connections (거부된 연결)
- Top Rejected Ports (거부된 포트)
- Suspicious IPs (의심 IP)
알람 설정:
- Root 계정 사용 → 즉시 알림
- MFA 없이 로그인 → 즉시 알림
- 고위험 GuardDuty Finding → 15분 알림
- 비준수 리소스 증가 → 1시간 알림
- 거부된 연결 급증 → 5분 알림
드디어 클라우드 보안 기술이 끝났다!
막판에 서비스들이 쏟아지니까 정신을 못 차리겠다.
'SK Shieldus Rookies 29' 카테고리의 다른 글
| [SK shieldus Rookies 29기] 35일차 (0) | 2026.01.14 |
|---|---|
| [SK shieldus Rookies 29기] 34일차 (0) | 2026.01.14 |
| [SK shieldus Rookies 29기] 32일차 (0) | 2026.01.14 |
| [SK shieldus Rookies 29기] 31일차 (0) | 2026.01.14 |
| [SK shieldus Rookies 29기] 30일차 (1) | 2026.01.14 |