์ฝ˜ํ…์ธ  ๋Œ€ํ‘œ ์ด๋ฏธ์ง€ - ๐Ÿ›ก๏ธ AWS Backup์œผ๋กœ ๋ฐ์ดํ„ฐ ๋ฐฑ์—… ๋ฐ ๋ณต๊ตฌ ์ž๋™ํ™”ํ•˜๊ธฐ
โ˜๏ธ ํด๋ผ์šฐ๋“œ / DevOps

๐Ÿ›ก๏ธ AWS Backup์œผ๋กœ ๋ฐ์ดํ„ฐ ๋ฐฑ์—… ๋ฐ ๋ณต๊ตฌ ์ž๋™ํ™”ํ•˜๊ธฐ

ํด๋ผ์šฐ๋“œ ํ™˜๊ฒฝ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์žƒ๋Š” ๊ฑด ์ง„์งœ ์•…๋ชฝ์ด์ž–์•„์š” ๐Ÿ˜ฑ
AWS Backup์„ ์ œ๋Œ€๋กœ ์จ์„œ ์ž๋™ํ™”๋œ ๋ฐฑ์—…ยท๋ณต๊ตฌ ์ฒด๊ณ„๋ฅผ ๊ตฌ์ถ•ํ•ด๋ด์š”!
์ด ๊ธ€ ๋‹ค ์ฝ์œผ๋ฉด ์—ฌ๋Ÿฌ๋ถ„๋„ ๋ฐฑ์—… ๊ณ ์ˆ˜ ๋ฉ๋‹ˆ๋‹ค ใ…‹ใ…‹

AWS Backup ํ•ต์‹ฌ ํ๋ฆ„ ํ•œ๋ˆˆ์— ๋ณด๊ธฐ ๐Ÿ“‹ ๋ฐฑ์—… ๊ณ„ํš Backup Plan ๐ŸŽฏ ๋ฆฌ์†Œ์Šค ์„ ํƒ Resource Selection ๐Ÿ”„ ์ž๋™ ์‹คํ–‰ ์ž๋™ ์Šค์ผ€์ค„๋ง ๐Ÿ—„๏ธ ๋ณผํŠธ ์ €์žฅ Backup Vault โ™ป๏ธ ๋ณต๊ตฌ Restore ์ง€์› ์„œ๋น„์Šค: EC2 ยท EBS ยท RDS ยท DynamoDB ยท EFS ยท S3 ยท Aurora ยท FSx ยท Storage Gateway ๐Ÿ–ฅ๏ธ EC2 ๐Ÿ’พ EBS ๐Ÿ—ƒ๏ธ RDS โšก DynamoDB ๐Ÿ“ EFS ๐Ÿชฃ S3 ๐ŸŒŠ Aurora ๐Ÿ“‚ FSx ยฉ AWS Backup ์ง€์› ๋ฆฌ์†Œ์Šค ํ˜„ํ™ฉ

๐Ÿค” AWS Backup์ด ๋ญ”๋ฐ์š”? ๊ทธ๋ƒฅ ์Šค๋ƒ…์ƒท์ด๋ž‘ ๋‹ค๋ฅธ ๊ฑฐ์˜ˆ์š”?

ใ…‹ใ…‹ ์ด ์งˆ๋ฌธ ์ง„์งœ ๋งŽ์ด ๋ฐ›์•„์š”. ๊ฒฐ๋ก ๋ถ€ํ„ฐ ๋งํ•˜๋ฉด AWS Backup์€ ์—ฌ๋Ÿฌ AWS ์„œ๋น„์Šค์˜ ๋ฐฑ์—…์„ ํ•œ ๊ณณ์—์„œ ์ค‘์•™ ์ง‘์ค‘์‹์œผ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ์™„์ „ ๊ด€๋ฆฌํ˜• ์„œ๋น„์Šค์˜ˆ์š”.

์˜ˆ์ „์—๋Š” ์–ด๋• ๋ƒ๋ฉด์š” โ€” EC2 ์Šค๋ƒ…์ƒท์€ EC2 ์ฝ˜์†”์—์„œ, RDS ๋ฐฑ์—…์€ RDS ์ฝ˜์†”์—์„œ, DynamoDB ๋ฐฑ์—…์€ ๋˜ ๊ฑฐ๊ธฐ์„œ... ์ด๋ ‡๊ฒŒ ๊ฐ๊ฐ ๋”ฐ๋กœ๋”ฐ๋กœ ๊ด€๋ฆฌํ•ด์•ผ ํ–ˆ๊ฑฐ๋“ ์š” ๐Ÿ˜ฉ
๊ทธ๊ฒŒ ์–ผ๋งˆ๋‚˜ ๊ท€์ฐฎ์€ ์ผ์ธ์ง€ ์šด์˜ํ•ด๋ณธ ์‚ฌ๋žŒ์€ ์•Œ์ฃ . ๋ฐฑ์—… ์ •์ฑ…์ด ์„œ๋น„์Šค๋งˆ๋‹ค ๋‹ค๋ฅด๊ณ , ๋ชจ๋‹ˆํ„ฐ๋ง๋„ ๋”ฐ๋กœ ํ•ด์•ผ ํ•˜๊ณ , ๊ฐ์‚ฌ(Audit) ๋ฆฌํฌํŠธ๋„ ๋ฝ‘๊ธฐ ํž˜๋“ค๊ณ ...

AWS Backup์€ ์ด ๋ชจ๋“  ๊ฑธ ํ•˜๋‚˜์˜ ์ฝ˜์†”, ํ•˜๋‚˜์˜ API, ํ•˜๋‚˜์˜ ์ •์ฑ…์œผ๋กœ ํ†ตํ•ฉํ•ด์ค˜์š”. 2019๋…„์— ์ถœ์‹œ๋๊ณ  ์ง€๊ธˆ์€ ์ง€์› ์„œ๋น„์Šค๊ฐ€ ์—„์ฒญ ๋งŽ์•„์กŒ์–ด์š”.

๐Ÿ’ก ํ•ต์‹ฌ ํฌ์ธํŠธ: AWS Backup์€ ๋‹จ์ˆœ ์Šค๋ƒ…์ƒท ๋„๊ตฌ๊ฐ€ ์•„๋‹ˆ๋ผ, ๋ฐฑ์—… ์ •์ฑ… ์ •์˜ โ†’ ์ž๋™ ์‹คํ–‰ โ†’ ๋ณด์กด ๊ด€๋ฆฌ โ†’ ๋ณต๊ตฌ โ†’ ๊ฐ์‚ฌ๊นŒ์ง€ ์ „์ฒด ๋ผ์ดํ”„์‚ฌ์ดํด์„ ๊ด€๋ฆฌํ•˜๋Š” ํ”Œ๋žซํผ์ด์—์š”!

๐Ÿ“Œ AWS Backup vs ๊ฐœ๋ณ„ ์„œ๋น„์Šค ๋ฐฑ์—… ๋น„๊ต

๊ตฌ๋ถ„๊ฐœ๋ณ„ ์„œ๋น„์Šค ๋ฐฑ์—…AWS Backup
๊ด€๋ฆฌ ์œ„์น˜๊ฐ ์„œ๋น„์Šค ์ฝ˜์†” ๋”ฐ๋กœ๋”ฐ๋กœAWS Backup ์ฝ˜์†” ํ•˜๋‚˜๋กœ ํ†ตํ•ฉ
์ •์ฑ… ๊ด€๋ฆฌ์„œ๋น„์Šค๋งˆ๋‹ค ๋‹ค๋ฅธ ๋ฐฉ์‹Backup Plan์œผ๋กœ ์ผ๊ด€๋œ ์ •์ฑ…
ํฌ๋กœ์Šค ๋ฆฌ์ „ ๋ณต์‚ฌ์ผ๋ถ€ ์„œ๋น„์Šค๋งŒ ์ง€์›ํ†ตํ•ฉ ์ง€์›
ํฌ๋กœ์Šค ๊ณ„์ • ๋ณต์‚ฌ๋ณต์žกํ•œ ์„ค์ • ํ•„์š”Organizations ์—ฐ๋™์œผ๋กœ ๊ฐ„ํŽธ
๊ฐ์‚ฌ/์ปดํ”Œ๋ผ์ด์–ธ์Šค๊ฐ์ž ๋”ฐ๋กœ ํ™•์ธAWS Backup Audit Manager ํ†ตํ•ฉ
๋น„์šฉ ๊ฐ€์‹œ์„ฑ๋ถ„์‚ฐ๋˜์–ด ํŒŒ์•… ์–ด๋ ค์›€ํƒœ๊ทธ ๊ธฐ๋ฐ˜ ๋น„์šฉ ์ถ”์  ๊ฐ€๋Šฅ

๐Ÿ—๏ธ AWS Backup ํ•ต์‹ฌ ๊ตฌ์„ฑ ์š”์†Œ ํŒŒํ—ค์น˜๊ธฐ

AWS Backup์„ ์ œ๋Œ€๋กœ ์“ฐ๋ ค๋ฉด ํ•ต์‹ฌ ๊ฐœ๋… 4๊ฐ€์ง€๋ฅผ ๊ผญ ์•Œ์•„์•ผ ํ•ด์š”. ์ด๊ฑฐ ๋ชจ๋ฅด๋ฉด ์ฝ˜์†” ๋“ค์–ด๊ฐ€๋„ ๋ญ๊ฐ€ ๋ญ”์ง€ ๋ชจ๋ฆ„ ใ…‹ใ…‹

1๏ธโƒฃ Backup Plan (๋ฐฑ์—… ๊ณ„ํš)

๋ฐฑ์—… ๊ณ„ํš์€ "์–ธ์ œ, ์–ผ๋งˆ๋‚˜ ์ž์ฃผ, ์–ผ๋งˆ๋‚˜ ์˜ค๋ž˜ ๋ณด๊ด€ํ• ์ง€"๋ฅผ ์ •์˜ํ•˜๋Š” ์„ค์ •์ด์—์š”.
Backup Plan ์•ˆ์—๋Š” ํ•˜๋‚˜ ์ด์ƒ์˜ Backup Rule์ด ๋“ค์–ด๊ฐ€๊ณ , ๊ฐ Rule์—๋Š” ๋‹ค์Œ ๋‚ด์šฉ์ด ํฌํ•จ๋ผ์š”:

