๐Ÿ” AWS์—์„œ ๋ฉ€ํ‹ฐ ๊ณ„์ •์œผ๋กœ ์ „ํ™˜ํ•˜๋ฉด ๊นจ์ง€๋Š” 8๊ฐ€์ง€!

AWS Organizations๋กœ AWS ๋ฉ€ํ‹ฐ ๊ณ„์ •์œผ๋กœ ์ „ํ™˜ํ•  ๋•Œ, ์‹ค์ œ๋กœ ๋ฌด๋„ˆ์ง€๋Š” 8๊ฐ€์ง€ ๋ฌธ์ œ์™€ ์›์ธ ๊ทธ๋ฆฌ๊ณ  ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•๋“ค์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค.

:locked_with_key: 1. IAM Role, ์ž‘๋™ํ•  ์ค„ ์•Œ์•˜๋Š”๋ฐ ์•ˆ ๋œ๋‹ค (๊ทธ๋ฆฌ๊ณ  ์•„๋ฌด ๋ง๋„ ์•ˆ ํ•ด์ค€๋‹ค)

๊ฐœ๋ฐœ(Dev)๊ณผ ์Šคํ…Œ์ด์ง•(Staging)์— ๋˜‘๊ฐ™์€ Role + Policy๋ฅผ ์žฌ์‚ฌ์šฉํ•œ๋‹ค. ๊ฐœ๋ฐœ์—์„œ๋Š” ์ž˜ ๋Œ์•„๊ฐ„๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์Šคํ…Œ์ด์ง•์—์„œ๋Š”? ํŽ‘. AccessDenied, ๋กœ๊ทธ๋Š” 0, ๊ทธ๋ฆฌ๊ณ  โ€œ๋˜‘๊ฐ™์ด ํ–ˆ๋Š”๋ฐ ์™œ?โ€๋ผ๋Š” 40๋ถ„์˜ ๋ฉ˜๋ถ•.

:red_question_mark: ์™œ ์ด๋Ÿฐ ์ผ์ด ์ƒ๊ธธ๊นŒ: Cross-account Trust Policy๋Š” ์ƒ๊ฐ๋ณด๋‹ค ํ›จ์”ฌ ๊นŒ๋‹ค๋กญ๋‹ค. Principal์ด ์ •ํ™•ํžˆ ํฌํ•จ๋˜์ง€ ์•Š๊ฑฐ๋‚˜, ๋‹ค๋ฅธ ๊ณ„์ •์˜ root๋ฅผ ๋น ๋œจ๋ฆฌ๋ฉด ๊ทธ Role์€ ์‚ฌ์‹ค์ƒ ์ž ๊ฒจ๋ฒ„๋ฆฐ๋‹ค. ๊ฒฝ๊ณ ๋„, ํžŒํŠธ๋„ ์—†๋‹ค.

:white_check_mark: ๊ณ ์น˜๋Š” ๋ฒ•:

  • sts:assume-role๋กœ ํ•ญ์ƒ Role ๊ฐ€์ •(assumption)์„ ์ˆ˜๋™ ํ…Œ์ŠคํŠธํ•  ๊ฒƒ
  • ๋ถ€ํŠธ์ŠคํŠธ๋žฉ ๋‹จ๊ณ„์—์„œ๋Š” Trust Policy๋ฅผ ์ตœ์†Œํ™”(์ œ์•ฝ์€ ๋‚˜์ค‘์— ์ถ”๊ฐ€)
  • ์ ‘๊ทผ ์ œ์–ด๋Š” ๊ณผ๋„ํ•œ ์กฐ๊ฑด ๋Œ€์‹  Tag + SCP๋กœ ๊ด€๋ฆฌํ•  ๊ฒƒ IAM Trust Policy๊ฐ€ ์‚ฌ๋žŒ์ด๋ผ๋ฉด? ๋‹น์‹  ์•ž์—์„œ๋Š” ์›ƒ๋‹ค๊ฐ€ ๋’ค์—์„œ๋Š” ์œ ๋ น์ฒ˜๋Ÿผ ์‚ฌ๋ผ์งˆ ๊ฑฐ๋‹ค.

:locked_with_key: 2. ๋ณ„๊ฒƒ ์•„๋‹ˆ์–ด ๋ณด์ด๋˜ SCP, ๋ชจ๋“  ๊ฑธ ๋ง์ณ๋ฒ„๋ฆฌ๋‹ค

