์ ์ ์น์ HTTPS๋ก ๋ฐฐํฌํ๊ธฐ์ ์ด์ด ์ด๋ฒ์๋ EC2 ์ธ์คํด์ค๋ก ๋ฐฐํฌํ ํฐ์บฃ์ HTTPS๋ก ์ ๊ทผํ๊ณ ์ ํฉ๋๋ค.
์ ์ ์น ๊ฐ์ ๊ฒฝ์ฐ์๋ Application Load Balacner(ALB)๊ฐ ํ์์์ด์ ๊ทธ๋ฆฌ ์ด๋ ต์ง ์์์ง๋ง, ๋์ ์น(EC2) ๊ฐ์ ๊ฒฝ์ฐ๋ ALB๋ฅผ ํ์๋ก ํฉ๋๋ค. ๋ฐ๋ผ์ AWS์ ๋คํธ์ํฌ์ ๋ํ ๊ธฐ์ด์ง์์ด ํ์ํฉ๋๋ค.
ALB๋ ๊ฐ๋จํ ๋งํด์ L7 Load Balancer๋ก ํ๋กํ ์ฝ ํค๋๋ก ์๋ฒ ๋ถ์ฐ์ ๊ฐ๋ฅ์ผ ํด์ฃผ๋ AWS์ Load Balancer์ ๋๋ค. HTTP, HTTPS ๋ฟ๋ง ์๋๋ผ L7์ ์ํ๋ DNS, SMFP ๋ฑ๋ ๊ฐ๋ฅํฉ๋๋ค.
ALB์ ๋ํด์ ์ฌ๊ธฐ๊น์ง ์ค๋ช ํ๊ณ ์ด์ EC2๋ก ๋ฐฐํฌํ ํฐ์บฃ์ HTTPS๋ก ์ ๊ทผํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด๊ฒ ์ต๋๋ค. ์ฐ์ ์ ํ๋์ด์ผ ํ๋ ํ๊ฒฝ์ ์๋์ ๊ฐ์ต๋๋ค.
- Route53์์ ๊ตฌ๋งคํ ๋๋ฉ์ธ
- ALB
- EC2๋ก ๋ฐฐํฌํ ํฐ์บฃ ๋๋ Node.js
๊ทธ๋ผ ์์ํ๊ฒ ์ต๋๋ค.
์ฐธ๊ณ : SSL/TLS๋ ๋๋ฉ์ธ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ์ฐ ๋จ์๋ก ๊ตฌ๋งคํด์ผ ํ์ง๋ง AWS ALB๋ฅผ ์ด์ฉํ๋ฉด ๋ฌด๋ฃ์ ๋๋ค
AWS Certificate Manager(ACM)
ACM์ AWS ๋ด ์ธ์ฆ์ ๊ด๋ฆฌ๋ฅผ ํด์ฃผ๋ ์๋น์ค์ ๋๋ค.
"์ธ์ฆ์ ์์ฒญ" ๋ฒํผ์ ๋๋ฌ์ค๋๋ค.
"๊ณต์ธ ์ธ์ฆ์ ์์ฒญ"์ ์ ํํ๊ณ "์ธ์ฆ์ ์์ฒญ"์ ๋๋ฆ ๋๋ค.
Route53์์ ๊ตฌ๋งคํ [๋๋ฉ์ธ ์ด๋ฆ]์ ์์ฑํฉ๋๋ค. ์ ๋ headit.me ์ ๋ํด ์ด๋ฏธ ์ธ์ฆ์๊ฐ ์์ด์ *.test.headit.me๋ก ํ์ต๋๋ค.
[DNS ๊ฒ์ฆ]์ CNAME์ ํตํด ์ด ๋๋ฉ์ธ์ด ์ ํจํ ์ง ์ฒดํฌ ํ๋ ์์ญ์ ๋๋ค. ๋๊ตฐ๊ฐ ์์๋ก ์ ๋๋ฉ์ธ์ ๋ํ ์ธ์ฆ์๋ฅผ ๋ง๋ค๋ฉด ์๋์์์?
๊ทธ๋ฆฌ๊ณ [์์ฒญ]์ ๋๋ฌ์ค๋๋ค
์์ฒญ์ ๋๋ฅด๋ฉด ์๋์ ๊ฐ์ ์ด๋ฏธ์ง๊ฐ ๋์ต๋๋ค. ๊ทธ๋ผ ์ฌ๊ธฐ์ ์ด์ headit.me๋ผ๋ ๋๋ฉ์ธ์ ๋ํ ์์ ๊ถ์ด ์๋ ์ง ์ฒดํฌํด์ค์ผ ํฉ๋๋ค.
Route53์ผ๋ก ๊ตฌ๋งคํ ๋๋ฉ์ธ์ด๋ผ๋ฉด ์์ฃผ ์ฝ๊ฒ ์ธ์ฆํ ์ ์์ต๋๋ค. ํด๋น [์ธ์ฆ์ ID]๋ฅผ ๋๋ฌ์ค๋๋ค.
์ฌ๊ธฐ์ ์ค๋ฅธ์ชฝ ์๋จ์ [Route 53์์ ๋ ์ฝ๋ ์์ฑ]์ ๋๋ฌ์ค๋๋ค.
Route 53์์ ๋๋ฉ์ธ์ ๊ตฌ๋งคํ๊ธฐ ๋๋ฌธ์ ์๋์ผ๋ก ์ค์ ์ด ์๋ฃ๋ฉ๋๋ค. [๋ ์ฝ๋ ์์ฑ]์ ๋๋ฌ์ค๋๋ค.
์์ฑ ํ ๋ช๋ถ ์ง๋๋ฉด ์๋์ ๊ฐ์ด ์ฑ๊ณต์ธ ์ํ๊ฐ ๋ฉ๋๋ค.
์ด๋ก์จ HTTPS์ ํ์ํ SSL ์ธ์ฆ์๋ฅผ AWS์์ ๋ฐ๊ธ๋ฐ์์ต๋๋ค. ์๋ SSL๋ฅผ ๊ตฌ๋งคํ ์ ์๋ ์ฌ์ดํธ๋ค์ด ์กด์ฌํ๊ณ ๊ฑฐ๊ธฐ์ ๊ธ์ก์ ์ง๋ถํ๊ณ ์ฌ์ผํ๋๋ฐ AWS๊ฐ์ ๊ฒฝ์ฐ๋ ๋ฌด๋ฃ๋ก ์ ๊ณตํด์ค๋๋ค.
์ฌ๋ด์ผ๋ก SSL/TLS๋ฅผ ์ธ๋ถ์์ ๊ตฌ๋งคํ๋ฉด ์ฐ๋ํ ์ ์๋๋ก key, csr, crt ๋ฑ์ ์ฃผ๋๋ฐ AWS ACM ๊ฐ์ ๊ฒฝ์ฐ ์ด๋ฅผ ํ๋ํ๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅํ ๊ฑธ๋ก ์๊ณ ์์ต๋๋ค. ๊ทธ๋์ AWS ์๋น์ค๊ฐ ์๋ ์ธ๋ถ ์๋น์ค๋ Https ์ฌ์ฉ์ด ๋ถ๊ฐ๋ฅํฉ๋๋ค. EKS ๊ฐ์ ๊ฒฝ์ฐ AWS Load Balancer๋ฅผ ํตํด Ingress Controller๋ฅผ ์ค์ ํด์ฃผ๋ฉด ARN์ผ๋ก ๋ฐ๊ฒ ๋์ด์์ต๋๋ค.
์ด๋ฐ์์ผ๋ก ์ด๋ ธํ ์ด์ ์ ํตํด ์ธ์ฆ์์ ARN์ ์ค์ ํด์ฃผ์ด์ผ ํฉ๋๋ค.
alb.ingress.kubernetes.io/certificate-arn: arn:aws:acm:us-west-2:xxxxx:certificate/xxxxxxx
๊ฒฐ๊ตญ AWS ACM๋ ๋ฌด๋ฃ์ง๋ง ๋ฐ๊ฐ์ ๋ก AWS ์๋น์ค๋ง ์ฌ์ฉํ๋๋ก ํ๋ ๊ฒ์ด ์๋ง์กด์ ์๋๊ฐ ์๋๊ฐ ์ถ์ต๋๋ค.
Application Load Balancer
์ด์ ALB๋ฅผ ์์ฑํด๋ณด๊ฒ ์ต๋๋ค.
"Load Balancer ์์ฑ"์ ๋๋ฌ์ค๋๋ค.
ALB๋ฅผ ์ ํํด์ค๋๋ค.
ALB ์ด๋ฆ์ ์์ฑํด์ค๋๋ค.
์ ๊น Schema์ Internet-facing๊ณผ Internal์ ์ค๋ช ๋๋ฆฌ๊ฒ ์ต๋๋ค.
Internet-facing(mode Instance)์ NodePort์ ์ ๊ทผํ์ฌ ์ฌ๊ธฐ์ ์๋น์ค๋ฅผ ํตํด ํต์ ํ๋ค๋ ๊ฒ์ด๊ณ ,
Internal(mode IP)์ ์ง์ ํ๋์ IP์ ํต์ ํ๋ค๋ ์ค์ ์ ๋๋ค.
์ฐ๋ฆฌ๋ EC-2 ๋ผ๋ ๋ ธ๋์ ์ ๊ทผํ๊ธฐ ๋๋ฌธ์ Internet-facing์ ์ ํํด์ค๋๋ค. Internal์ ์ฟ ๋ฒ๋คํฐ์ค๋ฅผ ์ด์ฉํด์ ๋ ธ๋ ๋ณด๋ค ๋ ์์ ๋จ์์ ํต์ ํ๊ธฐ ์ํ์ฌ ์ฌ์ฉํฉ๋๋ค.
๊ณ์ ์ด์ด์ ์ํ๋ VPC์ ๊ฐ์ฉ์์ญ์ ์ ํํด์ค๋๋ค.
๋ณด์๊ทธ๋ฃน๊ณผ ๋ฆฌ์ค๋๋ฅผ ์ ํํด์ค๋๋ค. HTTPS๋ 443ํฌํธ๋ฅผ ์ฌ์ฉํ๋ 443 ๋ฆฌ์ค๋๋ฅผ ์ถ๊ฐํด์ค์ผ ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ target group์ EC2๋ฅผ ์ถ๊ฐํด์ค ํ ์ ํํด์ค๋๋ค. ๋ง์ฝ ์๋ฌด๊ฒ๋ ์๋ฌ๋ค๋ฉด ํ๊ฒ๊ทธ๋ฃน์ ์์ฑํด์ฃผ์๋ฉด ๋ฉ๋๋ค.
"Create load balancer"๋ฅผ ๋๋ฌ์ค๋๋ค.
ALB๊ฐ ์ ์์ ์ผ๋ก ์์ฑ๋์์ต๋๋ค.
์ดํ ๋ฆฌ์ค๋ ํญ์์ HTTPS:443์ "์ธ์ฆ์ ๋ณด๊ธฐ/ํธ์ง"์ ๋๋ฌ์ค๋๋ค.
์๊น ๋ฐ๊ธ๋ฐ์ ์ธ์ฆ์๋ฅผ ํด๋ฆญ ํ ํ ์๋จ์ [์ถ๊ฐ]๋ฅผ ๋๋ฌ์ค๋๋ค.
๊ทธ๋ผ ์ด์ ๊ฐ์ฅ ์ค์ํ๋ค๊ณ ๋ณผ ์ ์๋ [๊ท์น]์ ์ค์ ํด๋ณด๊ฒ ์ต๋๋ค.
HTTP:80 ์ ๊ท์น์ ํด๋ฆญํฉ๋๋ค. ์๋์ ๊ฐ์ด ์ค์ ํฉ๋๋ค. ์ ์ด๋ ๊ฒ ํ๋์ง์ ๋ํด์ Network L7์ ๋ํ ์ง์์ด ํ์ํ๋ฏ๋ก ์ฌ๊ธฐ์ ์ค๋ช ํ์ง ์๊ฒ ์ต๋๋ค. HTTP๋ก ์ ๊ทผํ์ ๊ฒฝ์ฐ HTTPS๋ก ๋ฆฌ๋ค์ด๋ ์ ๋ ์ ์๊ฒ ํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋ค์ ๋ค์ด์ ์ด๋ฒ์ HTTPS:443์ ๊ท์น์ ํด๋ฆญํฉ๋๋ค. HTTPS์์ ์ค์ง์ ์ผ๋ก ํ๊ฒ๊ทธ๋ฃน์ผ๋ก ์์ฒญ์ ์ ๋ฌํด์ผ ํ๋ ์์ ๊ฐ์ด ์ค์ ํด์ค๋๋ค.
์ฌ๊ธฐ์ ํ๊ฒ๊ทธ๋ฃน์ด Node.js๋ ํฐ์บฃ์ด ์๋ ๋ ธ๋๋ค์ ๊ทธ๋ฃน์ ๋๋ค. ๋ฌผ๋ก ํฌํธ๋ ๋ง์ณ์ฃผ์ด์ผ ํฉ๋๋ค. ๋ํ ์ ๋ฌ ๋์์ ๊ฐ์ค์น๋ฅผ ๋์ด ์ด๋ ๊ณณ์ผ๋ก ๋ ๋ง์ด ์์ฒญ์ด ์ ๋ฌ๋๊ฒ ํ ์๋ ์์ต๋๋ค.
์ด๋ก์จ ๋ก๋ ๋ฐธ๋ฐ์์ ์ค์ ๋ถ๋ถ๋ ๋์ ๋๋ค.
DNS ์ค์
Route53์ ์ ์ ํ "๋ ์ฝ๋ ์์ฑ"์ ๋๋ฌ์ค๋๋ค.
๋ ์ฝ๋ ์ด๋ฆ, ๋ ์ฝ๋ ์ ํ, ํธ๋ํฝ ๋ผ์ฐํ ๋์์ ์ค์ ํด์ค๋๋ค. ํธ๋ํฝ ๋ผ์ฐํ ๋์ ๊ฐ์ ๊ฒฝ์ฐ ๋ณ์นญ์ ๋๋ฅด๋ฉด ์๊น ์์ฑํด๋์ ALB๋ฅผ ์ฝ๊ฒ ๋ฑ๋กํ ์ ์์ต๋๋ค.
์ข๋ ์ค๋ช ์ ๋ง๋ถ์ด๊ฒ ์ต๋๋ค.
๋ ์ฝ๋ ์ ํ์ ๊ฒฝ์ฐ ํฌ๊ฒ A, NS, CNAME์ด ์์ต๋๋ค.
A: address์ ์ฝ์๋ก ๋๋ฉ์ธ์ด IP์ฃผ์๋ฅผ ๋ฐ๋ก ๋ฐ๋ผ๋ด ๋๋ค.
NS: name server์ ์ฝ์๋ก ๋๋ฉ์ธ์ด ๋ฑ๋ก๋์ด ์๋ name server๋ฅผ ๋งํฉ๋๋ค.
CNAME : Canonical Name์ ์ฝ์๋ก ๋๋ฉ์ธ์์ ๋๋ฉ์ธ์ ๋ฐ๋ผ ๋ณด๊ฒ ํฉ๋๋ค.
๋ฐ๋ผ์ ์ ์ค์ ์ *.test.headmit.me๋ก ์ ์์ ALB์ ip๋ก ์ ์ํ๊ฒ ๋ค๋ผ๋ ๋ป์ ๋๋ค.
์ด๋ก์จ ๋ชจ๋ ์ค๋น๊ณผ์ ์ด ๋๋ฌ์ต๋๋ค. ๊ฒฐ๊ณผ๋ฅผ ํ์ธํ๊ธฐ์ ์ ๋ช๊น์ง ์์์ผํ ์ฌํญ์ด ์์ต๋๋ค.
๋ฐ๋์ ์์์ผํ ์
ํฌํธ๊ฐ 443์ด๋ผ๊ณ ํด์ ์๋ฒ์์ ํฐ์บฃ ์ค์ ์ 443์ผ๋ก ํ ํ์๊ฐ ์์ต๋๋ค. ํฐ์บฃ์์๋ ๊ทธ์ ์น์๋ฒ์ ํฌํธ์ธ 80๋ง ์ด์ด์ฃผ๋ฉด ๋ฉ๋๋ค. ์๋๊ตฌ์? HTTPS๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๋ฅผ ์๊ฐํด๋ณด๋ฉด ์ฝ๊ฒ ์ ์ ์์ต๋๋ค.
Browser(Client) < - HTTPS(TLS) - > ELB(ALB) < - HTTP - > WAS
๋ณดํต TLS๋ฅผ ์ํํ ๋ท๋จ์ ์ํธํํ์ง ์๊ณ ์ ๋ฌ์ด ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ฆ ALB์ ์ ๊ทผํ ๋๋ง TLS ์ธ์ฆ์ ํ๋ฉด ๋ฉ๋๋ค. ๋ฐ๋ผ์ ๋ฐ๋ก ํฐ์บฃ์ 443 ํฌํธ๋ฅผ ์ด์ด๋ ํ์๊ฐ ์์ต๋๋ค. ALB๋ฅผ ํ์ฉํจ์ผ๋ก์จ ๋ชจ๋ ์๋ฒ์ ์ด์ TLS๋ฅผ ์ ์ฉํ ํ์๊ฐ ์๊ฒ ๋์์ต๋๋ค.
๋ง๋ฌด๋ฆฌ
์๋ฌผ์ ์ TLS Handshake ๊ณผ์ ์ด ์๋๊ฑธ ๋ณด๋ ๋ ์ด์ ์์ฌ์ ์ฌ์ง๊ฐ ์์ต๋๋ค.
์ด๋ก์จ EC2 ์ธ์คํด์ค์ HTTPS๋ฅผ ์ ํ๋ ๊ณผ์ ์ ์์๋ณด์์ต๋๋ค.
ํ์๋ค๊ฐ ๋งํ๋ ์ ์ด ์์ผ๋ฉด ์ธ์ ๋ ์ง ๋๊ธ ๋ฌ์์ฃผ์ธ์ :)
'AWS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[AWS] ๋ณด์ ๊ทธ๋ฃน์ ์์ค๋ก ๋ณด์ ๊ทธ๋ฃน ์ง์ ํ๊ธฐ (2) | 2023.04.19 |
---|---|
[AWS] rsync ๋ง๊ณ datasync ! - EFS Data ์ด์ (0) | 2022.11.20 |
[AWS] S3 ํผ๋ธ๋ฆญ ์ก์ธ์ค ์ฐจ๋จ์ ํ์ฑํ ํ๋ฉด์ ๊ฐ์ฒด์ ์ ๊ทผํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด์!! (0) | 2022.06.28 |
[AWS] HTTP to HTTPS๋ก ๋ฐฐํฌํ๊ธฐ (S3 ๊ธฐ์ค) (7) | 2021.05.21 |
[AWS] Route 53 ๋๋ฉ์ธ ๊ตฌ๋งค ํ ์ฐ๊ฒฐํ๊ธฐ (18) | 2021.05.19 |