๐Ÿ“‹ Backup Rule ๊ตฌ์„ฑ ์š”์†Œ:
โ€ข Schedule: cron ํ‘œํ˜„์‹ ๋˜๋Š” ๋นˆ๋„ ์„ค์ • (๋งค์ผ, ๋งค์ฃผ, ๋งค์‹œ๊ฐ„ ๋“ฑ)
โ€ข Backup Window: ๋ฐฑ์—… ์‹œ์ž‘ ์‹œ๊ฐ„ ๋ฐ ์™„๋ฃŒ ํ—ˆ์šฉ ์‹œ๊ฐ„
โ€ข Lifecycle: ์ฝœ๋“œ ์Šคํ† ๋ฆฌ์ง€ ์ „ํ™˜ ์‹œ์  + ๋งŒ๋ฃŒ(์‚ญ์ œ) ์‹œ์ 
โ€ข Backup Vault: ๋ฐฑ์—… ์ €์žฅ ์œ„์น˜
โ€ข Copy to another Region/Account: ํฌ๋กœ์Šค ๋ฆฌ์ „/๊ณ„์ • ๋ณต์‚ฌ ์„ค์ •

2๏ธโƒฃ Backup Vault (๋ฐฑ์—… ๋ณผํŠธ)

๋ฐฑ์—… ๋ณผํŠธ๋Š” ๋ฐฑ์—… ๋ฐ์ดํ„ฐ๊ฐ€ ์‹ค์ œ๋กœ ์ €์žฅ๋˜๋Š” ๋…ผ๋ฆฌ์  ์ปจํ…Œ์ด๋„ˆ์˜ˆ์š”. S3 ๋ฒ„ํ‚ท์ด๋ž‘ ๋น„์Šทํ•œ ๊ฐœ๋…์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋ผ์š”.

์ค‘์š”ํ•œ ํŠน์ง•์ด ์žˆ์–ด์š” โ€” ๋ณผํŠธ์—๋Š” ๋ฆฌ์†Œ์Šค ๊ธฐ๋ฐ˜ ์ ‘๊ทผ ์ •์ฑ…์„ ๋ถ™์ผ ์ˆ˜ ์žˆ๊ณ , AWS KMS ํ‚ค๋กœ ์•”ํ˜ธํ™”ํ•  ์ˆ˜ ์žˆ์–ด์š”.
๊ทธ๋ฆฌ๊ณ  ์ง„์งœ ํ•ต์‹ฌ ๊ธฐ๋Šฅ์ธ Vault Lock์ด ์žˆ๋Š”๋ฐ, ์ด๊ฑด ์•„๋ž˜์—์„œ ์ž์„ธํžˆ ์„ค๋ช…ํ• ๊ฒŒ์š”!

3๏ธโƒฃ Recovery Point (๋ณต๊ตฌ ์ง€์ )

๋ฐฑ์—…์ด ์‹คํ–‰๋  ๋•Œ๋งˆ๋‹ค ์ƒ์„ฑ๋˜๋Š” ์Šค๋ƒ…์ƒท/๋ฐฑ์—… ๋ฐ์ดํ„ฐ์˜ ๋‹จ์œ„์˜ˆ์š”. ๊ฐ Recovery Point์—๋Š” ๊ณ ์œ  ARN์ด ๋ถ€์—ฌ๋˜๊ณ , ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ(์ƒ์„ฑ ์‹œ๊ฐ„, ํฌ๊ธฐ, ์ƒํƒœ, ์•”ํ˜ธํ™” ์—ฌ๋ถ€ ๋“ฑ)๊ฐ€ ํ•จ๊ป˜ ์ €์žฅ๋ผ์š”.
๋ณต๊ตฌํ•  ๋•Œ๋Š” ์ด Recovery Point๋ฅผ ์„ ํƒํ•ด์„œ ์›ํ•˜๋Š” ์‹œ์ ์œผ๋กœ ๋˜๋Œ๋ฆด ์ˆ˜ ์žˆ์–ด์š”.

4๏ธโƒฃ Backup Selection (๋ฐฑ์—… ๋Œ€์ƒ ์„ ํƒ)

์–ด๋–ค ๋ฆฌ์†Œ์Šค๋ฅผ ๋ฐฑ์—…ํ• ์ง€ ์ง€์ •ํ•˜๋Š” ๋ถ€๋ถ„์ด์—์š”. ๋‘ ๊ฐ€์ง€ ๋ฐฉ์‹์ด ์žˆ์–ด์š”:

๋ฐฉ์‹์„ค๋ช…์žฅ์ 
๋ฆฌ์†Œ์Šค ID ์ง์ ‘ ์ง€์ •ํŠน์ • EC2, RDS ๋“ฑ ARN ์ง์ ‘ ์ž…๋ ฅ๋ช…ํ™•ํ•˜๊ณ  ์˜ˆ์ธก ๊ฐ€๋Šฅ
ํƒœ๊ทธ ๊ธฐ๋ฐ˜ ์„ ํƒํŠน์ • ํƒœ๊ทธ๊ฐ€ ๋ถ™์€ ๋ฆฌ์†Œ์Šค ์ž๋™ ํฌํ•จ๋™์ ์œผ๋กœ ๋ฆฌ์†Œ์Šค ์ถ”๊ฐ€/์ œ๊ฑฐ ๊ฐ€๋Šฅ
โœ… ์‹ค๋ฌด ํŒ: ํƒœ๊ทธ ๊ธฐ๋ฐ˜ ์„ ํƒ์ด ํ›จ์”ฌ ์œ ์—ฐํ•ด์š”! ์˜ˆ๋ฅผ ๋“ค์–ด Backup=true ํƒœ๊ทธ๋ฅผ ๋ถ™์ธ ๋ชจ๋“  ๋ฆฌ์†Œ์Šค๋ฅผ ์ž๋™์œผ๋กœ ๋ฐฑ์—… ๋Œ€์ƒ์— ํฌํ•จ์‹œํ‚ฌ ์ˆ˜ ์žˆ์–ด์š”. ์ƒˆ ๋ฆฌ์†Œ์Šค ์ƒ์„ฑํ•  ๋•Œ ํƒœ๊ทธ๋งŒ ๋ถ™์ด๋ฉด ์ž๋™์œผ๋กœ ๋ฐฑ์—… ์ •์ฑ… ์ ์šฉ๋จ ๐Ÿ‘

โš™๏ธ AWS Backup ์‹ค์ œ ์„ค์ •ํ•˜๊ธฐ (์ฝ˜์†” + CLI)

์ด๋ก ๋งŒ ์•Œ๋ฉด ๋ญํ•ด์š” ใ…‹ใ…‹ ์‹ค์ œ๋กœ ์–ด๋–ป๊ฒŒ ์„ค์ •ํ•˜๋Š”์ง€ ๋ด๋ด์š”!

๐Ÿ–ฅ๏ธ ์ฝ˜์†”์—์„œ Backup Plan ๋งŒ๋“ค๊ธฐ

1
AWS ์ฝ˜์†” โ†’ AWS Backup ์„œ๋น„์Šค ์ด๋™
๊ฒ€์ƒ‰์ฐฝ์— "Backup" ์น˜๋ฉด ๋ฐ”๋กœ ๋‚˜์™€์š”. ๋ฆฌ์ „ ํ™•์ธ ํ•„์ˆ˜! ๋ฐฑ์—…์€ ๋ฆฌ์ „๋ณ„๋กœ ๊ด€๋ฆฌ๋ผ์š”.
2
Backup plans โ†’ Create Backup plan
์„ธ ๊ฐ€์ง€ ์˜ต์…˜์ด ์žˆ์–ด์š”: ํ…œํ”Œ๋ฆฟ ์‚ฌ์šฉ / ์ƒˆ๋กœ ๋งŒ๋“ค๊ธฐ / JSON์œผ๋กœ ์ •์˜. ์ฒ˜์Œ์—” ํ…œํ”Œ๋ฆฟ ์ถ”์ฒœ!
3
Backup rule ์„ค์ •
Rule name, Backup frequency(๋นˆ๋„), Backup window, Lifecycle(๋ณด์กด ๊ธฐ๊ฐ„) ์„ค์ •ํ•ด์š”.
4
Assign resources (๋ฆฌ์†Œ์Šค ํ• ๋‹น)
ํƒœ๊ทธ ๊ธฐ๋ฐ˜ ๋˜๋Š” ๋ฆฌ์†Œ์Šค ID๋กœ ๋ฐฑ์—… ๋Œ€์ƒ ์ง€์ •ํ•ด์š”. IAM Role๋„ ์—ฌ๊ธฐ์„œ ์„ค์ •!
5
Create plan ํด๋ฆญ โ†’ ์™„๋ฃŒ!
์„ค์ •ํ•œ ์Šค์ผ€์ค„์— ๋”ฐ๋ผ ์ž๋™์œผ๋กœ ๋ฐฑ์—…์ด ์‹คํ–‰๋ผ์š” ๐ŸŽ‰

๐Ÿ’ป AWS CLI๋กœ Backup Plan ์ƒ์„ฑํ•˜๊ธฐ

CLI๋ฅผ ๋” ์„ ํ˜ธํ•˜๋Š” ๋ถ„๋“ค์„ ์œ„ํ•ด! JSON ํŒŒ์ผ๋กœ ์ •์˜ํ•˜๊ณ  CLI๋กœ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์ด์—์š”.

# backup-plan.json ํŒŒ์ผ ์ƒ์„ฑ
{
  "BackupPlanName": "my-daily-backup-plan",
  "Rules": [
    {
      "RuleName": "daily-backup-rule",
      "TargetBackupVaultName": "my-backup-vault",
      "ScheduleExpression": "cron(0 2 * * ? *)",
      "StartWindowMinutes": 60,
      "CompletionWindowMinutes": 180,
      "Lifecycle": {
        "MoveToColdStorageAfterDays": 30,
        "DeleteAfterDays": 365
      },
      "CopyActions": [
        {
          "DestinationBackupVaultArn": "arn:aws:backup:ap-northeast-2:123456789012:backup-vault:dr-vault",
          "Lifecycle": {
            "DeleteAfterDays": 90
          }
        }
      ]
    }
  ]
}

# Backup Plan ์ƒ์„ฑ
aws backup create-backup-plan \
  --backup-plan file://backup-plan.json \
  --region ap-northeast-1
# ๋ฆฌ์†Œ์Šค ํ• ๋‹น (ํƒœ๊ทธ ๊ธฐ๋ฐ˜)
aws backup create-backup-selection \
  --backup-plan-id "plan-id-์—ฌ๊ธฐ์—" \
  --backup-selection '{
    "SelectionName": "tagged-resources",
    "IamRoleArn": "arn:aws:iam::123456789012:role/AWSBackupDefaultServiceRole",
    "ListOfTags": [
      {
        "ConditionType": "STRINGEQUALS",
        "ConditionKey": "Backup",
        "ConditionValue": "true"
      }
    ]
  }'
