๋ธ”๋ก์ฒด์ธ
๋ธ”๋ก์ฒด์ธ

CloudFront

๊ธ€๋กœ๋ฒŒ ์ฝ˜ํ…์ธ  ์ „์†ก ๋„คํŠธ์›Œํฌ
๋ชฉ์ฐจ

๊ฐœ์š”

โ€ข
์ฝ˜ํ…์ธ  ์ „์†ก ๋„คํŠธ์›Œํฌ ์„œ๋น„์Šค(CDN)
โ€ข
์˜ค๋ฆฌ์ง„ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์ง€์—ญ์ ์œผ๋กœ ๋ถ„์‚ฐ๋˜์–ด์žˆ๋Š” ์บ์‹œ ์„œ๋ฒ„๋กœ ์ฝ˜ํ…์ธ  ๋ถ„๋ฐฐ
โ—ฆ
์˜ค๋ฆฌ์ง„ : S3 ๋ฒ„ํ‚ท ๋˜๋Š” HTTP ์„œ๋ฒ„ (ALB ๋‚˜ EC2 ์ธ์Šคํ„ด์Šค)
โ€ข
์ „์„ธ๊ณ„์— ๋ฐฐํฌ๋œ 200๊ฐœ ์ด์ƒ์˜ ์—ฃ์ง€ ๋กœ์ผ€์ด์…˜์„ ์ด์šฉํ•˜์—ฌ ์ฝ˜ํ…์ธ  ์ „์†ก
โ€ข
์—ฃ์ง€ ๋กœ์ผ€์ด์…˜์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ž„์‹œ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ์บ์‹ฑ ๊ธฐ๋Šฅ์ด ์žˆ์Œ
โ€ข
AWS Certificate Manager, Route 53, S3๋“ฑ๊ณผ ํ†ตํ•ฉ

CloudFront ์•„ํ‚คํ…์ฒ˜ ์˜ˆ์‹œ

CloudFront ์ฃผ์š”๊ธฐ๋Šฅ

์ •์ /๋™์  ์ฝ˜ํ…์ธ  ๋”œ๋ฆฌ๋ฒ„๋ฆฌ

โ€ข
์ •์  ์ฝ˜ํ…์ธ , ๋™์  ์ฝ˜ํ…์ธ ๊ฐ€ ์กด์žฌํ•จ์— ๋”ฐ๋ผ CloudFront๋Š” ์บ์‹œ ๋™์ž‘์„ ์ตœ์ ํ™”ํ•˜์—ฌ ์ œ๊ณต

์˜ค๋ฆฌ์ง„ Selection

โ€ข
๋‹จ์ผ ๋ฐฐํฌ์—์„œ ์—ฌ๋Ÿฌ ์˜ค๋ฆฌ์ง„์„ ๊ตฌ์„ฑํ•˜์—ฌ ์ฝ˜ํ…์ธ  ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ
โ€ข
๊ฒฝ๋กœ ํŒจํ„ด์„ ๋ถ„์„ํ•˜์—ฌ ์˜ค๋ฆฌ์ง„ ๋Œ€์ƒ์˜ ์ฝ˜ํ…์ธ  ๋ถ„์‚ฐ ๊ฐ€๋Šฅ

์˜ค๋ฆฌ์ง„ ๊ทธ๋ฃน์„ ํ†ตํ•œ Failover

โ€ข
์˜ค๋ฆฌ์ง„ ๊ทธ๋ฃน ๋‚ด ๊ธฐ๋ณธ ์˜ค๋ฆฌ์ง„๊ณผ ๋ณด์กฐ ์˜ค๋ฆฌ์ง„์„ ๊ตฌ์„ฑํ•˜์—ฌ ๊ธฐ๋ณธ ์˜ค๋ฆฌ์ง„์—์„œ ์‘๋‹ตํ•  ์ˆ˜ ์—†์œผ๋ฉด ์ž๋™์œผ๋กœ ๋ณด์กฐ ์˜ค๋ฆฌ์ง„์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ Failover๋ฅผ ์œ ์ง€

SSL ์ง€์›

โ€ข
์ฝ˜ํ…์ธ ์— ๋Œ€ํ•ด SSL/TLS๋ฅผ ํ†ตํ•ด ์ „์†กํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ณ ๊ธ‰ SSL ๊ธฐ๋Šฅ์„ ์ž๋™์œผ๋กœ ํ™œ์„ฑํ™” ๊ฐ€๋Šฅ

