๊ด€๋ฆฌ ๋ฉ”๋‰ด

๐‘†๐‘ข๐‘›๐‘ โ„Ž๐‘–๐‘›๐‘’ ๐‘Ž๐‘“๐‘ก๐‘’๐‘Ÿ ๐‘Ÿ๐‘Ž๐‘–๐‘›โœง

[AWS] AWS S3 ์ •์  ์›น ํ˜ธ์ŠคํŒ… + ๊ฐ€๋น„์•„ ๋„๋ฉ”์ธ ์—ฐ๊ฒฐ + CloudFront HTTPS ์„ค์ •ํ•˜๊ธฐ ๋ณธ๋ฌธ

๐—ฃ๐—ฟ๐—ผ๐—ด๐—ฟ๐—ฎ๐—บ๐—บ๐—ถ๐—ป๐—ด๐Ÿ’ป/๐€๐–๐’

[AWS] AWS S3 ์ •์  ์›น ํ˜ธ์ŠคํŒ… + ๊ฐ€๋น„์•„ ๋„๋ฉ”์ธ ์—ฐ๊ฒฐ + CloudFront HTTPS ์„ค์ •ํ•˜๊ธฐ

๐ŸคRyusun๐Ÿค 2025. 4. 7. 15:49

๊ฐ€๋น„์•„์—์„œ ๋„๋ฉ”์ธ์„ ๊ตฌ๋งคํ•œ ํ›„, AWS S3์— ์ •์  ์›น ํ˜ธ์ŠคํŒ…์šฉ ๋ฒ„ํ‚ท์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

์ด๋•Œ ๋ฒ„ํ‚ท ์ด๋ฆ„์€ ๊ตฌ๋งคํ•œ ๋„๋ฉ”์ธ ์ด๋ฆ„๊ณผ ์ •ํ™•ํžˆ ์ผ์น˜ํ•˜๋„๋ก ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