โœ… cron ํ‘œํ˜„์‹ ํŒ: AWS Backup์˜ cron์€ UTC ๊ธฐ์ค€์ด์—์š”! ํ•œ๊ตญ ์‹œ๊ฐ„(KST)์€ UTC+9์ด๋‹ˆ๊นŒ, ์ƒˆ๋ฒฝ 2์‹œ์— ๋ฐฑ์—…ํ•˜๊ณ  ์‹ถ์œผ๋ฉด cron(0 17 * * ? *) ์ด๋ ‡๊ฒŒ ์ „๋‚  17์‹œ UTC๋กœ ์„ค์ •ํ•ด์•ผ ํ•ด์š”. ์ด๊ฑฐ ํ—ท๊ฐˆ๋ ค์„œ ๋‚ฎ์— ๋ฐฑ์—… ๋Œ๋ฆฌ๋Š” ์‹ค์ˆ˜ ๋งŽ์ด ํ•จ ใ…‹ใ…‹

AWS Backup Vault Lock - ๋žœ์„ฌ์›จ์–ด ๋ฐฉ์–ด์˜ ํ•ต์‹ฌ ๐Ÿ”’ ๐Ÿ” Backup Vault Lock WORM ์ •์ฑ… ์ ์šฉ Write Once Read Many ๋ฐฑ์—… ์‚ญ์ œ/๋ณ€๊ฒฝ ๋ถˆ๊ฐ€ ๊ด€๋ฆฌ์ž๋„ ์‚ญ์ œ ๋ถˆ๊ฐ€ ๋ฃจํŠธ ๊ณ„์ • ํฌํ•จ ๋ˆ„๊ตฌ๋„ ๋ณด์กด ๊ธฐ๊ฐ„ ๋‚ด ์‚ญ์ œ ๋ชปํ•จ ๋žœ์„ฌ์›จ์–ด ๋ฐฉ์–ด ์•…์„ฑ์ฝ”๋“œ๊ฐ€ ๋ฐฑ์—… ์‚ญ์ œ ์‹œ๋„ํ•ด๋„ Vault Lock์ด ๋ง‰์•„์คŒ ์ปดํ”Œ๋ผ์ด์–ธ์Šค ์ถฉ์กฑ SEC Rule 17a-4(f) CFTC, FINRA ๋“ฑ ๊ทœ์ • ์ค€์ˆ˜ โš ๏ธ Governance ๋ชจ๋“œ ํŠน์ • ๊ถŒํ•œ ๊ฐ€์ง„ ์‚ฌ์šฉ์ž๋Š” Lock ํ•ด์ œ ๊ฐ€๋Šฅ ํ…Œ์ŠคํŠธ/๊ฐœ๋ฐœ ํ™˜๊ฒฝ์— ์ ํ•ฉ 72์‹œ๊ฐ„ ๋‚ด ์ทจ์†Œ ๊ฐ€๋Šฅ ๐Ÿ”’ Compliance ๋ชจ๋“œ ๋ˆ„๊ตฌ๋„ Lock ํ•ด์ œ ๋ถˆ๊ฐ€ AWS ์ง€์›ํŒ€๋„ ๋ถˆ๊ฐ€ ๊ธˆ์œต/์˜๋ฃŒ ๊ทœ์ œ ํ™˜๊ฒฝ์— ์ ํ•ฉ ์„ค์ • ํ›„ ์ ˆ๋Œ€ ์ทจ์†Œ ๋ถˆ๊ฐ€ Vault Lock์€ ํ•œ๋ฒˆ Compliance ๋ชจ๋“œ๋กœ ์„ค์ •ํ•˜๋ฉด ๋˜๋Œ๋ฆด ์ˆ˜ ์—†์œผ๋‹ˆ ์‹ ์ค‘ํ•˜๊ฒŒ!

๐Ÿ”’ Vault Lock - ๋ฐฑ์—… ๋ฐ์ดํ„ฐ ๋ถˆ๋ณ€์„ฑ ๋ณด์žฅ

์ด๊ฑฐ ์ง„์งœ ์ค‘์š”ํ•œ ๊ธฐ๋Šฅ์ธ๋ฐ ๋ชจ๋ฅด๋Š” ๋ถ„๋“ค์ด ๋งŽ์•„์š”. AWS Backup Vault Lock์€ ๋ฐฑ์—… ๋ณผํŠธ์— WORM(Write Once Read Many) ์ •์ฑ…์„ ์ ์šฉํ•ด์„œ ๋ฐฑ์—… ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•˜๊ฑฐ๋‚˜ ๋ณ€๊ฒฝํ•˜์ง€ ๋ชปํ•˜๊ฒŒ ๋ง‰๋Š” ๊ธฐ๋Šฅ์ด์—์š”.

๋žœ์„ฌ์›จ์–ด ๊ณต๊ฒฉ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์ƒ๊ฐํ•ด๋ด์š” โ€” ๊ณต๊ฒฉ์ž๊ฐ€ ์‹œ์Šคํ…œ์— ์นจํˆฌํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์•”ํ˜ธํ™”ํ•˜๊ณ , ์‹ฌ์ง€์–ด ๋ฐฑ์—…๊นŒ์ง€ ์‚ญ์ œํ•˜๋ ค๊ณ  ์‹œ๋„ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์‹ค์ œ๋กœ ์žˆ์–ด์š”. Vault Lock์ด ์—†์œผ๋ฉด ๋ฐฑ์—…๋„ ๋‚ ์•„๊ฐˆ ์ˆ˜ ์žˆ์–ด์š” ๐Ÿ˜ฑ
Vault Lock์ด ํ™œ์„ฑํ™”๋œ ๋ณผํŠธ๋Š” ๋ฃจํŠธ ๊ณ„์ •์„ ํฌํ•จํ•œ ์–ด๋–ค ์‚ฌ์šฉ์ž๋„ ๋ณด์กด ๊ธฐ๊ฐ„ ๋‚ด์— ๋ฐฑ์—…์„ ์‚ญ์ œํ•  ์ˆ˜ ์—†์–ด์š”.

โš ๏ธ ์ฃผ์˜! Compliance ๋ชจ๋“œ๋กœ Vault Lock์„ ์„ค์ •ํ•˜๋ฉด ์ ˆ๋Œ€๋กœ ์ทจ์†Œํ•˜๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•  ์ˆ˜ ์—†์–ด์š”. ์ตœ์†Œ ๋ณด์กด ๊ธฐ๊ฐ„(min retention days)๋„ ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€. ์„ค์ • ์ „์— ์ถฉ๋ถ„ํžˆ ํ…Œ์ŠคํŠธํ•˜๊ณ  ์‹ ์ค‘ํ•˜๊ฒŒ ๊ฒฐ์ •ํ•˜์„ธ์š”!

๐Ÿ’ป Vault Lock CLI ์„ค์ •

# Vault Lock ์„ค์ • (Governance ๋ชจ๋“œ - ํ…Œ์ŠคํŠธ์šฉ)
aws backup put-backup-vault-lock-configuration \
  --backup-vault-name "my-backup-vault" \
  --min-retention-days 7 \
  --max-retention-days 365 \
  --changeable-for-days 3

# Vault Lock ์„ค์ • (Compliance ๋ชจ๋“œ - ํ”„๋กœ๋•์…˜์šฉ)
# changeable-for-days ์ƒ๋žตํ•˜๋ฉด ์ฆ‰์‹œ Compliance ๋ชจ๋“œ
aws backup put-backup-vault-lock-configuration \
  --backup-vault-name "prod-backup-vault" \
  --min-retention-days 30 \
  --max-retention-days 2555

๐ŸŒ ํฌ๋กœ์Šค ๋ฆฌ์ „ & ํฌ๋กœ์Šค ๊ณ„์ • ๋ฐฑ์—…

์ง„์งœ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ๊ธ‰ DR(Disaster Recovery) ๊ตฌ์„ฑํ•˜๋ ค๋ฉด ์ด๊ฒŒ ํ•„์ˆ˜์˜ˆ์š”. ์„œ์šธ ๋ฆฌ์ „์— ์žฅ์• ๊ฐ€ ๋‚˜๋„ ๋„์ฟ„๋‚˜ ๋ฒ„์ง€๋‹ˆ์•„์— ๋ฐฑ์—…์ด ์žˆ์œผ๋ฉด ๋ณต๊ตฌ ๊ฐ€๋Šฅํ•˜์ž–์•„์š”!

๐Ÿ—บ๏ธ ํฌ๋กœ์Šค ๋ฆฌ์ „ ๋ณต์‚ฌ

Backup Plan์˜ Rule์— Copy to another Region ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•˜๋ฉด ๋ผ์š”. ๋ฐฑ์—…์ด ์™„๋ฃŒ๋˜๋ฉด ์ž๋™์œผ๋กœ ์ง€์ •ํ•œ ๋ฆฌ์ „์˜ ๋ณผํŠธ๋กœ ๋ณต์‚ฌํ•ด์ค˜์š”.
์ฃผ์˜ํ•  ์ ์€ ๋ณต์‚ฌ ๋น„์šฉ์ด ๋ณ„๋„๋กœ ๋ฐœ์ƒํ•ด์š”. ๋ฐ์ดํ„ฐ ์ „์†ก ๋น„์šฉ + ๋ชฉ์ ์ง€ ๋ฆฌ์ „์˜ ๋ฐฑ์—… ์Šคํ† ๋ฆฌ์ง€ ๋น„์šฉ์ด ์ถ”๊ฐ€๋ผ์š”.

# ํฌ๋กœ์Šค ๋ฆฌ์ „ ๋ณต์‚ฌ๊ฐ€ ํฌํ•จ๋œ Backup Rule
{
  "RuleName": "daily-with-cross-region",
  "TargetBackupVaultName": "primary-vault",
  "ScheduleExpression": "cron(0 17 * * ? *)",
  "Lifecycle": {
    "DeleteAfterDays": 30
  },
  "CopyActions": [
    {
      "DestinationBackupVaultArn": "arn:aws:backup:us-east-1:123456789012:backup-vault:dr-vault-us",
      "Lifecycle": {
        "DeleteAfterDays": 90
      }
    }
  ]
}

๐Ÿข ํฌ๋กœ์Šค ๊ณ„์ • ๋ฐฑ์—… (AWS Organizations ์—ฐ๋™)

์ด๊ฑด ์ง„์งœ ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ์ด์—์š”. AWS Organizations๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ™˜๊ฒฝ์—์„œ ๊ด€๋ฆฌ ๊ณ„์ •(Management Account)์—์„œ ๋ฉค๋ฒ„ ๊ณ„์ •๋“ค์˜ ๋ฐฑ์—… ์ •์ฑ…์„ ์ค‘์•™์—์„œ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด์š”.

์˜ˆ๋ฅผ ๋“ค์–ด ๊ฐœ๋ฐœ ๊ณ„์ •, ์Šคํ…Œ์ด์ง• ๊ณ„์ •, ํ”„๋กœ๋•์…˜ ๊ณ„์ •์ด ๊ฐ๊ฐ ์žˆ์„ ๋•Œ, ๊ด€๋ฆฌ ๊ณ„์ •์—์„œ Backup Policy๋ฅผ ๋งŒ๋“ค์–ด์„œ ๋ชจ๋“  ๊ณ„์ •์— ์ผ๊ด„ ์ ์šฉํ•  ์ˆ˜ ์žˆ์–ด์š”!