์•ก์„ธ์Šค ์ œ์–ด

โ€ข
์„œ๋ช…๋œ URL๊ณผ ์„œ๋ช…๋œ ์ฟ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ† ํฐ ์ธ์ฆ์„ ์ง€์›ํ•˜์—ฌ ์ธ์ฆ๋œ ์ตœ์ข… ์‚ฌ์šฉ์ž๋งŒ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋„๋ก ์ œํ•œ ๊ฐ€๋Šฅ

Geo Restriction(์ง€๋ฆฌ์  ์ œํ•œ)

โ€ข
ํŠน์ • ๊ตญ๊ฐ€์—์„œ์˜ ์ฝ˜ํ…์ธ  ์•ก์„ธ์Šค๋ฅผ ์ œํ•œ ํ•˜๋Š” ๊ธฐ๋Šฅ
โ€ข
๋ฒ•๋ฅ ์ ์ธ ์‚ฌํ•ญ์œผ๋กœ ๊ตญ๊ฐ€๋ณ„๋กœ ์ €์ž‘๊ถŒ์ด ๋‹ค๋ฅธ ๊ฒฝ์šฐ์— ์‚ฌ์šฉ๊ฐ€๋Šฅ
์˜ต์…˜
โ€ข
ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ (Whitelist): ๋ฆฌ์ŠคํŠธ์— ์žˆ๋Š” ๊ตญ๊ฐ€๋งŒ ์•ก์„ธ์Šค ํ—ˆ์šฉํ•˜๊ณ  ๋‚˜๋จธ์ง€๋Š” ๋ชจ๋‘ ๊ฑฐ๋ถ€
โ€ข
๋ธ”๋ž™๋ฆฌ์ŠคํŠธ (Blacklist): ๋ฆฌ์ŠคํŠธ์— ์žˆ๋Š” ๊ตญ๊ฐ€๋งŒ ์•ก์„ธ์Šค ๊ฑฐ๋ถ€ํ•˜๊ณ  ๋‚˜๋จธ์ง€๋Š” ๋ชจ๋‘ ํ—ˆ์šฉ

Signed URL, Signed Cookies(์„œ๋ช…๋œ URL, ์„œ๋ช…๋œ ์ฟ ํ‚ค)

โ€ข
์„œ๋ช…๋œ URL ๋˜๋Š” ์ฟ ํ‚ค๋ฅผ ์ด์šฉํ•ด์„œ ์ฝ˜ํ…์ธ ์— ์ ‘์†ํ•˜๋Š” ๊ธฐ๋Šฅ
โ€ข
URL ๋˜๋Š” ์ฟ ํ‚ค์—๋Š” ์ฝ˜ํ…์ธ ๋งŒ๋ฃŒ๊ธฐ๊ฐ„ , ์•ก์„ธ์Šค๊ฐ€๋Šฅํ•œ IP ์ฃผ์†Œ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ์Œ
โ€ข
์œ ๋ฃŒ์ฝ˜ํ…์ธ ๋‚˜ ๋ณด์•ˆ์„ ์œ„ํ•ด ์ฝ˜ํ…์ธ ์˜ ์œ ํšจ ๋งŒ๋ฃŒ ๊ธฐ๊ฐ„์„ ์ง€์ •ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉ
โ€ข
์„œ๋ช…๋œ URL ์€ 1 ๊ฐœ์˜ ํŒŒ์ผ์— 1 ๊ฐœ์˜ ์„œ๋ช…๋งŒ ์ €์žฅ (1 ๊ฐœ์˜ ํŒŒ์ผ ์ ‘์†์„ ์œ„ํ•œ URL)
โ€ข
์„œ๋ช…๋œ ์ฟ ํ‚ค๋Š” ํ•˜๋‚˜์˜ ์ฟ ํ‚ค๋กœ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํŒŒ์ผ ์ ‘์† ๊ฐ€๋Šฅ

WAF, Shield

โ€ข
AWS Web Application Firewall, Shield ์™€ ๊ฒฐํ•ฉํ•ด DDoS ๋ฐฉ์–ด ๊ธฐ๋Šฅ์„ ํ•จ

OAI(Origin Access Identity)