Dev ํ™˜๊ฒฝ์—์„œ EC2๋งŒ ๋ชป ์“ฐ๊ฒŒ ํ•˜๋ ค๊ณ  SCP๋ฅผ ์ž‘์„ฑํ–ˆ๋‹ค. ์ข‹์•„ ๋ณด์ธ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๊ฐ‘์ž๊ธฐ ๊ฐœ๋ฐœ์ž๋“ค์ด ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ๋ชป ๋งŒ๋“ ๋‹ค. Lambda๋„ ์‹คํ–‰ ๋ถˆ๊ฐ€. ์‹ฌ์ง€์–ด CloudWatch๋„ ์—ด ์ˆ˜ ์—†๋‹ค.

:red_question_mark: ์™œ ์ด๋Ÿฐ ์ผ์ด ์ƒ๊ธธ๊นŒ: SCP๋Š” IAM์ด ์•„๋‹ˆ๋‹ค. ์ƒ์œ„ ๋ ˆ๋ฒจ์˜ โ€œ๊ฑฐ๋ถ€(veto)โ€๋‹ค. ์•ก์…˜ ํ•˜๋‚˜๋ฅผ ์• ๋งคํ•˜๊ฒŒ ๋ง‰์•„๋ฒ„๋ฆฌ๋ฉด, ์ˆ˜์‹ญ ๊ฐœ ์„œ๋น„์Šค๊ฐ€ ์—ฐ์‡„์ ์œผ๋กœ ๋‹ค์šด๋œ๋‹ค.

:white_check_mark: ํ”ผํ•˜๋Š” ๋ฐฉ๋ฒ•:

  • ํ•ญ์ƒ Sandbox ๊ณ„์ •์—์„œ ๋จผ์ € ํ…Œ์ŠคํŠธ
  • Access Analyzer๋กœ Policy ์˜ํ–ฅ ์‹œ๋ฎฌ๋ ˆ์ด์…˜
  • ํ˜น์‹œ(์•„๋‹ˆ ๊ฑฐ์˜ ๋ฐ˜๋“œ์‹œ) ์ž ๊ทธ๋”๋ผ๋„ ๋น ์ ธ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋Š” No-SCP โ€œ๋น„์ƒ ๊ณ„์ •โ€ ํ™•๋ณด SCP๋Š” ๋งˆ์น˜ ๋ฐฉํ™”๋ฒฝ ๊ทœ์น™์„ ์ง  ์  ์—†๋Š” ์‚ฌ๋žŒ์ด ๋””๋ฒ„๊น…๋„ ๋ชจ๋ฅธ ์ฑ„ ์ž‘์„ฑํ•œ ๊ฒƒ๊ณผ ๊ฐ™๋‹ค.

:locked_with_key: 3. ์ค‘์•™ ๋กœ๊ทธ, ์•„๋ฌด ๊ฒƒ๋„ ๊ธฐ๋กํ•˜์ง€ ์•Š๋Š”๋‹ค

๋ณด์•ˆ ๊ณ„์ •์— ์ค‘์•™ ๋กœ๊ทธ๋ฅผ ์—ฐ๊ฒฐํ–ˆ๋‹ค. ๊น”๋”ํ•˜๊ณ  ์ถ”์  ๊ฐ€๋Šฅํ•ด ๋ณด์—ฌ์•ผ ํ•œ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ํ”„๋กœ๋•์…˜์ด ๋ป—๋Š”๋‹ค. ๊ทธ๋Ÿฐ๋ฐโ€ฆ ๋กœ๊ทธ๋Š” ๋„์ฐฉํ•˜์ง€ ์•Š๋Š”๋‹ค. ์ด์ œ ๋‹น์‹ ์€ ๋ˆˆ์„ ๊ฐ€๋ฆฐ ์ฑ„ ๋””๋ฒ„๊น…ํ•ด์•ผ ํ•œ๋‹ค.

:red_question_mark: ์™œ ์ด๋Ÿฐ ์ผ์ด ์ƒ๊ธธ๊นŒ: Cross-account ๋กœ๊ทธ ์ „๋‹ฌ์€ ์ž๋™์ด ์•„๋‹ˆ๋‹ค. ๋‹ค์Œ์ด ํ•„์š”ํ•˜๋‹ค:

  • ๋กœ๊ทธ ๊ทธ๋ฃน ๊ถŒํ•œ
  • ์†ก์‹ ์ž๊ฐ€ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” S3 ๋ฒ„ํ‚ท ๊ถŒํ•œ
  • ๊ณ„์ • ๊ฐ„ ํผ๋ธ”๋ฆฌ์‹œ๊ฐ€ ๊ฐ€๋Šฅํ•œ IAM Role