๐Ÿ—๏ธ ํฌ๋กœ์Šค ๊ณ„์ • ๋ฐฑ์—… ์„ค์ • ์ˆœ์„œ:
1. Organizations์—์„œ Backup ์‹ ๋ขฐ ์„œ๋น„์Šค ํ™œ์„ฑํ™”
2. ๊ฐ ๋ฉค๋ฒ„ ๊ณ„์ •์— Backup Vault ์ƒ์„ฑ + ํฌ๋กœ์Šค ๊ณ„์ • ์ ‘๊ทผ ์ •์ฑ… ์„ค์ •
3. ๊ด€๋ฆฌ ๊ณ„์ •์—์„œ Organizations Backup Policy ์ƒ์„ฑ
4. ์ •์ฑ…์„ OU(Organizational Unit) ๋˜๋Š” ํŠน์ • ๊ณ„์ •์— ์—ฐ๊ฒฐ
5. ๋ฉค๋ฒ„ ๊ณ„์ •์—์„œ ์ž๋™์œผ๋กœ Backup Plan์ด ์ ์šฉ๋จ!
# ๋ฉค๋ฒ„ ๊ณ„์ • ๋ณผํŠธ์— ํฌ๋กœ์Šค ๊ณ„์ • ์ ‘๊ทผ ํ—ˆ์šฉ ์ •์ฑ… ์ถ”๊ฐ€
aws backup put-backup-vault-access-policy \
  --backup-vault-name "member-account-vault" \
  --policy '{
    "Version": "2012-10-17",
    "Statement": [
      {
        "Effect": "Allow",
        "Principal": {
          "AWS": "arn:aws:iam::MANAGEMENT-ACCOUNT-ID:root"
        },
        "Action": [
          "backup:CopyIntoBackupVault"
        ],
        "Resource": "*"
      }
    ]
  }'

โ™ป๏ธ ๋ณต๊ตฌ(Restore) ์‹ค์ œ๋กœ ํ•ด๋ณด๊ธฐ

๋ฐฑ์—…์€ ์ž˜ ๋๋Š”๋ฐ ๋ณต๊ตฌ๋ฅผ ๋ชป ํ•˜๋ฉด ์˜๋ฏธ ์—†์ž–์•„์š” ใ…‹ใ…‹ ๋ณต๊ตฌ ๋ฐฉ๋ฒ•๋„ ์•Œ์•„๋ด์š”!

๐Ÿ–ฅ๏ธ ์ฝ˜์†”์—์„œ ๋ณต๊ตฌํ•˜๊ธฐ

1
AWS Backup โ†’ Protected resources ๋˜๋Š” Backup vaults ์ด๋™
๋ณต๊ตฌํ•˜๊ณ  ์‹ถ์€ ๋ฆฌ์†Œ์Šค๋ฅผ ์ฐพ์•„์š”.
2
Recovery points ๋ชฉ๋ก์—์„œ ์›ํ•˜๋Š” ์‹œ์  ์„ ํƒ
์ƒ์„ฑ ์‹œ๊ฐ„, ํฌ๊ธฐ, ์ƒํƒœ๋ฅผ ํ™•์ธํ•˜๊ณ  ๋ณต๊ตฌํ•  Recovery Point๋ฅผ ์„ ํƒํ•ด์š”.
3
Restore ํด๋ฆญ โ†’ ๋ณต๊ตฌ ์„ค์ •
๋ณต๊ตฌ ๋Œ€์ƒ ๋ฆฌ์ „, ์ƒˆ ๋ฆฌ์†Œ์Šค ์ด๋ฆ„, ์„œ๋ธŒ๋„ท, ๋ณด์•ˆ ๊ทธ๋ฃน ๋“ฑ ์„ค์ •ํ•ด์š”.
์›๋ณธ ๋ฆฌ์†Œ์Šค๋ฅผ ๋ฎ์–ด์“ฐ๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ ์ƒˆ ๋ฆฌ์†Œ์Šค๋กœ ๋ณต๊ตฌ๋˜๋Š” ์  ์ฃผ์˜!
4
Restore backup ํด๋ฆญ โ†’ Jobs์—์„œ ์ง„ํ–‰ ์ƒํ™ฉ ํ™•์ธ
๋ณต๊ตฌ ์ž‘์—…์ด ์‹œ์ž‘๋˜๊ณ  ์™„๋ฃŒ๋˜๋ฉด ์ƒˆ ๋ฆฌ์†Œ์Šค๊ฐ€ ์ƒ์„ฑ๋ผ์š”.

๐Ÿ’ป CLI๋กœ ๋ณต๊ตฌํ•˜๊ธฐ

# Recovery Point ARN ์กฐํšŒ
aws backup list-recovery-points-by-resource \
  --resource-arn "arn:aws:ec2:ap-northeast-2:123456789012:instance/i-1234567890abcdef0" \
  --query 'RecoveryPoints[*].[RecoveryPointArn,CreationDate,Status]' \
  --output table

# EBS ๋ณผ๋ฅจ ๋ณต๊ตฌ ์˜ˆ์‹œ
aws backup start-restore-job \
  --recovery-point-arn "arn:aws:ec2:ap-northeast-2::snapshot/snap-1234567890abcdef0" \
  --iam-role-arn "arn:aws:iam::123456789012:role/AWSBackupDefaultServiceRole" \
  --resource-type "EBS" \
  --metadata '{
    "availabilityZone": "ap-northeast-2a",
    "volumeType": "gp3",
    "encrypted": "true"
  }'

# RDS ๋ณต๊ตฌ ์˜ˆ์‹œ
aws backup start-restore-job \
  --recovery-point-arn "arn:aws:rds:ap-northeast-2:123456789012:snapshot:awsbackup-rds-mydb-2024-01-15" \
  --iam-role-arn "arn:aws:iam::123456789012:role/AWSBackupDefaultServiceRole" \
  --resource-type "RDS" \
  --metadata '{
    "DBInstanceIdentifier": "mydb-restored",
    "DBInstanceClass": "db.t3.medium",
    "Engine": "mysql"
  }'
โš ๏ธ ๋ณต๊ตฌ ์‹œ ์ฃผ์˜์‚ฌํ•ญ:
โ€ข AWS Backup์€ ํ•ญ์ƒ ์ƒˆ ๋ฆฌ์†Œ์Šค๋กœ ๋ณต๊ตฌํ•ด์š”. ๊ธฐ์กด ๋ฆฌ์†Œ์Šค๋ฅผ ์ง์ ‘ ๋ฎ์–ด์“ฐ์ง€ ์•Š์•„์š”.
โ€ข ๋ณต๊ตฌ ํ›„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์—ฐ๊ฒฐ ์„ค์ •(์—”๋“œํฌ์ธํŠธ, ๋งˆ์šดํŠธ ํฌ์ธํŠธ ๋“ฑ)์„ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•ด์š”.
โ€ข ๋ณต๊ตฌ ํ…Œ์ŠคํŠธ๋ฅผ ์ •๊ธฐ์ ์œผ๋กœ ํ•ด์•ผ ํ•ด์š”! ๋ฐฑ์—…๋งŒ ํ•˜๊ณ  ๋ณต๊ตฌ ํ…Œ์ŠคํŠธ ์•ˆ ํ•˜๋ฉด ์ง„์งœ ํ•„์š”ํ•  ๋•Œ ๋‹นํ™ฉํ•จ ใ…‹ใ…‹

๐Ÿ’ฐ AWS Backup ๋น„์šฉ ๊ตฌ์กฐ ์ดํ•ดํ•˜๊ธฐ ๐ŸŒก๏ธ ์›œ ์Šคํ† ๋ฆฌ์ง€ (Warm Storage) ์ž์ฃผ ์ ‘๊ทผํ•˜๋Š” ๋ฐฑ์—… ๋น ๋ฅธ ๋ณต๊ตฌ ๊ฐ€๋Šฅ $0.05 /GB/์›” (์„œ์šธ ๋ฆฌ์ „ ๊ธฐ์ค€) EBS, RDS, EFS ๋“ฑ ๊ธฐ๋ณธ ์ €์žฅ ๋ฐฉ์‹ โ„๏ธ ์ฝœ๋“œ ์Šคํ† ๋ฆฌ์ง€ (Cold Storage) ์žฅ๊ธฐ ๋ณด๊ด€์šฉ ๋ฐฑ์—… ๋ณต๊ตฌ ์‹œ ์ถ”๊ฐ€ ๋น„์šฉ $0.01 /GB/์›” (์„œ์šธ ๋ฆฌ์ „ ๊ธฐ์ค€) EFS, DynamoDB ๋“ฑ ์ง€์› ์„œ๋น„์Šค ์ œํ•œ์  โ™ป๏ธ ๋ณต๊ตฌ ๋น„์šฉ (Restore) ๋ณต๊ตฌ ์‹œ ๋ฐœ์ƒ ๋น„์šฉ ๋ฆฌ์†Œ์Šค ํƒ€์ž…๋ณ„ ์ƒ์ด ๋ฌด๋ฃŒ~์œ ๋ฃŒ ์„œ๋น„์Šค๋ณ„ ์ƒ์ด EBS ๋ณต๊ตฌ: ๋ฌด๋ฃŒ ์ฝœ๋“œโ†’์›œ ์ „ํ™˜ ๋น„์šฉ ๋ฐœ์ƒ ๐Ÿ’ก ๋น„์šฉ ์ตœ์ ํ™” ์ „๋žต ์ตœ๊ทผ 7์ผ: ์›œ ์Šคํ† ๋ฆฌ์ง€ ์œ ์ง€ โ†’ 30์ผ ์ดํ›„: ์ฝœ๋“œ ์Šคํ† ๋ฆฌ์ง€ ์ „ํ™˜ โ†’ 1๋…„ ์ดํ›„: ์ž๋™ ์‚ญ์ œ Lifecycle ์ •์ฑ…์œผ๋กœ ์ž๋™ํ™”ํ•˜๋ฉด ๋น„์šฉ์„ ์ตœ๋Œ€ 80%๊นŒ์ง€ ์ ˆ๊ฐ ๊ฐ€๋Šฅ!

๐Ÿ’ฐ AWS Backup ๋น„์šฉ ์ตœ์ ํ™” ์ „๋žต

๋ฐฑ์—… ์ž˜ ์„ค์ •ํ–ˆ๋Š”๋ฐ ๋น„์šฉ ํญํƒ„ ๋งž์œผ๋ฉด ์•ˆ ๋˜์ž–์•„์š” ใ…‹ใ…‹ ๋น„์šฉ ๊ตฌ์กฐ๋ฅผ ์ดํ•ดํ•˜๊ณ  ์ตœ์ ํ™”ํ•ด๋ด์š”!

๐Ÿ“Š ๋น„์šฉ ๋ฐœ์ƒ ์š”์†Œ

