SSL(TLS)인증서
- 클라이언트와 로드 밸런서 사이에서 트래픽이 이동하는 동안 암호화해준다.
= 전송 중(in-flight) 암호화라고 한다.
(cf : 데이터는 네트워크를 이동하는 중에는 암호화되고, 송신자와 수신자 측에서만 이를 복호화할 수 있다.) - "보안 소켓 계층"을 의미하고, 연결을 암호화하는데 사용한다.
- TLS는 새로운 버전의 SSL로, "전송 계층 보안"을 의미한다.
(그래서 사실 SSL이 아니라 이제는 TLS라고 불러야되는데, 여전히 SSL로 불린다) - Public SSL
: 인증 기관(CA)에서 발급한다.
(인증 기관 - Comodo, Symantec, GoDaddy, GlobalSign, Digicert, Letsencrypt,... 등등)
: 이 SSL를 로드 밸런서에 추가하면, 클라이언트와 로드 밸런서 사이의 연결을 암호화할 수 있다. - Google.com이나 그런 류의 웹사이트를 방문했을 때,
: 녹색 표시 같은게 뜨면 트래픽이 암호화되고 있다는 뜻이다.
: 반대로 빨간색 표시가 뜨면, 트래픽이 암호화되지 않았으니 신용카드 정보나 개인 정보 같은 걸 넣지 말라고 알려주는 것이다. - SSL 인증서에는 만료 날짜가 있어서 주기적으로 갱신해 인증 상태를 유지해야 한다.
SSL은 로드 밸런서에서 어떻게 동작할까?
- 먼저 사용자가 HTTPS를 통해 접속한다.
'S'가 붙은 건 SSL 인증서를 써서 암호화해 안전하다는 뜻이다. - 인터넷을 통해 우리 로드 밸런서에 접송하면, 로드 밸런서에서는 내부적으로 SSL 종료(SSL Termination)을 수행한다.
- 백엔드에서는 HTTP로 EC2 인스턴스와 암호화 되지 않은 상태로 통신한다. 하지만 VPC로 이동하는 트래픽은 프라이빗 네트워크를 쓰기 때문에 안전하게 보호된다.
- 로드 밸런서는 X.509 인증서를 사용하는데, 이게 바로 'SSL 또는 TLS 서버 인증서'라고 부른다.
- AWS에는 이 인증서들을 관리할 수 있는 'AWS 인증서 관리자'(ACM)이 있다.
: 사용자가 가진 인증서를 ACM에 업로드 할 수도 있다. - HTTPS listener
: HTTP리스너를 구성할 때 반드시 'HTTPS' 리스너로 해야한다.
: 기본 인증서를 지정해줘야 한다.
: 다중 도메인을 지원하기 위해 다른 인증서를 추가할 수도 있다.
: 클라이언트는 SNI(서버이름지정)이라는 걸 써서 접속할 호스트의 이름을 알릴 수 있다.
: 사용자가 원하는 대로 보안 정책을 지정할 수 있다. (구 버전의 SSL과 TLS, 즉 레거시 클라이언트를 지원할 수도 있다.)
SNI(Server Name Indication)
- 아주 중대한 문제의 해결책으로 여러 개의 SSL 인증서를 하나의 웹 서버에 로드해 하나의 웹 서버가 여러 개의 웹 사이트 지원할 수 있게 해준다.
- "newer"(확장)된 프로토콜로, 클라이언트가 대상 서버의 호스트 이름을 지정하도록 하며 최초 SSL 핸드셰이크 단계이다.
- 클라이언트가 접속할 웹사이트를 말했을 때, 서버는 어떤 인증서를 로드해야하는지 알 수 있게 된다.
- 이 프로토콜은 ALB와 NLB, CloudFront에서만 작동한다.(CLB 작동하지 않는다!)
- 이미지 가운데에 ALB이고, 대상그룹은 2개가 있다. 그리고 하나는 'www.mycorp.com'이고, 하나는 'Domain1.example.com'이다.
- ALB는 어떤 규칙에 의해 트래픽을 라우팅할 대상 그룹을 고를 것이다. (여기서 규칙이란, 호스트 이름을 뜻한다!)
- ALB에는 두 개의 SSL 인증서가 있다. Domain1.example.com과 www.mycorp.com 각 대상 그룹에 해당하는 인증서
- 클라이언트는 ALB에 접속해 'ww.mycorp.com에 접속하고 싶어'라고 말하면, 이 과정도 서버 이름 지정 과정이다.
그러면 ALB는 mycorp.com에 접속하고 싶다는걸 파악한 후, 해당하는 SSL 인증서를 로드한다.
해당하는 인증서를 가져와 트래픽을 암호화한 다음, 규칙에 따라 대상 그룹인 mycorp.com으로 요청을 재전송해야 한다. - 만약, 또 다른 클라이언트가 ALB에게 Domain1.example.com에 접속을 요구한다면, 역시 해당하는 SSL 인증서를 가져와 원하는 대상 그룹으로 연결해 줄 것이다.
- 위에 예시처럼 SNI(서버 이름 지정)을 사용해서 여러 개의 대상 그룹과 웹사이트를 지원할 수 있다.
(다중 SSL 인증서를 사용해서)
ELB(Elastic Load Balancers)의 SSL 지원 항목
- CLB(Classic Load Balancer)
: 지원하긴 하지만 SSL인증서를 하나만 둘 수 있다.
: 여러 개의 인증서로 여러 호스트 이름을 지원하려면 클래식 로드 밸런서 자체를 여러 개 둬야 한다. - ALB(Application Load Balancer)
: V2 밸런서로 여러 개의 SSL 인증서를 두고 리스너를 여러 개 지원할 수 있다. 거기에 SNI를 사용하는 것이다.
(위에 이미지처럼) - NLB(Network Load Balancer)
: 여러 개의 SSL인증서로 다중 리스너를 지원한다.
'AWS(Amazon Web Service)' 카테고리의 다른 글
[AWS] ASG(Auto Scaling Group) (1) | 2024.10.05 |
---|---|
[AWS] ELB의 연결 드레이닝 (0) | 2024.10.04 |
[AWS] ELB의 교차 영역 밸런싱 (0) | 2024.10.02 |
[AWS] ELB의 고정 세션(Sticky Seccions) (0) | 2024.10.01 |
[AWS] GWLB(AWS의 관리형 로드 밸런서 中) (0) | 2024.09.30 |