:white_check_mark: ๊ณ ์น˜๋Š” ๋ฒ•:

  • Firehose๋ฅผ ์‚ฌ์šฉํ•ด ๋กœ๊ทธ๋ฅผ ๋ฒ„ํผ๋ง + ๊ณ„์ • ๊ฐ„ ์ „๋‹ฌ
  • logs.amazonaws.com์— S3 ๋ฒ„ํ‚ท ์“ฐ๊ธฐ ๊ถŒํ•œ ๋ถ€์—ฌ
  • ๊ฐ€์งœ ๋กœ๊ทธ๋กœ ๋ฐ˜๋“œ์‹œ ๊ฒ€์ฆ โ€” ์ ˆ๋Œ€ ๊ฐ€์ •ํ•˜์ง€ ๋ง ๊ฒƒ ๋กœ๊ทธ๊ฐ€ ๋„์ฐฉํ•˜์ง€ ์•Š์œผ๋ฉด, ๊ทธ๊ฑด Observability๊ฐ€ ์•„๋‹ˆ๋ผ ๊ทธ๋ƒฅ โ€œ๋А๋‚Œ(vibes)โ€์ผ ๋ฟ์ด๋‹ค.

:locked_with_key: 4. Secrets Manager๋Š” ์—ฌํ–‰์„ ํ•˜์ง€ ์•Š๋Š”๋‹ค

/prod/db/password์— ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ €์žฅํ–ˆ๋‹ค. ๋‹ค๋ฅธ ๊ณ„์ •์˜ Lambda๊ฐ€ ์ฝ์œผ๋ ค ํ•œ๋‹ค. ํŽ‘. AccessDenied.

:red_question_mark: ์™œ ์ด๋Ÿฐ ์ผ์ด ์ƒ๊ธธ๊นŒ: Secrets Manager๋Š” ๊ณ„์ • + ๋ฆฌ์ „ ๋‹จ์œ„๋กœ ์ œํ•œ๋œ๋‹ค. ๋. Cross-account ์ ‘๊ทผ? ์ง์ ‘ ๋ฌด๋Œ€๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค.

:white_check_mark: ์‚ด์•„๋‚จ๋Š” ๋ฒ•:

  • ํŒŒ์ดํ”„๋ผ์ธ์ด๋‚˜ ์ž๋™ํ™”๋กœ ๋น„๋ฐ€์„ ๋ณต์ œ (์ˆ˜๋™ ๋ณต์‚ฌ ๊ธˆ์ง€)
  • /account/env/service/... ํ˜•์‹์œผ๋กœ ํ‚ค Prefix ์„ค์ • (์ด๋ฆ„ ์ถฉ๋Œ ๋ฐฉ์ง€)
  • ๋ฆฌ์†Œ์Šค Policy๋ฅผ ์‚ฌ์šฉํ•ด ํŠน์ • ๊ณ„์ •์—์„œ ์ฝ์„ ์ˆ˜ ์žˆ๋„๋ก ๋ช…์‹œ ํ—ˆ์šฉ Secrets๋Š” ๊ธ€๋กœ๋ฒŒํ•˜์ง€ ์•Š๋‹ค. ํ•˜์ง€๋งŒ ๊ณ ํ†ต์€ ๊ธ€๋กœ๋ฒŒํ•˜๋‹ค.

:locked_with_key: 5. VPC Peering์€ ๋งˆ๋ฒ•์˜ ํ„ฐ๋„์ด ์•„๋‹ˆ๋‹ค

๊ณ„์ • ๊ฐ„ VPC Peering์„ ํ–ˆ๋‹ค. ์ด์ œ ํ†ต์‹ ๋  ์ค„ ์•Œ์•˜๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ECS๋Š” ์—ฌ์ „ํžˆ RDS์— ์—ฐ๊ฒฐ๋˜์ง€ ์•Š๋Š”๋‹ค. ๋ณด์•ˆ ๊ทธ๋ฃน, ๋ผ์šฐํŠธ, DNS๋ฅผ ์ „๋ถ€ ํ™•์ธํ•œ๋‹ค. ๊ทธ๋ž˜๋„ ์•ˆ ๋œ๋‹ค.