๋น„์šฉ ํ•ญ๋ชฉ์„ค๋ช…์ ˆ๊ฐ ๋ฐฉ๋ฒ•
๋ฐฑ์—… ์Šคํ† ๋ฆฌ์ง€ (์›œ)๋ฐฑ์—… ๋ฐ์ดํ„ฐ ์ €์žฅ ๋น„์šฉ (GB/์›”)Lifecycle์œผ๋กœ ์ฝœ๋“œ ์ „ํ™˜
๋ฐฑ์—… ์Šคํ† ๋ฆฌ์ง€ (์ฝœ๋“œ)์žฅ๊ธฐ ๋ณด๊ด€ ๋น„์šฉ (์›œ์˜ ์•ฝ 1/5)์žฅ๊ธฐ ๋ณด๊ด€ ๋ฐ์ดํ„ฐ์— ํ™œ์šฉ
ํฌ๋กœ์Šค ๋ฆฌ์ „ ์ „์†ก๋‹ค๋ฅธ ๋ฆฌ์ „์œผ๋กœ ๋ณต์‚ฌ ์‹œ ๋ฐ์ดํ„ฐ ์ „์†ก ๋น„์šฉ๊ผญ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋งŒ ๋ณต์‚ฌ
๋ณต๊ตฌ ๋น„์šฉ์ฝœ๋“œ ์Šคํ† ๋ฆฌ์ง€์—์„œ ๋ณต๊ตฌ ์‹œ ์ถ”๊ฐ€ ๋น„์šฉ์ž์ฃผ ๋ณต๊ตฌํ•˜๋Š” ๋ฐ์ดํ„ฐ๋Š” ์›œ ์œ ์ง€
AWS Backup Audit Manager๊ฐ์‚ฌ ๋ฆฌํฌํŠธ ์ƒ์„ฑ ๋น„์šฉํ•„์š”ํ•œ ๋ฆฌํฌํŠธ๋งŒ ์ƒ์„ฑ

๐ŸŽฏ Lifecycle ์ •์ฑ…์œผ๋กœ ๋น„์šฉ ์ตœ์ ํ™”

# ๋น„์šฉ ์ตœ์ ํ™”๋œ Lifecycle ์„ค์ • ์˜ˆ์‹œ
{
  "Lifecycle": {
    "MoveToColdStorageAfterDays": 30,  // 30์ผ ํ›„ ์ฝœ๋“œ ์Šคํ† ๋ฆฌ์ง€๋กœ ์ด๋™
    "DeleteAfterDays": 365             // 1๋…„ ํ›„ ์ž๋™ ์‚ญ์ œ
  }
}

# ๊ณ„์ธต๋ณ„ ๋ณด์กด ์ „๋žต ์˜ˆ์‹œ
# Rule 1: ๋งค์ผ ๋ฐฑ์—… - 7์ผ ๋ณด๊ด€ (์›œ)
# Rule 2: ๋งค์ฃผ ๋ฐฑ์—… - 30์ผ ํ›„ ์ฝœ๋“œ ์ „ํ™˜, 90์ผ ๋ณด๊ด€
# Rule 3: ๋งค์›” ๋ฐฑ์—… - 30์ผ ํ›„ ์ฝœ๋“œ ์ „ํ™˜, 1๋…„ ๋ณด๊ด€
# Rule 4: ๋งค๋…„ ๋ฐฑ์—… - 30์ผ ํ›„ ์ฝœ๋“œ ์ „ํ™˜, 7๋…„ ๋ณด๊ด€ (์ปดํ”Œ๋ผ์ด์–ธ์Šค์šฉ)
โœ… ๋น„์šฉ ์ ˆ๊ฐ ๊ฟ€ํŒ:
โ€ข ํƒœ๊ทธ๋ฅผ ํ™œ์šฉํ•ด์„œ ์ค‘์š”๋„์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ๋ณด์กด ์ •์ฑ… ์ ์šฉ
โ€ข ๊ฐœ๋ฐœ/ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์€ ์งง์€ ๋ณด์กด ๊ธฐ๊ฐ„ ์„ค์ • (7์ผ ์ •๋„๋ฉด ์ถฉ๋ถ„)
โ€ข AWS Cost Explorer์—์„œ "AWS Backup" ์„œ๋น„์Šค ํ•„ํ„ฐ๋กœ ๋ฐฑ์—… ๋น„์šฉ๋งŒ ๋”ฐ๋กœ ๋ชจ๋‹ˆํ„ฐ๋ง
โ€ข ๋ถˆํ•„์š”ํ•œ ์ˆ˜๋™ ๋ฐฑ์—…(On-demand backup)์ด ์Œ“์ด์ง€ ์•Š๋„๋ก ์ฃผ๊ธฐ์ ์œผ๋กœ ์ •๋ฆฌ

๐Ÿ“Š AWS Backup Audit Manager - ์ปดํ”Œ๋ผ์ด์–ธ์Šค ์ž๋™ํ™”

๊ธˆ์œต, ์˜๋ฃŒ, ๊ณต๊ณต ๋ถ„์•ผ์—์„œ ์ผํ•˜๋Š” ๋ถ„๋“ค์€ ์ด ๊ธฐ๋Šฅ์ด ์ง„์งœ ์œ ์šฉํ•ด์š”. AWS Backup Audit Manager๋Š” ๋ฐฑ์—… ์ •์ฑ… ์ค€์ˆ˜ ์—ฌ๋ถ€๋ฅผ ์ž๋™์œผ๋กœ ํ‰๊ฐ€ํ•˜๊ณ  ๋ฆฌํฌํŠธ๋ฅผ ์ƒ์„ฑํ•ด์ค˜์š”.

๐Ÿ” ์ฃผ์š” ๊ธฐ๋Šฅ

๐Ÿ“‹ Backup Audit Manager ํ•ต์‹ฌ ๊ธฐ๋Šฅ:
โ€ข Backup Controls: ๋ฐฑ์—… ์ •์ฑ… ์ค€์ˆ˜ ์—ฌ๋ถ€๋ฅผ ์ฒดํฌํ•˜๋Š” ๊ทœ์น™ (์˜ˆ: "๋ชจ๋“  RDS๋Š” 7์ผ ์ด์ƒ ๋ฐฑ์—… ๋ณด๊ด€ํ•ด์•ผ ํ•จ")
โ€ข Backup Frameworks: ์—ฌ๋Ÿฌ Control์„ ๋ฌถ์–ด์„œ ๊ด€๋ฆฌํ•˜๋Š” ๋‹จ์œ„
โ€ข Backup Reports: ์ผ๋ณ„/์ฃผ๋ณ„ ์ปดํ”Œ๋ผ์ด์–ธ์Šค ๋ฆฌํฌํŠธ ์ž๋™ ์ƒ์„ฑ โ†’ S3๋กœ ์ „์†ก
โ€ข AWS Config ์—ฐ๋™: ๋ฆฌ์†Œ์Šค ๋ณ€๊ฒฝ ์ด๋ ฅ๊ณผ ์—ฐ๊ณ„ํ•œ ๊ฐ์‚ฌ ์ถ”์ 

๐Ÿ’ป Backup Framework ์ƒ์„ฑ ์˜ˆ์‹œ

# Backup Framework ์ƒ์„ฑ
aws backup create-framework \
  --framework-name "compliance-framework" \
  --framework-controls '[
    {
      "ControlName": "BACKUP_RECOVERY_POINT_MINIMUM_RETENTION_CHECK",
      "ControlInputParameters": [
        {
          "ParameterName": "requiredRetentionDays",
          "ParameterValue": "35"
        }
      ]
    },
    {
      "ControlName": "BACKUP_PLAN_MIN_FREQUENCY_AND_MIN_RETENTION_CHECK",
      "ControlInputParameters": [
        {
          "ParameterName": "requiredFrequencyUnit",
          "ParameterValue": "days"
        },
        {
          "ParameterName": "requiredFrequencyValue",
          "ParameterValue": "1"
        },
        {
          "ParameterName": "requiredRetentionDays",
          "ParameterValue": "35"
        }
      ]
    }
  ]'

๐Ÿ“ˆ ๊ธฐ๋ณธ ์ œ๊ณต Control ๋ชฉ๋ก

Control ์ด๋ฆ„์ฒดํฌ ๋‚ด์šฉ
BACKUP_RECOVERY_POINT_MINIMUM_RETENTION_CHECK์ตœ์†Œ ๋ณด์กด ๊ธฐ๊ฐ„ ์ค€์ˆ˜ ์—ฌ๋ถ€
BACKUP_PLAN_MIN_FREQUENCY_AND_MIN_RETENTION_CHECK์ตœ์†Œ ๋ฐฑ์—… ๋นˆ๋„ ๋ฐ ๋ณด์กด ๊ธฐ๊ฐ„
BACKUP_RECOVERY_POINT_ENCRYPTED๋ฐฑ์—… ์•”ํ˜ธํ™” ์—ฌ๋ถ€
BACKUP_RESOURCES_PROTECTED_BY_BACKUP_PLAN๋ฆฌ์†Œ์Šค๊ฐ€ ๋ฐฑ์—… ๊ณ„ํš์— ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€
BACKUP_RECOVERY_POINT_MANUAL_DELETION_DISABLED์ˆ˜๋™ ์‚ญ์ œ ๋ฐฉ์ง€ ์„ค์ • ์—ฌ๋ถ€

๐Ÿค– Terraform์œผ๋กœ AWS Backup ์ธํ”„๋ผ ์ฝ”๋“œํ™”

DevOps ๊ด€์ ์—์„œ ๋ฐฑ์—… ์„ค์ •๋„ IaC(Infrastructure as Code)๋กœ ๊ด€๋ฆฌํ•ด์•ผ ํ•ด์š”! Terraform์œผ๋กœ AWS Backup์„ ์ฝ”๋“œํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ด๋ด์š”. ์žฌ๋Šฅ๋„ท์—์„œ๋„ ์ด๋Ÿฐ DevOps ์ž๋™ํ™” ๊ด€๋ จ ์žฌ๋Šฅ์„ ๊ฑฐ๋ž˜ํ•˜๋Š” ๋ถ„๋“ค์ด ๋งŽ๋”๋ผ๊ณ ์š” ๐Ÿ˜Š

# main.tf - AWS Backup ์ „์ฒด ๊ตฌ์„ฑ

# Backup Vault ์ƒ์„ฑ
resource "aws_backup_vault" "main" {
  name        = "production-backup-vault"
  kms_key_arn = aws_kms_key.backup.arn

  tags = {
    Environment = "production"
    ManagedBy   = "terraform"
  }
}

# KMS ํ‚ค ์ƒ์„ฑ (๋ฐฑ์—… ์•”ํ˜ธํ™”์šฉ)
resource "aws_kms_key" "backup" {
  description             = "KMS key for AWS Backup"
  deletion_window_in_days = 7
  enable_key_rotation     = true
}