โ€ข
S3 ๋ฒ„ํ‚ท์€ OAI(Origin Access Identity) ๋ฅผ ํ†ตํ•ด S3 ๋ฒ„ํ‚ท์˜ ์—‘์„ธ์Šค๋ฅผ ํด๋ผ์šฐ๋“œ ํ”„๋ก ํŠธ๋ฅผ ํ†ตํ•ด์„œ๋งŒ ํ•˜๋„๋ก ํ•  ์ˆ˜ ์žˆ์Œ
[์‹ค์Šต]
1.
OAI ์ƒ์„ฑ ํ›„ cloudfront์˜ ์›๋ณธ๊ณผ ์—ฐ๊ฒฐํ•  ๋•Œ ์ •์ฑ…์ถ”๊ฐ€ ์ฒดํฌ
โ€ข
์•„๋ž˜์˜ ์ •์ฑ…์ด ์›๋ณธS3์— ์ž๋™์œผ๋กœ ์ ์šฉ
{ "Version": "2008-10-17", "Id": "PolicyForCloudFrontPrivateContent", "Statement": [ { "Sid": "1", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity EYEHEONBZBMCN" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::hbeen-s3-cloudfront/*" } ] }
JSON
๋ณต์‚ฌ
2.
S3์˜ ํผ๋ธ”๋ฆญ ์—‘์„ธ์Šค ์ฐจ๋‹จ ์ ์šฉ

ํ•„๋“œ๋ ˆ๋ฒจ ์•”ํ˜ธํ™”

โ€ข
์‹ ์šฉ์นด๋“œ ๋ฒˆํ˜ธ์™€ ๊ฐ™์ด ์‚ฌ์šฉ์ž๊ฐ€ ์ œ์ถœํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ์˜ค๋ฆฌ์ง„ ์„œ๋ฒ„๋กœ ์—…๋กœ๋“œํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ
โ€ข
PUT/POST ์š”์ฒญ์ด ์˜ค๋ฆฌ์ง„์œผ๋กœ ์ „๋‹ฌ๋˜๊ธฐ ์ „์— ์—ฃ์ง€๋กœ์ผ€์ด์…˜์—์„œ ๋น„๋Œ€์นญ ์•”ํ˜ธํ™” ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€๋กœ ์•”ํ˜ธํ™”
โ€ข
๋ฐ์ดํ„ฐ๋Š” ํ”„๋ผ์ด๋น— ํ‚ค๋ฅผ ๊ฐ€์ง„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๋งŒ ๋ณตํ˜ธํ™” ๊ฐ€๋Šฅ

๋น„์šฉ ํšจ์œจ์„ฑ

โ€ข
์ผ๋ฐ˜ ์š”๊ธˆ๊ณผ ์•ฝ์ • ํŠธ๋ž˜ํ”ฝ ๊ฐœ๋ณ„ ์š”๊ธˆ ์ œ๊ณต
โ€ข
AWS ํด๋ผ์šฐ๋“œ ์„œ๋น„์Šค์™€ ์˜ค๋ฆฌ์ง„์—์„œ CloudFront ๊ฐ„์˜ ๋ฌด๋ฃŒ ๋ฐ์ดํ„ฐ ์ „์†ก ๊ฐ€๋Šฅ
โ€ข
S3, EC2, ELB์™€ ๊ฐ™์€ AWS ์„œ๋น„์Šค๋ฅผ ์˜ค๋ฆฌ์ง„์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ, ์˜ค๋ฆฌ์ง„์—์„œ CloudFront ์—ฃ์ง€ ๋กœ์ผ€์ด์…˜์œผ๋กœ ์ „์†ก๋˜๋Š” ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด์„œ๋Š” ์š”๊ธˆ์ด ์ฒญ๊ตฌ๋˜์ง€ ์•Š์Œ

Labmbda@Edge