:red_question_mark: ์™œ ์ด๋Ÿฐ ์ผ์ด ์ƒ๊ธธ๊นŒ: Peering์€ ๋‹จ์ˆœํžˆ โ€œ์—ฐ๊ฒฐโ€์ผ ๋ฟ์ด๋‹ค. ์‹ค์ œ ํ†ต์‹ ์€ ๋ณ„๋„ ์„ค์ •์ด ํ•„์š”ํ•˜๋‹ค:

  • DNS ํ•ด์„ + ํ˜ธ์ŠคํŠธ๋„ค์ž„ ํ™œ์„ฑํ™”
  • Cross-account CIDR์„ ํ—ˆ์šฉํ•˜๋Š” SG ๊ทœ์น™
  • ์–‘์ชฝ ๋ผ์šฐํŠธ ํ…Œ์ด๋ธ” ์—…๋ฐ์ดํŠธ

:white_check_mark: ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•:

  • SG ๊ทœ์น™์„ ๋‹ค์‹œ ํ™•์ธํ•˜๋ผ โ€” ์ž๋™์œผ๋กœ ์ƒ์†๋˜์ง€ ์•Š๋Š”๋‹ค
  • DNS ์„ค์ • ๊ฒ€์ฆ (ํŠนํžˆ Route 53 Private Zone ์‚ฌ์šฉ ์‹œ)
  • Peering ์„ค์ •์€ ๋ฌธ์„œํ™”ํ•˜๋ผ. ๋‹น์‹ ์˜ ์ง์—…์ด ๊ทธ ๋ฌธ์„œ์— ๋‹ฌ๋ ค ์žˆ๋‹ค. AWS Peering์€ ์—ฐ์•  ๊ฐ™๋‹ค. ์—ฐ๊ฒฐ์€ ์žˆ์–ด๋„, ์†Œํ†ต์€ ์—ฌ์ „ํžˆ ์‹คํŒจํ•œ๋‹ค.

:locked_with_key: 6. ๊ณ ์•„ ๋ฆฌ์†Œ์Šค๊ฐ€ ์กฐ์šฉํžˆ ์˜ˆ์‚ฐ์„ ํƒœ์šด๋‹ค

์žŠํžŒ Sandbox์—์„œ t3.2xlarge๊ฐ€ ์ผ์ฃผ์ผ์งธ ๋Œ์•„๊ฐ„๋‹ค. ํƒœ๊ทธ๋„ ์—†๋‹ค. ์•Œ๋žŒ๋„ ์—†๋‹ค. ์žฌ๋ฌดํŒ€์€ ์›์ธ์„ ์บ๋ฌป๋Š”๋‹ค. ์ด์ œ ๋‹น์‹ ์€ ๋น„์šฉ ํƒ์ • ๋ชจ๋“œ๋‹ค.

:red_question_mark: ์™œ ์ด๋Ÿฐ ์ผ์ด ์ƒ๊ธธ๊นŒ: ๋ฉ€ํ‹ฐ ๊ณ„์ •์€ ์ž์œ ๋ฅผ ์ค€๋‹ค. ํ•˜์ง€๋งŒ ํƒœ๊น…๊ณผ ๋น„์šฉ ๊ฐ€์‹œ์„ฑ์ด ์—†์œผ๋ฉด ๊ทธ๋ƒฅ ๋‚œ์žฅํŒ์ด๋‹ค.

:white_check_mark: ๋ˆ ์ƒˆ๋Š” ๊ฑธ ๋ง‰๋Š” ๋ฒ•:

  • ์กฐ์ง ์ฐจ์›์˜ ํƒœ๊น… ์ •์ฑ… ๊ฐ•์ œ (๋ฐฐํฌ ์‹คํŒจ ์กฐ๊ฑด ํฌํ•จ)
  • ํ†ตํ•ฉ ์ฒญ๊ตฌ + ๊ณ„์ •๋ณ„ Cost Explorer
  • ์ •๊ธฐ ๊ฐ์‚ฌ ์‹คํ–‰ (๋˜๋Š” aws-nuke ์‚ฌ์šฉ, ๋‹จ ์กฐ์‹ฌํ•  ๊ฒƒ) ํด๋ผ์šฐ๋“œ๋Š” ์ €๋ ดํ•˜๋‹ค. ๋‹จ, ์•„๋ฌด๋„ ์•ˆ ์ง€์ผœ๋ณผ ๋•Œ๋งŒ.

:locked_with_key: 7. ์•Œ๋žŒ์€ ์žˆ๋Š”๋ฐ, ๋ˆ„๊ตฌ์—๊ฒŒ๋„ ์ „๋‹ฌ๋˜์ง€ ์•Š๋Š”๋‹ค