# Backup Plan ์ƒ์„ฑ
resource "aws_backup_plan" "main" {
  name = "production-backup-plan"

  rule {
    rule_name         = "daily-backup"
    target_vault_name = aws_backup_vault.main.name
    schedule          = "cron(0 17 * * ? *)"  # KST 02:00

    start_window      = 60   # ๋ถ„
    completion_window = 180  # ๋ถ„

    lifecycle {
      cold_storage_after = 30   # 30์ผ ํ›„ ์ฝœ๋“œ ์Šคํ† ๋ฆฌ์ง€
      delete_after       = 365  # 1๋…„ ํ›„ ์‚ญ์ œ
    }

    copy_action {
      destination_vault_arn = "arn:aws:backup:us-east-1:${data.aws_caller_identity.current.account_id}:backup-vault:dr-vault"

      lifecycle {
        delete_after = 90
      }
    }
  }

  rule {
    rule_name         = "weekly-backup"
    target_vault_name = aws_backup_vault.main.name
    schedule          = "cron(0 17 ? * SUN *)"  # ๋งค์ฃผ ์ผ์š”์ผ KST 02:00

    lifecycle {
      cold_storage_after = 30
      delete_after       = 2555  # 7๋…„ ๋ณด๊ด€ (์ปดํ”Œ๋ผ์ด์–ธ์Šค)
    }
  }

  tags = {
    Environment = "production"
  }
}

# IAM Role for Backup
resource "aws_iam_role" "backup" {
  name = "aws-backup-service-role"

  assume_role_policy = jsonencode({
    Version = "2012-10-17"
    Statement = [
      {
        Action = "sts:AssumeRole"
        Effect = "Allow"
        Principal = {
          Service = "backup.amazonaws.com"
        }
      }
    ]
  })
}

resource "aws_iam_role_policy_attachment" "backup_policy" {
  role       = aws_iam_role.backup.name
  policy_arn = "arn:aws:iam::aws:policy/service-role/AWSBackupServiceRolePolicyForBackup"
}

resource "aws_iam_role_policy_attachment" "restore_policy" {
  role       = aws_iam_role.backup.name
  policy_arn = "arn:aws:iam::aws:policy/service-role/AWSBackupServiceRolePolicyForRestores"
}

# Backup Selection (ํƒœ๊ทธ ๊ธฐ๋ฐ˜)
resource "aws_backup_selection" "main" {
  name         = "production-resources"
  iam_role_arn = aws_iam_role.backup.arn
  plan_id      = aws_backup_plan.main.id

  selection_tag {
    type  = "STRINGEQUALS"
    key   = "Backup"
    value = "true"
  }
}

# Vault Lock (Governance ๋ชจ๋“œ)
resource "aws_backup_vault_lock_configuration" "main" {
  backup_vault_name   = aws_backup_vault.main.name
  changeable_for_days = 3
  max_retention_days  = 1200
  min_retention_days  = 7
}
โœ… Terraform ํŒ: aws_backup_vault_lock_configuration์—์„œ changeable_for_days๋ฅผ ์ƒ๋žตํ•˜๋ฉด ์ฆ‰์‹œ Compliance ๋ชจ๋“œ๊ฐ€ ๋ผ์„œ Terraform์œผ๋กœ๋„ ์‚ญ์ œ/์ˆ˜์ •์ด ๋ถˆ๊ฐ€๋Šฅํ•ด์ ธ์š”. ์ฒ˜์Œ์—” ๋ฐ˜๋“œ์‹œ Governance ๋ชจ๋“œ๋กœ ํ…Œ์ŠคํŠธํ•˜์„ธ์š”!

๐Ÿšจ CloudWatch + SNS๋กœ ๋ฐฑ์—… ๋ชจ๋‹ˆํ„ฐ๋ง ์•Œ๋ฆผ ์„ค์ •

๋ฐฑ์—…์ด ์‹คํŒจํ•ด๋„ ๋ชจ๋ฅด๋ฉด ์†Œ์šฉ์—†์ž–์•„์š”! ๋ฐฑ์—… ์‹คํŒจ ์‹œ ์ฆ‰์‹œ ์•Œ๋ฆผ์„ ๋ฐ›๋„๋ก ์„ค์ •ํ•ด๋ด์š”.

๐Ÿ“ข EventBridge + SNS ์•Œ๋ฆผ ์„ค์ •

# EventBridge Rule - ๋ฐฑ์—… ์‹คํŒจ ๊ฐ์ง€
aws events put-rule \
  --name "backup-failure-alert" \
  --event-pattern '{
    "source": ["aws.backup"],
    "detail-type": ["Backup Job State Change"],
    "detail": {
      "state": ["FAILED", "ABORTED", "EXPIRED"]
    }
  }' \
  --state ENABLED

# SNS ํ† ํ”ฝ ARN์„ ํƒ€๊ฒŸ์œผ๋กœ ์„ค์ •
aws events put-targets \
  --rule "backup-failure-alert" \
  --targets '[
    {
      "Id": "backup-sns-target",
      "Arn": "arn:aws:sns:ap-northeast-2:123456789012:backup-alerts",
      "InputTransformer": {
        "InputPathsMap": {
          "jobId": "$.detail.backupJobId",
          "resourceArn": "$.detail.resourceArn",
          "state": "$.detail.state",
          "statusMessage": "$.detail.statusMessage"
        },
        "InputTemplate": "\"๋ฐฑ์—… ์‹คํŒจ ์•Œ๋ฆผ! Job ID: <jobId>, ๋ฆฌ์†Œ์Šค: <resourceArn>, ์ƒํƒœ: <state>, ๋ฉ”์‹œ์ง€: <statusMessage>\""
      }
    }
  ]'

๐Ÿ“Š CloudWatch ๋Œ€์‹œ๋ณด๋“œ๋กœ ๋ฐฑ์—… ํ˜„ํ™ฉ ๋ชจ๋‹ˆํ„ฐ๋ง

AWS Backup์€ ์ž๋™์œผ๋กœ CloudWatch ๋ฉ”ํŠธ๋ฆญ์„ ์ƒ์„ฑํ•ด์š”. ์ฃผ์š” ๋ฉ”ํŠธ๋ฆญ๋“ค์„ ์•Œ์•„๋ด์š”:

๋ฉ”ํŠธ๋ฆญ ์ด๋ฆ„์„ค๋ช…๊ถŒ์žฅ ์•Œ๋žŒ ์กฐ๊ฑด
NumberOfBackupJobsCompleted์™„๋ฃŒ๋œ ๋ฐฑ์—… ์ž‘์—… ์ˆ˜์˜ˆ์ƒ๋ณด๋‹ค ๋‚ฎ์„ ๋•Œ
NumberOfBackupJobsFailed์‹คํŒจํ•œ ๋ฐฑ์—… ์ž‘์—… ์ˆ˜1 ์ด์ƒ์ผ ๋•Œ
NumberOfRestoreJobsCompleted์™„๋ฃŒ๋œ ๋ณต๊ตฌ ์ž‘์—… ์ˆ˜๋ชจ๋‹ˆํ„ฐ๋ง์šฉ
NumberOfRestoreJobsFailed์‹คํŒจํ•œ ๋ณต๊ตฌ ์ž‘์—… ์ˆ˜1 ์ด์ƒ์ผ ๋•Œ

๐ŸŽฏ ์‹ค๋ฌด์—์„œ ์ž์ฃผ ํ•˜๋Š” ์‹ค์ˆ˜ & ๋ฒ ์ŠคํŠธ ํ”„๋ž™ํ‹ฐ์Šค

์ด๋ก ์€ ๋‹ค ์•Œ๊ฒ ๋Š”๋ฐ ์‹ค๋ฌด์—์„œ ์‚ฝ์งˆํ•˜๋Š” ํฌ์ธํŠธ๋“ค์ด ์žˆ์–ด์š” ใ…‹ใ…‹ ๋ฏธ๋ฆฌ ์•Œ๊ณ  ํ”ผํ•ด๊ฐ€๋ด์š”!

โŒ ํ”ํ•œ ์‹ค์ˆ˜๋“ค

โš ๏ธ ์‹ค์ˆ˜ 1: ๋ณต๊ตฌ ํ…Œ์ŠคํŠธ๋ฅผ ์•ˆ ํ•จ
๋ฐฑ์—…์€ ์—ด์‹ฌํžˆ ์„ค์ •ํ•ด๋†“๊ณ  ๋ณต๊ตฌ ํ…Œ์ŠคํŠธ๋ฅผ ํ•œ ๋ฒˆ๋„ ์•ˆ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์•„์š”. ์‹ค์ œ ์žฅ์•  ์ƒํ™ฉ์—์„œ ๋ณต๊ตฌ๊ฐ€ ์•ˆ ๋˜๋ฉด ๊ทธ๋•Œ ๊ฐ€์„œ ๋‹นํ™ฉํ•˜๊ฒŒ ๋ผ์š”. ๋ถ„๊ธฐ๋ณ„ ๋ณต๊ตฌ ๋“œ๋ฆด(Restore Drill)์„ ๋ฐ˜๋“œ์‹œ ์‹ค์‹œํ•˜์„ธ์š”!
โš ๏ธ ์‹ค์ˆ˜ 2: IAM ๊ถŒํ•œ ์„ค์ • ์˜ค๋ฅ˜
AWS Backup ์„œ๋น„์Šค ์—ญํ• ์— ํ•„์š”ํ•œ ๊ถŒํ•œ์ด ์—†์œผ๋ฉด ๋ฐฑ์—…์ด ์กฐ์šฉํžˆ ์‹คํŒจํ•ด์š”. AWSBackupServiceRolePolicyForBackup๊ณผ AWSBackupServiceRolePolicyForRestores ์ •์ฑ…์„ ๋ฐ˜๋“œ์‹œ ๋ถ™์—ฌ์•ผ ํ•ด์š”.
โš ๏ธ ์‹ค์ˆ˜ 3: ํƒ€์ž„์กด ํ˜ผ๋™
cron ํ‘œํ˜„์‹์€ UTC ๊ธฐ์ค€์ด์—์š”! KST๋กœ ์ƒˆ๋ฒฝ 2์‹œ์— ๋ฐฑ์—…ํ•˜๋ ค๋ฉด UTC 17์‹œ(์ „๋‚ )๋กœ ์„ค์ •ํ•ด์•ผ ํ•ด์š”. ์ด๊ฑฐ ๋ชจ๋ฅด๊ณ  ๋‚ฎ์— ๋ฐฑ์—… ๋Œ๋ฆฌ๋Š” ํŒ€ ์ง„์งœ ๋งŽ์•„์š” ใ…‹ใ…‹
โš ๏ธ ์‹ค์ˆ˜ 4: ๋ฐฑ์—… ์™„๋ฃŒ ์‹œ๊ฐ„ ๋ฏธ๊ณ ๋ ค
StartWindowMinutes์™€ CompletionWindowMinutes๋ฅผ ๋„ˆ๋ฌด ์งง๊ฒŒ ์„ค์ •ํ•˜๋ฉด ๋ฐฑ์—…์ด ์‹œ์ž‘์€ ๋์ง€๋งŒ ์™„๋ฃŒ ์ „์— ํƒ€์ž„์•„์›ƒ์œผ๋กœ ์‹คํŒจํ•ด์š”. ๋Œ€์šฉ๋Ÿ‰ DB๋Š” ์ถฉ๋ถ„ํ•œ ์™„๋ฃŒ ์‹œ๊ฐ„์„ ์ค˜์•ผ ํ•ด์š”.

