AWS NLB ECDSA TLS ์คํ๋ก๋
AWS ์ธ์ฆ์ ๊ด๋ จ ํ์คํ ๋ฆฌ
- AWS Certificate Manager, ๊ฐ์ ธ์จ ECDSA ๋ฐ RSA ์ธ์ฆ์์ ํ์ฅ๋ ์ฌ์ฉ ์ ๊ณต
- AWS Certificate Manager, ์ด์ Elliptic Curve Digital Signature Algorithm TLS ์ธ์ฆ์ ์ง์
- Network Load Balancer, ์ด์ AWS Certificate Manager๋ฅผ ํตํ RSA 3072-๋นํธ, ECDSA 256/384/521-๋นํธ ์ธ์ฆ์ ์ง์
์ ๊ธฐ๋ก์ฒ๋ผ 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 ์๋ต์ ์ฒ๋ฆฌํ์ต๋๋ค.