AWS ์ธ์ฆ์„œ ๊ด€๋ จ ํžˆ์Šคํ† ๋ฆฌ

์œ„ ๊ธฐ๋ก์ฒ˜๋Ÿผ 2021๋…„ 7์›” ๋ถ€ํ„ฐ AWS Certificate Manager์—์„œ ์™ธ๋ถ€์—์„œ ๋ฐœ๊ธ‰๋œ ECDSA ์ธ์ฆ์„œ๋ฅผ ๊ฐ€์ ธ์™€์„œ ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ๊ฒŒ ์ง€์›ํ•˜์˜€๊ณ  2022๋…„ 11์›” ๋ถ€ํ„ฐ๋Š” ACM ์ž์ฒด์ ์œผ๋กœ ECDSA ์ธ์ฆ์„œ ๋ฐœ๊ธ‰์„ ์ง€์›ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์‹œ๊ฐ„์ด ํ˜๋Ÿฌ 2024๋…„ 1์›”๋ถ€ํ„ฐ๋Š” Network Load Balancer ์—์„œ๋„ ECDSA ์ธ์ฆ์„œ ๋“ฑ๋ก์„ ์ง€์›ํ•œ๋‹ค.

์œ„ ํ™”๋ฉด์€ ACM ์™ธ๋ถ€์—์„œ ๋ฐœ๊ธ‰๋œ ECDSA ์ธ์ฆ์„œ๋ฅผ ๊ฐ€์ ธ์˜จ ์˜ˆ์‹œ๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

Network Load Balancer TLS ๋ฆฌ์Šค๋„ˆ ๊ตฌ์„ฑ

๊ทธ๋™์•ˆ ELB ์—์„œ ECDSA ์ธ์ฆ์„œ๋กœ TLS ์˜คํ”„๋กœ๋“œ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์˜ค์ง ALB(Application Load Balancer)๋ฅผ ๊ตฌ์„ฑํ•ด์•ผํ–ˆ๋‹ค. ์ด์ œ๋Š” NLB(Network Load Balancer)๋กœ ๊ตฌ์„ฑํ•˜๊ณ  TLS ๋ฆฌ์Šค๋„ˆ์—์„œ ACM์— ์ถ”๊ฐ€๋˜์–ด์žˆ๋Š” ECDSA ์ธ์ฆ์„œ๋ฅผ ์„ ํƒํ•˜์—ฌ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ•˜์ง€๋งŒ, NLB๊ฐ€ TLS ๋ฆฌ์Šค๋„ˆ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ mTLS๋Š” ์ง€์›ํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ตฌ์„ฑ์ด ๋˜๋Š” ๊ฒƒ์€ ์ผ๋ถ€ ์‹œ์Šคํ…œ์—์„œ ์ค‘์š”ํ•œ ๋ถ€๋ถ„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋Œ€์ƒ ๊ทธ๋ฃน - ํ”„๋ก์‹œ ํ”„๋กœํ† ์ฝœ v2

NLB ๋Š” ALB์™€๋Š” ๋‹ค๋ฅด๊ฒŒ L4 ๋ ˆ๋ฒจ๋กœ ๋™์ž‘ํ•˜๋ฏ€๋กœ HTTP ํŠธ๋ž˜ํ”ฝ์„ HTTPS๋กœ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธํ•˜๋Š” ๊ฒƒ์„ ์ง€์›ํ•˜์ง€ ๋ชปํ•œ๋‹ค. ChatGPT์—๊ฒŒ ๋ฌผ์–ด๋ณด๋”๋ผ๋„ TCP ๋ฆฌ์Šค๋„ˆ๋กœ ๊ตฌ์„ฑํ•˜๊ณ  Nginx์™€ ๊ฐ™์€ ๋ณ„๋„์˜ ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ์—์„œ TLS ์˜คํ”„๋กœ๋“œ๋ฅผ ์ฒ˜๋ฆฌํ•จ๊ณผ ๋™์‹œ์— Forward http to https ๋ฅผ ์ ์šฉํ•˜๋Š” ์˜ˆ์‹œ๋ฅผ ์„ค๋ช…ํ•œ๋‹ค.

์‚ฌ๋‚ด ์—”์ง€๋‹ˆ์–ด์™€ ์‚ฝ์งˆ์„ ํ•ด๋ณธ๊ฒฐ๊ณผ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ์— ์—ฐ๊ฒฐ๋˜๋Š” ๋Œ€์ƒ ๊ทธ๋ฃน์—์„œ ํ”„๋ก์‹œ ํ”„๋กœํ† ์ฝœ v2๋ฅผ ํ™œ์„ฑํ™”ํ•˜๋ฉด Elastic Beanstalk์˜ Nginx ํ”Œ๋žซํผ์—์„œ PROXY Protocol์„ ํ†ตํ•ด $proxy_protocol_server_port ์†์„ฑ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ์„ ํ™•์ธํ–ˆ๋‹ค. ๋” ๋‚˜์•„๊ฐ€์„œ๋Š” $proxy_protocol_addr ์†์„ฑ์œผ๋กœ ์‹ค์ œ๋กœ ํŠธ๋ž˜ํ”ฝ์„ ์ „๋‹ฌํ•œ ํด๋ผ์ด์–ธํŠธ IP๋ฅผ ์•ก์„ธ์Šค ๋กœ๊ทธ์— ์ถœ๋ ฅํ•˜๊ฑฐ๋‚˜ X-Forwarded-For ํ—ค๋”๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊นŒ์ง€ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์–ด๋ณด์ธ๋‹ค.

http {
    server {
        listen 80 proxy_protocol;
        if ($proxy_protocol_server_port = 80) {
            return 301 https://$host$request_uri;
        }
    }
}

NLB ์—์„œ Nginx๋กœ ์ „๋‹ฌํ•  ๋•Œ ์‚ฌ์šฉํ•œ ํฌํŠธ๊ฐ€ 80 ์ด๋ผ๋ฉด HTTP ์š”์ฒญ์œผ๋กœ ๊ฐ„์ฃผํ•˜๊ณ  HTTPS ์š”์ฒญ์œผ๋กœ ์ „๋‹ฌ๋  ์ˆ˜ ์žˆ๋„๋ก 301 ์‘๋‹ต์„ ์ฒ˜๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.