โœ… ๋ฒ ์ŠคํŠธ ํ”„๋ž™ํ‹ฐ์Šค

โœ… BP 1: 3-2-1 ๋ฐฑ์—… ๊ทœ์น™ ์ ์šฉ
โ€ข 3๊ฐœ์˜ ๋ฐฑ์—… ๋ณต์‚ฌ๋ณธ ์œ ์ง€
โ€ข 2๊ฐœ์˜ ์„œ๋กœ ๋‹ค๋ฅธ ๋ฏธ๋””์–ด/์Šคํ† ๋ฆฌ์ง€ ํƒ€์ž…
โ€ข 1๊ฐœ๋Š” ์˜คํ”„์‚ฌ์ดํŠธ(๋‹ค๋ฅธ ๋ฆฌ์ „ ๋˜๋Š” ๊ณ„์ •)
AWS Backup์˜ ํฌ๋กœ์Šค ๋ฆฌ์ „ ๋ณต์‚ฌ๋กœ ์ด ๊ทœ์น™์„ ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์–ด์š”!
โœ… BP 2: ํƒœ๊ทธ ์ „๋žต ์ˆ˜๋ฆฝ
๋ชจ๋“  ๋ฆฌ์†Œ์Šค์— ์ผ๊ด€๋œ ํƒœ๊ทธ ์ •์ฑ…์„ ์ ์šฉํ•˜์„ธ์š”. ์˜ˆ:
โ€ข Backup=true/false: ๋ฐฑ์—… ๋Œ€์ƒ ์—ฌ๋ถ€
โ€ข BackupTier=gold/silver/bronze: ๋ฐฑ์—… ์ค‘์š”๋„ (๋ณด์กด ๊ธฐ๊ฐ„ ์ฐจ๋“ฑ)
โ€ข Environment=prod/staging/dev: ํ™˜๊ฒฝ๋ณ„ ๋‹ค๋ฅธ ์ •์ฑ… ์ ์šฉ
โœ… BP 3: ๋ฐฑ์—… ์•”ํ˜ธํ™” ํ•„์ˆ˜
๊ธฐ๋ณธ์ ์œผ๋กœ AWS Backup์€ ์„œ๋น„์Šค ๊ด€๋ฆฌ ํ‚ค๋กœ ์•”ํ˜ธํ™”ํ•˜์ง€๋งŒ, ๊ณ ๊ฐ ๊ด€๋ฆฌ KMS ํ‚ค(CMK)๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฑธ ๊ถŒ์žฅํ•ด์š”. ํ‚ค ๋กœํ…Œ์ด์…˜๋„ ํ™œ์„ฑํ™”ํ•˜์„ธ์š”!
โœ… BP 4: ์•Œ๋ฆผ ์„ค์ • ํ•„์ˆ˜
๋ฐฑ์—… ์‹คํŒจ ์‹œ ์ฆ‰์‹œ ์•Œ๋ฆผ์„ ๋ฐ›๋„๋ก EventBridge + SNS ์„ค์ •์„ ๋ฐ˜๋“œ์‹œ ํ•ด๋‘์„ธ์š”. Slack ์—ฐ๋™๋„ ๊ฐ€๋Šฅํ•ด์š”!
โœ… BP 5: ๋น„์šฉ ๋ชจ๋‹ˆํ„ฐ๋ง
AWS Cost Explorer์—์„œ ๋ฐฑ์—… ๋น„์šฉ์„ ์ฃผ๊ธฐ์ ์œผ๋กœ ํ™•์ธํ•˜๊ณ , ๋ถˆํ•„์š”ํ•˜๊ฒŒ ์Œ“์ธ ์ˆ˜๋™ ๋ฐฑ์—…์ด๋‚˜ ๋งŒ๋ฃŒ๋œ Recovery Point๋ฅผ ์ •๋ฆฌํ•˜์„ธ์š”.

๐Ÿ”— AWS Backup๊ณผ ๋‹ค๋ฅธ ์„œ๋น„์Šค ์—ฐ๋™

AWS Backup์€ ๋‹จ๋…์œผ๋กœ๋„ ๊ฐ•๋ ฅํ•˜์ง€๋งŒ, ๋‹ค๋ฅธ ์„œ๋น„์Šค์™€ ์—ฐ๋™ํ•˜๋ฉด ๋” ๊ฐ•๋ ฅํ•ด์ ธ์š”!

๐Ÿ”ง ์ฃผ์š” ์—ฐ๋™ ์„œ๋น„์Šค

์—ฐ๋™ ์„œ๋น„์Šคํ™œ์šฉ ๋ฐฉ๋ฒ•
AWS Organizations๋ฉ€ํ‹ฐ ๊ณ„์ • ํ™˜๊ฒฝ์—์„œ ์ค‘์•™ ์ง‘์ค‘์‹ ๋ฐฑ์—… ์ •์ฑ… ๊ด€๋ฆฌ
AWS Config๋ฐฑ์—… ์ •์ฑ… ์ค€์ˆ˜ ์—ฌ๋ถ€ ์ง€์†์  ํ‰๊ฐ€ ๋ฐ ๊ฐ์‚ฌ ์ถ”์ 
AWS CloudTrail๋ฐฑ์—…/๋ณต๊ตฌ API ํ˜ธ์ถœ ๋กœ๊น… ๋ฐ ๊ฐ์‚ฌ
Amazon EventBridge๋ฐฑ์—… ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ์ž๋™ํ™” (์‹คํŒจ ์•Œ๋ฆผ, ์ž๋™ ๋ณต๊ตฌ ํŠธ๋ฆฌ๊ฑฐ ๋“ฑ)
AWS Lambda๋ฐฑ์—… ์™„๋ฃŒ ํ›„ ์ž๋™ํ™” ์ž‘์—… (์•Œ๋ฆผ, ๊ฒ€์ฆ, ํƒœ๊ทธ ์—…๋ฐ์ดํŠธ ๋“ฑ)
AWS SNS๋ฐฑ์—… ์ƒํƒœ ์•Œ๋ฆผ (์ด๋ฉ”์ผ, SMS, Slack ๋“ฑ)
AWS KMS๋ฐฑ์—… ๋ฐ์ดํ„ฐ ์•”ํ˜ธํ™” ํ‚ค ๊ด€๋ฆฌ
AWS IAM์„ธ๋ฐ€ํ•œ ์ ‘๊ทผ ์ œ์–ด ๋ฐ ๊ถŒํ•œ ๊ด€๋ฆฌ

๐Ÿค– Lambda๋กœ ๋ฐฑ์—… ์™„๋ฃŒ ํ›„ ์ž๋™ ๊ฒ€์ฆ

# Lambda ํ•จ์ˆ˜ - ๋ฐฑ์—… ์™„๋ฃŒ ํ›„ Recovery Point ๊ฒ€์ฆ
import boto3
import json

def lambda_handler(event, context):
    backup_client = boto3.client('backup')
    
    # EventBridge์—์„œ ์ „๋‹ฌ๋œ ๋ฐฑ์—… ์™„๋ฃŒ ์ด๋ฒคํŠธ
    job_id = event['detail']['backupJobId']
    recovery_point_arn = event['detail']['recoveryPointArn']
    
    # Recovery Point ์ƒํƒœ ํ™•์ธ
    response = backup_client.describe_recovery_point(
        BackupVaultName='production-backup-vault',
        RecoveryPointArn=recovery_point_arn
    )
    
    rp = response['RecoveryPoint']
    
    # ๊ฒ€์ฆ ๊ฒฐ๊ณผ ๋กœ๊น…
    print(f"Recovery Point ARN: {rp['RecoveryPointArn']}")
    print(f"Status: {rp['Status']}")
    print(f"Size: {rp.get('BackupSizeInBytes', 0) / (1024**3):.2f} GB")
    print(f"Encrypted: {rp.get('IsEncrypted', False)}")
    
    # ์•”ํ˜ธํ™” ์—ฌ๋ถ€ ์ฒดํฌ
    if not rp.get('IsEncrypted', False):
        # SNS ์•Œ๋ฆผ ๋ฐœ์†ก
        sns_client = boto3.client('sns')
        sns_client.publish(
            TopicArn='arn:aws:sns:ap-northeast-2:123456789012:backup-alerts',
            Subject='โš ๏ธ ๋ฐฑ์—… ์•”ํ˜ธํ™” ๋ฏธ์ ์šฉ ๊ฒฝ๊ณ ',
            Message=f'Recovery Point {recovery_point_arn}์ด ์•”ํ˜ธํ™”๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค!'
        )
    
    return {
        'statusCode': 200,
        'body': json.dumps('Validation completed')
    }

์ด๋Ÿฐ ์‹์œผ๋กœ ์žฌ๋Šฅ๋„ท ๊ฐ™์€ ํ”Œ๋žซํผ์—์„œ AWS ๋ฐฑ์—… ์ž๋™ํ™” ๊ตฌ์ถ• ์žฌ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ๋ถ„๋“ค๋„ ์ด Lambda + EventBridge ํŒจํ„ด์„ ๋งŽ์ด ํ™œ์šฉํ•˜๋”๋ผ๊ณ ์š” ๐Ÿ˜„


๐Ÿ“‹ ์„œ๋น„์Šค๋ณ„ ๋ฐฑ์—… ํŠน์ด์‚ฌํ•ญ ์ •๋ฆฌ

๊ฐ ์„œ๋น„์Šค๋งˆ๋‹ค ๋ฐฑ์—… ๋ฐฉ์‹์ด๋‚˜ ์ œ์•ฝ์‚ฌํ•ญ์ด ์กฐ๊ธˆ์”ฉ ๋‹ฌ๋ผ์š”. ํ—ท๊ฐˆ๋ฆฌ๋Š” ๋ถ€๋ถ„๋“ค์„ ์ •๋ฆฌํ•ด๋ดค์–ด์š”!

๐Ÿ–ฅ๏ธ EC2 ๋ฐฑ์—…

