โ Real-time Security Inspection
ISMS-P 2.11.5๋ ๋ณด์์ฌ๊ณ ๋ฐ์ ์ ์ ์ํ ๋์๊ณผ ๋ณต๊ตฌ๋ฅผ ์๊ตฌํฉ๋๋ค. ํด๋ผ์ฐ๋ ํ๊ฒฝ์์๋ AWS Backup, Vault Lock, Step Functions๋ฅผ ํตํด ์๋ ๊ฒฉ๋ฆฌ, ์ฆ๊ฑฐ๋ณด์กด, ๋ณต๊ตฌ ์ฒด๊ณ๋ฅผ ๊ตฌํํด์ผ ํฉ๋๋ค.
ISMS-P 2.11.5 ์ฌ๊ณ ๋์ ๋ฐ ๋ณต๊ตฌ ์๊ตฌ์ฌํญ
"๋ณด์์ฌ๊ณ ๋ฐ์ ์ ์ ์ํ๊ฒ ๋์ํ๊ณ ๋ณต๊ตฌํ ์ ์๋๋ก ๋์ ๋ฐ ๋ณต๊ตฌ ์ ์ฐจ๋ฅผ ์๋ฆฝํ์ฌ ์ดํํ๋ฉฐ, ์ฌ๊ณ ์กฐ์ฌ ๊ฒฐ๊ณผ์ ๋ฐ๋ผ ์ฌ๋ฐ๋ฐฉ์ง ๋์ฑ ์ ๋ง๋ จํ์ฌ์ผ ํ๋ค."
๋ณต๊ตฌ ์ฒด๊ณ ๋ฏธํก ๊ด๋ จ ๋ณด์ ์ฌ๊ณ
DDoS ๊ณต๊ฒฉ ํ AWS ์ฝ์ ์นจํฌ. ๊ณต๊ฒฉ์๊ฐ ๋ชจ๋ ๋ฐ์ดํฐ ๋ฐ ๋ฐฑ์ ์ ๋์ผ ๊ณ์ ๋ด์์ ์ญ์ . ๋ฐฑ์ ์ด ๊ฐ์ ๊ณ์ ์ ์ ์ฅ๋์ด ๋ณต๊ตฌ ์์ ๋ถ๊ฐ. ์๋น์ค ํ์ .
๊ตํ: Cross-Account ๋ฐฑ์ + Vault Lock์ผ๋ก ์ญ์ ๋ฐฉ์ง ํ์
์ด์์ ์ค์๋ก ์ด์ DB ์ญ์ . 5๊ฐ ๋ฐฑ์ ๋ฐฉ๋ฒ ์ค 4๊ฐ๊ฐ ์๋ํ์ง ์์. ๋ณต๊ตฌ ํ ์คํธ๋ฅผ ์ํํ์ง ์์ 6์๊ฐ๋ถ ๋ฐ์ดํฐ ์๊ตฌ ์์ค.
๊ตํ: ์ ๊ธฐ์ ์ธ ๋ฐฑ์ ๊ฒ์ฆ + ๋ณต๊ตฌ ํ๋ จ ํ์
AS-IS ์ทจ์ฝ ์ค์ ๊ณผ TO-BE ๊ถ์ฅ ์ค์
# ์ทจ์ฝ: ๋ณต๊ตฌ ์ฒด๊ณ ๋ฏธ๊ตฌ์ถ
# AWS Backup ๋ฏธ์กด์ฌ
# โ ์์คํ
์ฅ์ ์ ๋ณต๊ตฌ ๋ถ๊ฐ
# Vault Lock ๋ฏธ์ค์
# โ ๊ณต๊ฒฉ์๊ฐ ๋ฐฑ์
์ญ์ ๊ฐ๋ฅ
# ๊ฒฉ๋ฆฌ์ฉ Security Group ์์
# โ ์นจํด ์์คํ
์๋ ๋์
# ์ฆ๊ฑฐ๋ณด์กด ์ฒด๊ณ ์์
# โ ํฌ๋ ์ ์ฆ๊ฑฐ ํ๋ณด ๋ถ๊ฐ
# ์์ : ์์ ํ ๋ณต๊ตฌ ์ฒด๊ณ
# AWS Backup Plan ๊ตฌ์ฑ
# โ ์๋ ๋ฐฑ์
+ Cross-Region ๋ณต์
# Vault Lock ํ์ฑํ
# โ ๋ฐฑ์
์ญ์ /๋ณ๊ฒฝ ๋ถ๊ฐ
# Quarantine SG ๊ตฌ์ฑ
# โ ์นจํด ์์คํ
์๋ ๊ฒฉ๋ฆฌ
# S3 Object Lock ์ฆ๊ฑฐ๋ณด๊ด
# โ ํฌ๋ ์ ์ฆ๊ฑฐ ๋ฌด๊ฒฐ์ฑ ๋ณด์ฅ
# ๊ณต๊ฒฉ์๊ฐ AWS ์ฝ์ ์ ๊ทผ ํ ๋ฐ์ดํฐ ์ญ์ ๊ณต๊ฒฉ
# ๋ฐฑ์
์ด ๊ฐ์ ๊ณ์ ์ ์์ด ๋ชจ๋ ๋ณต๊ตฌ ์๋จ ํ๊ดด
# โ Code Spaces ์ฌ๋ก: ์์ ์๋น์ค ํ์
# ์ด์ DB ์ญ์ ํ ๋ฐฑ์
๋ณต๊ตฌ ์๋
# 5๊ฐ ์ค 4๊ฐ ๋ฐฑ์
๋ฐฉ๋ฒ์ด ์๋ํ์ง ์์
# โ GitLab ์ฌ๋ก: 6์๊ฐ๋ถ ๋ฐ์ดํฐ ์๊ตฌ ์์ค
IaC ์ ์ ๋ถ์ Decision Table
| ํ๋จ ์กฐ๊ฑด | ์กฐ๊ฑด ๊ฐ | ๊ฒฐ๊ณผ |
|---|---|---|
| aws_backup_plan ๋ฐฑ์ ๊ณํ ์กด์ฌ ์ฌ๋ถ |
๋ฏธ์กด์ฌ |
Critical |
์กด์ฌํจ |
Pass | |
| vault_lock_configuration ๋ฐฑ์ ์ญ์ ๋ฐฉ์ง ์ค์ |
๋ฏธ์ค์ |
High |
ํ์ฑํ |
Pass | |
| copy_action.destination Cross-Account ๋ณต์ ์ฌ๋ถ |
๋์ผ ๊ณ์ ๋ง |
High |
Cross-Account ์ค์ |
Pass | |
| security_group "quarantine" ๊ฒฉ๋ฆฌ์ฉ SG ์กด์ฌ ์ฌ๋ถ |
๋ฏธ์กด์ฌ |
High |
์กด์ฌํจ |
Pass | |
| object_lock_enabled ์ฆ๊ฑฐ๋ณด๊ด WORM ์ค์ |
๋ฏธ์ค์ |
High |
ํ์ฑํ |
Pass |
Runtime ๋ชจ๋ํฐ๋ง Decision Table
| ํ๋จ ์กฐ๊ฑด | ์กฐ๊ฑด ๊ฐ | ๊ฒฐ๊ณผ |
|---|---|---|
| GuardDuty Finding ์นจํด ํ์ง ์ฌ๊ฐ๋ |
Critical/High |
์๋ ๊ฒฉ๋ฆฌ + ์ฆ๊ฑฐ๋ณด์กด + SNS ์๋ฆผ |
Medium/Low |
์๋ฆผ + ๋ชจ๋ํฐ๋ง ๊ฐํ | |
| DeleteRecoveryPoint API ๋ฐฑ์ ์ญ์ ์๋ |
Vault Lock ์ฐจ๋จ |
CloudTrail ๊ธฐ๋ก + ์ฆ์ ์๋ฆผ |
์ ์ ์ญ์ (๋ณด๊ด๊ธฐ๊ฐ ๊ฒฝ๊ณผ) |
์ ์ ์ฒ๋ฆฌ | |
| Restore Job Status ๋ณต๊ตฌ ์์ ์ํ |
Failed |
์๋ ๊ฐ์ ์์ฒญ + ๋์ฒด ๋ณต๊ตฌ ์๋ด |
Success |
ํฌ์ค์ฒดํฌ + ์ฌํ ๋ถ์ ๋ฆฌํฌํธ | |
| Step Functions Execution ๋์ ์ํฌํ๋ก์ฐ ์ํ |
FAILED/TIMED_OUT |
์๋ ๊ฐ์ + ์ฅ์ ์์ธ ๋ถ์ |
SUCCEEDED |
์๋ฃ ๋ฆฌํฌํธ + ๊ฐ์ ๊ถ๊ณ |
Terraform ๊ธฐ๋ฐ ๋ณด์ ์ค์ ๊ฐ์ด๋
# 1. AWS Backup Plan + Cross-Region ๋ณต์
resource "aws_backup_plan" "critical" {
name = "critical-systems-backup"
rule {
rule_name = "daily-backup"
target_vault_name = aws_backup_vault.main.name
schedule = "cron(0 5 ? * * *)" # ๋งค์ผ 05:00 UTC
lifecycle {
delete_after = 90 # 90์ผ ๋ณด๊ด
}
# Cross-Region ๋ณต์ (DR)
copy_action {
destination_vault_arn = aws_backup_vault.dr.arn
lifecycle {
delete_after = 90
}
}
}
}
# 2. Vault Lock - ๋ฐฑ์
์ญ์ ๋ฐฉ์ง
resource "aws_backup_vault_lock_configuration" "main" {
backup_vault_name = aws_backup_vault.main.name
min_retention_days = 7 # ์ต์ 7์ผ ๋ณด๊ด ํ์
max_retention_days = 365 # ์ต๋ 365์ผ
changeable_for_days = 3 # 3์ผ ํ ๋ณ๊ฒฝ ๋ถ๊ฐ
}
# 3. Quarantine Security Group - ์๋ ๊ฒฉ๋ฆฌ์ฉ
resource "aws_security_group" "quarantine" {
name = "quarantine-sg"
description = "Isolation SG - No inbound/outbound traffic"
vpc_id = var.vpc_id
# Ingress/Egress ๊ท์น ์์ = ๋ชจ๋ ํธ๋ํฝ ์ฐจ๋จ
tags = {
Name = "quarantine-sg"
Purpose = "incident-isolation"
}
}
# 4. S3 ์ฆ๊ฑฐ๋ณด๊ด ๋ฒํท - Object Lock (WORM)
resource "aws_s3_bucket" "forensic" {
bucket = "forensic-evidence-${data.aws_caller_identity.current.account_id}"
object_lock_enabled = true
}
resource "aws_s3_bucket_object_lock_configuration" "forensic" {
bucket = aws_s3_bucket.forensic.id
rule {
default_retention {
mode = "COMPLIANCE" # ์ญ์ /๋ณ๊ฒฝ ์์ ์ฐจ๋จ
years = 7 # 7๋
๋ณด๊ด (๋ฒ์ ์๊ฑด)
}
}
}
# 5. Step Functions ์ฌ๊ณ ๋์ ์ํฌํ๋ก์ฐ
resource "aws_sfn_state_machine" "incident_response" {
name = "incident-response-and-recovery"
role_arn = aws_iam_role.step_functions.arn
definition = jsonencode({
StartAt = "IsolateResource"
States = {
IsolateResource = {
Type = "Task"
Resource = aws_lambda_function.isolate.arn
Next = "CollectEvidence"
}
CollectEvidence = {
Type = "Task"
Resource = aws_lambda_function.collect_evidence.arn
Next = "NotifyTeam"
}
NotifyTeam = {
Type = "Task"
Resource = "arn:aws:states:::sns:publish"
Parameters = {
TopicArn = aws_sns_topic.incident.arn
Message = "Incident detected - awaiting approval"
}
Next = "WaitForApproval"
}
WaitForApproval = {
Type = "Task"
Resource = "arn:aws:states:::lambda:invoke.waitForTaskToken"
TimeoutSeconds = 3600
Next = "RecoverResource"
}
RecoverResource = {
Type = "Task"
Resource = aws_lambda_function.recover.arn
Next = "ValidateRecovery"
}
ValidateRecovery = {
Type = "Task"
Resource = aws_lambda_function.validate.arn
End = true
}
}
})
}
ISMS-P ์ฌ์ฌ ์ฆ์ ์๋ฃ
๋ฐฑ์ ์์ ์ฑ๊ณต/์คํจ ํํฉ
๋ณต๊ตฌ ํ ์คํธ ๊ฒฐ๊ณผ ๋ฆฌํฌํธ
์ฌ๊ณ ๋์ ํ๋ จ ๊ฒฐ๊ณผ ๋ถ์
๊ธฐ์กด ๋๊ตฌ ๋๋น BSG ๊ฐ์