โ€ข
CloudFront๋ฅผ ํ†ตํ•ด ์ „๋‹ฌ๋˜๋Š” ์ฝ˜ํ…์ธ ๋ฅผ ์‚ฌ์šฉ์ž ์ง€์ •ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” AWS Lambda๊ฐ€ ํ™•์žฅ๋œ ์ปดํ“จํŒ… ์„œ๋น„์Šค
โ€ข
Node.js ๋˜๋Š” Python ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•œ ํ›„ ์‚ฌ์šฉ์ž์™€ ๊ฐ€๊นŒ์šด ์—ฃ์ง€ ๋กœ์ผ€์ด์…˜์—์„œ ํ•ด๋‹น ํ•จ์ˆ˜ ์‹คํ–‰
โ€ข
๋‹ค์Œ๊ณผ ๊ฐ™์€ CloudFront ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ Lamda ํ•จ์ˆ˜ ์‹คํ–‰
โ—ฆ
CloudFront๊ฐ€ ์ตœ์ข… ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์„ ์ˆ˜์‹ ํ•  ๋•Œ
โ—ฆ
CloudFront๊ฐ€ ์˜ค๋ฆฌ์ง„์— ์š”์ฒญ์„ ์ „๋‹ฌํ•˜๊ธฐ ์ „
โ—ฆ
CloudFront๊ฐ€ ์˜ค๋ฆฌ์ง„์˜ ์‘๋‹ต์„ ์ˆ˜์‹ ํ•  ๋•Œ
โ—ฆ
CloudFront๊ฐ€ ์ตœ์ข… ์‚ฌ์šฉ์ž์—๊ฒŒ ์‘๋‹ต์„ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ์ „
โ€ข
์˜ˆ์‹œ
โ—ฆ
A/B ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด ์‚ฌ์ดํŠธ์˜ ๋‹ค์–‘ํ•œ ๋ฒ„์ „์„ ๋ณผ ์ˆ˜ ์žˆ๋„๋ก ์ฟ ํ‚ค๋ฅผ ๊ฒ€์‚ฌํ•˜๊ณ  URL์„ ๋‹ค์‹œ ์ž‘์„ฑ
โ—ฆ
User-Agent ํ—ค๋”๋ฅผ ํ™•์ธํ•˜์—ฌ ์‚ฌ์šฉ์ค‘์ธ ๋””๋ฐ”์ด์Šค๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋””๋ฐ”์ด์Šค ํ™”๋ฉด ํฌ๊ธฐ์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ์ด๋ฏธ์ง€ ๋ฐ˜ํ™˜
โ—ฆ
์ตœ์ข… ์‚ฌ์šฉ์ž ์š”์ฒญ ๋˜๋Š” ์˜ค๋ฆฌ์ง„ ์š”์ฒญ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ HTTP ์‘๋‹ต ์ƒ์„ฑ
โ—ฆ
๋ฐ์ดํ„ฐ ์ „์†ก ๋น„์šฉ์„ ์ค„์ด๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ์ž์—๊ฒŒ ์ „์†ก๋˜๋Š” ํŒŒ์ผ์„ ์••์ถ•

์ฐธ๊ณ 

โ€ข
CloudFront ์„ค์ • ํ›„ ์ตœ์ดˆ ์ ‘๊ทผ ์‹œ ์˜ค๋ฆฌ์ง„์œผ๋กœ ์ฝ˜ํ…์ธ ๋ฅผ ๋ฐ›๋Š” ์ž‘์—…์ด ํ•„์š”
โ€ข
ํ—ค๋” ๋‚ด X-Cahce ํ•„๋“œ ๊ฐ’ : โ€˜Miss from cloudfrontโ€™ โ†’ ์ฝ˜ํ…์ธ  ์‘๋‹ต์„ ์—ฃ์ง€ ๋กœ์ผ€์ด์…˜์ด ์•„๋‹Œ ์˜ค๋ฆฌ์ง„์„ ํ†ตํ•ด ์‘๋‹ต์„ ์ฃผ์—ˆ๋‹ค๋Š” ์˜๋ฏธ
โ€ข
ํ—ค๋” ๋‚ด X-Cahce ํ•„๋“œ ๊ฐ’ : โ€˜Hit from cloudfrontโ€™ โ†’ ์ฝ˜ํ…์ธ  ์‘๋‹ต์„ ์—ฃ์ง€ ๋กœ์ผ€์ด์…˜์ด ์‘๋‹ต์„ ์ฃผ์—ˆ๋‹ค๋Š” ์˜๋ฏธ

๋กœ๊น…

โ€ข
๋กœ๊ทธ๋ฅผ ๊ฐ™์€ ๋ฆฌ์ „์˜ S3์— ์ถœ๋ ฅ ๊ฐ€๋Šฅ