CloudWatch Alarm์„ ๋‹ค๋ฅธ ๊ณ„์ •์˜ SNS์— ์—ฐ๊ฒฐํ–ˆ๋‹ค. ํ”„๋กœ๋•์…˜์ด ๋ป—์—ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์•„๋ฌด๋„ ํ˜ธ์ถœ๋˜์ง€ ์•Š๋Š”๋‹ค. ์•Œ๋žŒ์€ ์žˆ์—ˆ๋Š”๋ฐ, ์•„๋ฌด๋„ ๋ฐ›์ง€ ๋ชปํ–ˆ๋‹ค.

:red_question_mark: ์™œ ์ด๋Ÿฐ ์ผ์ด ์ƒ๊ธธ๊นŒ: SNS๋Š” ๊ณ„์ • ๊ฐ„ ํผ๋ธ”๋ฆฌ์…”๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ํ—ˆ์šฉํ•˜์ง€ ์•Š์œผ๋ฉด ์‹ซ์–ดํ•œ๋‹ค. EventBridge๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋‹ค.

:white_check_mark: ๊ณ ์น˜๋Š” ๋ฒ•:

  • SNS Access Policy๋ฅผ ์ž‘์„ฑํ•ด ์†Œ์Šค ๊ณ„์ •์—์„œ ํ—ˆ์šฉ
  • ๊ฐ€์งœ ์ด๋ฒคํŠธ๋กœ ๋ฐ˜๋“œ์‹œ ํ…Œ์ŠคํŠธ
  • ์•Œ๋ฆผ ์ธํ”„๋ผ๋Š” ์ค‘์•™ ์ง‘์ค‘ํ™”, ์„œ๋น„์Šค๊ฐ€ ๊ฑฐ๊ธฐ์— ๊ตฌ๋…ํ•˜๋„๋ก ๊ตฌ์„ฑ ๋ˆ„๊ตฌ์—๊ฒŒ๋„ ์ „๋‹ฌ๋˜์ง€ ์•Š์€ ์•Œ๋žŒ์€, ์—†๋Š” ๊ฒƒ๊ณผ ๋‹ค๋ฆ„์—†๋‹ค.

:locked_with_key: 8. ์‹ ๊ทœ ๊ฐœ๋ฐœ์ž๋Š” Role Assumption ์ง€์˜ฅ์— ๋น ์ง„๋‹ค

์ƒˆ๋กœ์šด ์—”์ง€๋‹ˆ์–ด๊ฐ€ ํ•ฉ๋ฅ˜ํ–ˆ๋‹ค. ์ ‘๊ทผ ๊ถŒํ•œ์„ ์คฌ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์—ฌ์ „ํžˆ ๋ฐฐํฌ๊ฐ€ ์•ˆ ๋œ๋‹ค. ํ•œ์ฐธ ๋””๋ฒ„๊น… ๋์— ์•Œ๊ฒŒ ๋œ๋‹ค โ€” ์ž˜๋ชป๋œ Role์„, ์ž˜๋ชป๋œ ๊ณ„์ •์—์„œ ๊ฐ€์ •ํ•˜๊ณ  ์žˆ์—ˆ๋‹ค.

:red_question_mark: ์™œ ์ด๋Ÿฐ ์ผ์ด ์ƒ๊ธธ๊นŒ: ๊ฐ ๊ณ„์ •๋งˆ๋‹ค Role, ๊ถŒํ•œ, MFA ๊ทœ์น™, ์ด๋ฆ„ ์ฒด๊ณ„๊ฐ€ ์ œ๊ฐ๊ฐ์ด๋‹ค. ์˜จ๋ณด๋”ฉ ๊ฐ€์ด๋“œ? ์•„๋งˆ ์˜ค๋ž˜์ „์— ์—…๋ฐ์ดํŠธ ๋ฉˆ์ท„์„ ๊ฑฐ๋‹ค.

:white_check_mark: ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•:

  • IAM Identity Center(SSO) ์‚ฌ์šฉ โ€” ๊ณ„์ •๋ณ„ Permission Set ํ• ๋‹น
  • CLI ์„ค์ • ์Šคํฌ๋ฆฝํŠธํ™” (aws configure sso ํ˜น์€ awsume)

[์ถœ์ฒ˜] https://medium.com/towards-aws/8-things-that-break-after-going-multi-account-on-aws-0658a0dd12eb