์ดํ›„ ๋งŒ๋“  ๋ฒ„ํ‚ท -> ๊ถŒํ•œ ํƒญ์— ๊ฐ€์„œ ์•„๋ž˜ ๊ถŒํ•œ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "PublicReadGetObject",
      "Effect": "Allow",
      "Principal": "*",
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::your-bucket-name/*"
    }
  ]
}

 

์ด์ œ Route 53 ์„œ๋น„์Šค๋กœ ์ด๋™ํ›„ 'ํ˜ธ์ŠคํŒ… ์˜์—ญ'์„ ํด๋ฆญํ•œ ํ›„, '๋ ˆ์ฝ”๋“œ ์ƒ์„ฑ' ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ์ค๋‹ˆ๋‹ค.
๋ ˆ์ฝ”๋“œ ์œ ํ˜•์€ ์ผ๋ฐ˜์ ์œผ๋กœ A๋ ˆ์ฝ”๋“œ(A - IPv4 ์ฃผ์†Œ)๋ฅผ ์„ ํƒํ•˜๊ณ ,  ํŠธ๋ž˜ํ”ฝ ๋ผ์šฐํŒ… ๋Œ€์ƒ์€ 'S3 ์›น์‚ฌ์ดํŠธ ์—”๋“œํฌ์ธํŠธ'๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

์ดํ›„, ๋ ˆ์ฝ”๋“œ ํ…Œ์ด๋ธ”์—์„œ NS ํƒ€์ž…์˜ ๋„ค์ž„์„œ๋ฒ„(NS) ๊ฐ’ 4๊ฐœ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
๊ฐ ๊ฐ’์˜ ๋งจ ๋์— ์žˆ๋Š” ๋งˆ์นจํ‘œ(.)๋Š” ์ œ๊ฑฐํ•œ ํ›„, ๊ฐ€๋น„์•„ ๋„๋ฉ”์ธ ๊ด€๋ฆฌ ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•ด ๋„ค์ž„์„œ๋ฒ„ ์„ค์ • ํ•ญ๋ชฉ์˜ 1์ฐจ ~ 4์ฐจ์— ์ˆœ์„œ๋Œ€๋กœ ์ž…๋ ฅํ•ด์ค๋‹ˆ๋‹ค.

์ด ์ž‘์—…์„ ํ†ตํ•ด ๊ฐ€๋น„์•„ ๋„๋ฉ”์ธ์ด AWS Route 53๊ณผ ์ •์ƒ์ ์œผ๋กœ ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค.

 

๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์ฆ‰์‹œ ๋ฐ˜์˜๋˜์ง€๋Š” ์•Š์œผ๋ฉฐ, ์ ์šฉ๋˜๊ธฐ๊นŒ์ง€๋Š” ์ตœ๋Œ€ ๋ช‡์‹ญ๋ถ„๊นŒ์ง€ ์†Œ์š”๋ฉ๋‹ˆ๋‹ค!

 

 


 

CloudFront๋กœ ์ •์  ์›น์‚ฌ์ดํŠธ์— HTTPS ์ ์šฉํ•˜๊ธฐ

 

AWS Certificate Manager(ACM) ์„œ๋น„์Šค๋กœ ์ด๋™ํ•œ ํ›„, ๋ฆฌ์ „์„ ๋ฐ˜๋“œ์‹œ ๋ฒ„์ง€๋‹ˆ์•„ ๋ถ๋ถ€(us-east-1)๋กœ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.
์ด๋Š” CloudFront๊ฐ€ ๊ธ€๋กœ๋ฒŒ ์„œ๋น„์Šค์ด๊ธฐ ๋•Œ๋ฌธ์—, ์ธ์ฆ์„œ ์‚ฌ์šฉ ์‹œ ๋ฒ„์ง€๋‹ˆ์•„ ๋ถ๋ถ€์— ์œ„์น˜ํ•œ ์ธ์ฆ์„œ๋งŒ ์ง€์›ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์ด์ œ ‘์ธ์ฆ์„œ ์š”์ฒญ’ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๊ณ , ๋„๋ฉ”์ธ ์ด๋ฆ„์—๋Š” ๊ตฌ์ž…ํ•œ ๋„๋ฉ”์ธ๊ณผ ํ•จ๊ป˜ ์™€์ผ๋“œ์นด๋“œ ๋„๋ฉ”์ธ(*.๋„๋ฉ”์ธ)๋„ ํ•จ๊ป˜ ์ž…๋ ฅํ•ด์ค๋‹ˆ๋‹ค.

 

 

 

๋ฐœ๊ธ‰์„ ์™„๋ฃŒํ•˜๋ฉด ๊ฒ€์ฆ ๋Œ€๊ธฐ์ค‘์ด ๋ฉ๋‹ˆ๋‹ค.

 


ํ•ด๋‹น ์ธ์ฆ์„œ๋ฅผ ํด๋ฆญ ํ›„, Route53์—์„œ ๋ ˆ์ฝ”๋“œ ์ƒ์„ฑ ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ์„œ ๋ ˆ์ฝ”๋“œ ์ƒ์„ฑ์„ ๋ˆŒ๋Ÿฌ์ค๋‹ˆ๋‹ค.

์ƒํƒœ๊ฐ€ '๋ฐœ๊ธ‰๋จ'์œผ๋กœ ๋ฐ”๋€Œ๋ฉด ์ธ์ฆ์„œ์˜ ARN์„ ๋ณต์‚ฌํ›„ CloudFront ์„œ๋น„์Šค๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

 

CloudFront์„œ๋น„์Šค์˜ ๋ฐฐํฌ ์ƒ์„ฑ์„ ํด๋ฆญํ›„ ์›๋ณธ ๋„๋ฉ”์ธ์— S3์˜ ์ •์  ์›น ํ˜ธ์ŠคํŒ… url๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

 

 

CloudFront ๋ฐฐํฌ ์„ค์ •์—์„œ ์ถ”๊ฐ€๋กœ ๋ณ€๊ฒฝํ•ด์•ผ ํ•  ํ•ญ๋ชฉ์€ ์ด 4๊ฐ€์ง€์ž…๋‹ˆ๋‹ค.

์šฐ์„  ๋ทฐ์–ด ํ”„๋กœํ† ์ฝœ ์ •์ฑ…์˜ Redirect HTTP to HTTPS๋กœ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.

Redirect HTTP to HTTPS๋กœ ์„ค์ •ํ•˜์—ฌ HTTP ์š”์ฒญ์„ HTTPS๋กœ ์ž๋™ ๋ฆฌ๋””๋ ‰์…˜๋˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

 

๋˜ํ•œ, ์บ์‹œ ํ‚ค ๋ฐ ์›๋ณธ ์š”์ฒญ(Cache key and origin requests) ํ•ญ๋ชฉ์—์„œ Legacy cache settings๋ฅผ ์„ ํƒํ•œ ๋’ค, ๊ฐ์ฒด ์บ์‹ฑ(Object caching)์„ Customize๋กœ ๋ณ€๊ฒฝํ•˜๊ณ , ๊ธฐ๋ณธ TTL(Default TTL) ๊ฐ’์„ 0์œผ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

Default TTL ๊ฐ’์„ 0์œผ๋กœ ์„ค์ •ํ•˜๋ฉด CloudFront๊ฐ€ ์บ์‹ฑ์„ ํ•˜์ง€ ์•Š๊ฒŒ ๋˜์–ด, ์ •์  ํŒŒ์ผ(html, css, js ๋“ฑ)์„ ์ˆ˜์ •ํ–ˆ์„ ๋•Œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์ฆ‰์‹œ ๋ฐ˜์˜๋ฉ๋‹ˆ๋‹ค.
๋˜ํ•œ, ํ•ญ์ƒ ์›๋ณธ์—์„œ ์ตœ์‹  ํŒŒ์ผ์„ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ ๋•Œ๋ฌธ์—, ๊ฐœ๋ฐœ ์ค‘ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋น ๋ฅด๊ฒŒ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ์–ด ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์— ๋งค์šฐ ์œ ๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

 

 

์ถ”๊ฐ€๋กœ, ์•„๋ž˜๋กœ ์Šคํฌ๋กคํ•˜์—ฌ ๋Œ€์ฒด ๋„๋ฉ”์ธ ์ด๋ฆ„(CNAME) ํ•ญ๋ชฉ์— S3 ๋ฒ„ํ‚ท ์ด๋ฆ„(๋„๋ฉ”์ธ ์ด๋ฆ„๊ณผ ๋™์ผ) ์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๋‹ค์Œ, Custom SSL Certificate ํ•ญ๋ชฉ์—์„œ๋Š” ์•ž์„œ ์ƒ์„ฑํ•œ ์ธ์ฆ์„œ(ACM) ๋ฅผ ์„ ํƒํ•ด์ค๋‹ˆ๋‹ค.

 

 

 


 

ํ˜„์žฌ๋Š” Route 53์—์„œ ์„ค์ •๋œ ๋„๋ฉ”์ธ์ด S3 ์›น์‚ฌ์ดํŠธ ์—”๋“œํฌ์ธํŠธ๋ฅผ ์ง์ ‘ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ด์ œ๋Š” CloudFront๋ฅผ ์ค‘๊ฐ„์— ๋ผ์›Œ ๋„ฃ์–ด, ๋„๋ฉ”์ธ์ด CloudFront๋ฅผ ๊ฑฐ์ณ S3๋กœ ์—ฐ๊ฒฐ๋˜๋„๋ก ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด Route 53์—์„œ ๊ธฐ์กด S3 ์›น์‚ฌ์ดํŠธ ์—”๋“œํฌ์ธํŠธ์— ์—ฐ๊ฒฐ๋œ ๋ ˆ์ฝ”๋“œ๋ฅผ CloudFront ๋ฐฐํฌ ๋„๋ฉ”์ธ์œผ๋กœ ์ˆ˜์ •ํ•ด์ค๋‹ˆ๋‹ค.

 

 

 

์ด๋ ‡๊ฒŒ ์„ค์ •ํ•˜๋ฉด ์‚ฌ์šฉ์ž ์š”์ฒญ์€ ๋จผ์ € CloudFront๋กœ ์ „๋‹ฌ๋˜๊ณ , ์ดํ›„ CloudFront๊ฐ€ S3์—์„œ ์ •์  ํŒŒ์ผ์„ ๊ฐ€์ ธ์˜ค๋Š” ๊ตฌ์กฐ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ HTTPS ์ ์šฉ์ด๋‚˜ ์บ์‹ฑ ์ „๋žต ๋“ฑ CloudFront์˜ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 


๋ชจ๋“  ์„ค์ •์ด ์™„๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์ ์šฉ๋˜๊ธฐ๊นŒ์ง€๋Š” ๋ช‡ ๋ถ„ ์ •๋„ ์‹œ๊ฐ„์ด ์†Œ์š”๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ž ์‹œ ํ›„ ์›น์‚ฌ์ดํŠธ์— ๋‹ค์‹œ ์ ‘์†ํ•ด๋ณด๋ฉด, ๊ธฐ์กด์— ํ‘œ์‹œ๋˜๋˜ "๋ณด์•ˆ๋˜์ง€ ์•Š์Œ" ๋ฉ”์‹œ์ง€๊ฐ€ ์‚ฌ๋ผ์ง€๊ณ , HTTPS๊ฐ€ ์ ์šฉ๋œ ์•ˆ์ „ํ•œ ์—ฐ๊ฒฐ๋กœ ํ‘œ์‹œ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์บ์‹œ ๋•Œ๋ฌธ์— ์ด์ „ ์„ค์ •์ด ๊ณ„์† ๋ณด์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿด ๊ฒฝ์šฐ ๋ธŒ๋ผ์šฐ์ € ์บ์‹œ๋ฅผ ์‚ญ์ œํ•˜๊ฑฐ๋‚˜ ์‹œํฌ๋ฆฟ ๋ชจ๋“œ๋กœ ์ ‘์†ํ•ด๋ณด์‹œ๊ธธ ์ถ”์ฒœ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

 

 

 

 

 

 

[์ฐธ๊ณ ]

https://www.youtube.com/watch?v=RbJ4-GWckeM&t=722s