โ€ข AMI(Amazon Machine Image) ํ˜•ํƒœ๋กœ ๋ฐฑ์—…๋จ
โ€ข ์—ฐ๊ฒฐ๋œ EBS ๋ณผ๋ฅจ๋„ ํ•จ๊ป˜ ์Šค๋ƒ…์ƒท ์ƒ์„ฑ
โ€ข ์ธ์Šคํ„ด์Šค ์Šคํ† ์–ด(์ž„์‹œ ์Šคํ† ๋ฆฌ์ง€)๋Š” ๋ฐฑ์—… ์•ˆ ๋จ โš ๏ธ
โ€ข ๋ณต๊ตฌ ์‹œ ์ƒˆ EC2 ์ธ์Šคํ„ด์Šค๋กœ ์ƒ์„ฑ๋จ
โ€ข ๋ฐฑ์—… ์ค‘์—๋„ ์ธ์Šคํ„ด์Šค ์‹คํ–‰ ์ƒํƒœ ์œ ์ง€ (๋ฌด์ค‘๋‹จ)

๐Ÿ—ƒ๏ธ RDS ๋ฐฑ์—…

โ€ข RDS ์Šค๋ƒ…์ƒท ํ˜•ํƒœ๋กœ ๋ฐฑ์—…๋จ
โ€ข ์ž๋™ ๋ฐฑ์—…(Automated Backup)๊ณผ ๋ณ„๊ฐœ๋กœ ์ถ”๊ฐ€ ๋ฐฑ์—… ๊ฐ€๋Šฅ
โ€ข Multi-AZ ํ™˜๊ฒฝ์—์„œ๋Š” ์Šคํƒ ๋ฐ”์ด ์ธ์Šคํ„ด์Šค์—์„œ ๋ฐฑ์—… ์ˆ˜ํ–‰ (์„ฑ๋Šฅ ์˜ํ–ฅ ์ตœ์†Œํ™”)
โ€ข ๋ณต๊ตฌ ์‹œ ์ƒˆ DB ์ธ์Šคํ„ด์Šค๋กœ ์ƒ์„ฑ๋จ
โ€ข Aurora๋Š” ํด๋Ÿฌ์Šคํ„ฐ ์Šค๋ƒ…์ƒท์œผ๋กœ ๋ฐฑ์—…๋จ

โšก DynamoDB ๋ฐฑ์—…

โ€ข On-demand ๋ฐฑ์—…๊ณผ PITR(Point-in-Time Recovery) ๋‘ ๊ฐ€์ง€ ๋ฐฉ์‹
โ€ข AWS Backup์€ On-demand ๋ฐฑ์—… ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘
โ€ข PITR์€ DynamoDB ์ž์ฒด ๊ธฐ๋Šฅ์œผ๋กœ ๋ณ„๋„ ์„ค์ • ํ•„์š”
โ€ข ๋ฐฑ์—… ์ค‘ ํ…Œ์ด๋ธ” ์„ฑ๋Šฅ์— ์˜ํ–ฅ ์—†์Œ (์„œ๋ฒ„๋ฆฌ์Šค ๋ฐฑ์—…)
โ€ข ์ฝœ๋“œ ์Šคํ† ๋ฆฌ์ง€ ์ „ํ™˜ ์ง€์›

๐Ÿ“ EFS ๋ฐฑ์—…

โ€ข EFS ํŒŒ์ผ ์‹œ์Šคํ…œ ์ „์ฒด๋ฅผ ๋ฐฑ์—…
โ€ข ์ฆ๋ถ„ ๋ฐฑ์—… ์ง€์› (๋ณ€๊ฒฝ๋œ ํŒŒ์ผ๋งŒ ๋ฐฑ์—…)
โ€ข ์ฝœ๋“œ ์Šคํ† ๋ฆฌ์ง€ ์ „ํ™˜ ์ง€์› (๋น„์šฉ ์ ˆ๊ฐ ํšจ๊ณผ ํผ)
โ€ข ๋ณต๊ตฌ ์‹œ ์ƒˆ EFS ํŒŒ์ผ ์‹œ์Šคํ…œ ๋˜๋Š” ๊ธฐ์กด ํŒŒ์ผ ์‹œ์Šคํ…œ์— ๋ณต๊ตฌ ์„ ํƒ ๊ฐ€๋Šฅ

๐Ÿชฃ S3 ๋ฐฑ์—…

โ€ข S3 ๋ฒ„ํ‚ท ๋ ˆ๋ฒจ ๋ฐฑ์—… ์ง€์› (2021๋…„๋ถ€ํ„ฐ)
โ€ข ๋ฒ„ํ‚ท ๋‚ด ๋ชจ๋“  ๊ฐ์ฒด๋ฅผ ๋ฐฑ์—…
โ€ข S3 ๋ฒ„์ „ ๊ด€๋ฆฌ์™€๋Š” ๋ณ„๊ฐœ์˜ ๊ธฐ๋Šฅ
โ€ข ๋ณต๊ตฌ ์‹œ ์›๋ณธ ๋ฒ„ํ‚ท ๋˜๋Š” ์ƒˆ ๋ฒ„ํ‚ท์œผ๋กœ ๋ณต๊ตฌ ๊ฐ€๋Šฅ
โ€ข ๋Œ€์šฉ๋Ÿ‰ ๋ฒ„ํ‚ท์€ ๋ฐฑ์—… ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆด ์ˆ˜ ์žˆ์Œ

๐ŸŽ“ ๋งˆ๋ฌด๋ฆฌ - AWS Backup ๋„์ž… ๋กœ๋“œ๋งต

์ž, ์ด์ œ AWS Backup์— ๋Œ€ํ•ด ๊ฝค ๋งŽ์ด ์•Œ๊ฒŒ ๋์ฃ ? ใ…‹ใ…‹ ์‹ค์ œ๋กœ ๋„์ž…ํ•  ๋•Œ ์–ด๋–ค ์ˆœ์„œ๋กœ ์ง„ํ–‰ํ•˜๋ฉด ์ข‹์„์ง€ ๋กœ๋“œ๋งต์„ ์ •๋ฆฌํ•ด๋ดค์–ด์š”!

1
ํ˜„ํ™ฉ ํŒŒ์•… (1์ฃผ)
ํ˜„์žฌ ์–ด๋–ค ๋ฆฌ์†Œ์Šค๊ฐ€ ์žˆ๋Š”์ง€, ๊ธฐ์กด ๋ฐฑ์—… ๋ฐฉ์‹์€ ์–ด๋–ค์ง€, RTO/RPO ์š”๊ตฌ์‚ฌํ•ญ์€ ๋ฌด์—‡์ธ์ง€ ํŒŒ์•…ํ•ด์š”.
2
ํƒœ๊ทธ ์ „๋žต ์ˆ˜๋ฆฝ (1์ฃผ)
๋ฐฑ์—… ๋Œ€์ƒ ์‹๋ณ„์„ ์œ„ํ•œ ํƒœ๊ทธ ์ •์ฑ…์„ ์ˆ˜๋ฆฝํ•˜๊ณ  ๊ธฐ์กด ๋ฆฌ์†Œ์Šค์— ํƒœ๊ทธ๋ฅผ ๋ถ™์—ฌ์š”.
3
ํŒŒ์ผ๋Ÿฟ ๊ตฌ์„ฑ (2์ฃผ)
๊ฐœ๋ฐœ/ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์—์„œ ๋จผ์ € AWS Backup์„ ์„ค์ •ํ•˜๊ณ  ๋ฐฑ์—…/๋ณต๊ตฌ๋ฅผ ํ…Œ์ŠคํŠธํ•ด์š”.
4
ํ”„๋กœ๋•์…˜ ์ ์šฉ (2์ฃผ)
๊ฒ€์ฆ๋œ ์„ค์ •์„ ํ”„๋กœ๋•์…˜์— ์ ์šฉํ•ด์š”. Terraform/CloudFormation์œผ๋กœ IaCํ™” ๊ถŒ์žฅ!
5
๋ชจ๋‹ˆํ„ฐ๋ง & ์•Œ๋ฆผ ์„ค์ • (1์ฃผ)
CloudWatch ๋Œ€์‹œ๋ณด๋“œ, EventBridge ์•Œ๋ฆผ, Audit Manager ์„ค์ •ํ•ด์š”.
6
๋ณต๊ตฌ ๋“œ๋ฆด ์‹ค์‹œ (๋ถ„๊ธฐ๋ณ„)
์ •๊ธฐ์ ์œผ๋กœ ๋ณต๊ตฌ ํ…Œ์ŠคํŠธ๋ฅผ ์‹ค์‹œํ•˜๊ณ  RTO๋ฅผ ์ธก์ •ํ•ด์š”. ๋ฌธ์„œํ™”๋„ ํ•„์ˆ˜!
๐ŸŽฏ ํ•ต์‹ฌ ์š”์•ฝ:
โ€ข AWS Backup = ์—ฌ๋Ÿฌ ์„œ๋น„์Šค ๋ฐฑ์—…์˜ ์ค‘์•™ ์ง‘์ค‘์‹ ๊ด€๋ฆฌ ํ”Œ๋žซํผ
โ€ข Backup Plan + Vault + Recovery Point + Selection 4๊ฐ€์ง€ ๊ฐœ๋…์ด ํ•ต์‹ฌ
โ€ข Vault Lock์œผ๋กœ ๋žœ์„ฌ์›จ์–ด ๋ฐฉ์–ด ๋ฐ ์ปดํ”Œ๋ผ์ด์–ธ์Šค ์ถฉ์กฑ
โ€ข ํฌ๋กœ์Šค ๋ฆฌ์ „/๊ณ„์ • ๋ณต์‚ฌ๋กœ ์ง„์ •ํ•œ DR ๊ตฌ์„ฑ ๊ฐ€๋Šฅ
โ€ข Lifecycle ์ •์ฑ…์œผ๋กœ ๋น„์šฉ ์ตœ์ ํ™” ํ•„์ˆ˜
โ€ข ๋ณต๊ตฌ ํ…Œ์ŠคํŠธ๋Š” ๋ฐ˜๋“œ์‹œ ์ •๊ธฐ์ ์œผ๋กœ! ๋ฐฑ์—…๋งŒ ํ•˜๊ณ  ๋ณต๊ตฌ ํ…Œ์ŠคํŠธ ์•ˆ ํ•˜๋ฉด ์˜๋ฏธ ์—†์Œ ใ…‹ใ…‹
๋Œ“๊ธ€ ์ž‘์„ฑ

์ด ๊ธ€์— ๋Œ€ํ•œ ์—ฌ๋Ÿฌ๋ถ„์˜ ์ƒ๊ฐ์„ ๋“ค๋ ค์ฃผ์„ธ์š”

๋Œ“๊ธ€ 0
๋Œ“๊ธ€์„ ๋ถˆ๋Ÿฌ์˜ค๋Š” ์ค‘์ž…๋‹ˆ๋‹ค.

์•„์ง ๋Œ“๊ธ€์ด ์—†์Šต๋‹ˆ๋‹ค.