안녕하세요. HYEN입니다.
이번에는 Application Gateway에 SSL 인증서를 적용하여 백 엔드 Application에 HTTPS로 접근하도록 테스트해 보았습니다.
SSL/TLS 관련 정리는 아래 링크를 참조해 주세요!
https://with-cloud.tistory.com/15
Contents
1. Application Gateway의 암호화
먼저 Application Gateway의 암호화에 대해 정리해 보았습니다.
- Application Gateway는 전송 중 데이터 암호화를 위해 인증 기관에서 인증서를 구매하여 서버로 들어오고 나가는 메시지를 암호화할 수 있습니다. 이러한 암호화를 통해 전송 중인 메시지를 권한 없는 사용자가 가로채서 그 안에 있는 정보를 볼 수 없게 됩니다.
- Application Gateway는 HTTP 트래픽 로드 밸런싱, WAF 방화벽 및 데이터의 SSL 암호화 지원과 같은 기능을 제공합니다. 또한 사용자와 Application Gateway 간의 트래픽, Application Server와 Application Gateway 간의 트래픽 암호화를 지원합니다.
- 기본적으로 SSL Termination 수행 시 사용자와 Application Gateway 간의 트래픽은 HTTPS로 암호화되고 Application Gateway와 Backend Server 간의 트래픽은 HTTP로 통신이 이루어집니다.
- 만일, Application Gateway에서 Backend Server로 가는 트래픽 역시 HTTPS로 암호화하여 구성하고 싶을 경우 Application Gateway에서 지원하는 End-to-End TLS 암호화를 구성하면 됩니다.
- 기본적으로 SSL Termination 수행 시 사용자와 Application Gateway 간의 트래픽은 HTTPS로 암호화되고 Application Gateway와 Backend Server 간의 트래픽은 HTTP로 통신이 이루어집니다.
- Application Gateway에서 SSL Termination을 수행할 경우 서버에 인증서를 설치하고 SSL을 구성할 필요가 없어집니다.
2. Application Gateway를 통한 트래픽 암호화 로직
Application Gateway를 통한 트래픽이 암호화 되는 방식에 대해 좀 더 알아보겠습니다.
- 트래픽은 Frontend의 포트를 통해 들어오고 수신기를 거쳐 규칙에 맞게 수신 요청을 Backend Pool에 전달합니다.
- 수신기 (Listener)
- 특정 호스트, 특정 IP 주소의 특정 포트를 수신 대기하도록 설정된 리소스로 SSL 인증서를 사용하여 Application Gateway로 들어오는 트래픽을 암호 해독 할 수 있습니다.
- 수신기가 지원하는 포트 (여러 포트 open 가능)는 다음과 같습니다.
- 특정 호스트, 특정 IP 주소의 특정 포트를 수신 대기하도록 설정된 리소스로 SSL 인증서를 사용하여 Application Gateway로 들어오는 트래픽을 암호 해독 할 수 있습니다.
SKU | Supported Port Range | Exceptions |
V2 | 1 ~ 64999 | 22 |
V1 | 1 ~ 65502 | 3389 |
3. Application Gateway의 TLS Termination
그렇다면 TLS Termination 구성의 장점은 무엇일까요?
(https://learn.microsoft.com/ko-kr/azure/application-gateway/ssl-overview#tls-termination에 대해서 읽어보시는 것을 권장 드립니다.)
- TLS 암호 해독 시 성능에 가장 부하를 주는 것은 초기 Handshake이기 때문에 Application Gateway에서 TLS Termination을 수행할 경우, Client의 모든 요청에 대해 캐시된 값을 사용할 수 있습니다.
cf) Backend Server에서 TLS Termination 수행할 경우, Client의 요청이 다른 Server로 갈 때마다 Client가 다시 인증을 해야 하는 번거로움이 발생합니다. - SSL/TLS 통신 시 CPU 사용률이 높으며 SSL/TLS 통신 시 사용하는 키의 크기가 커짐에 따라 이 사용률은 더 증가하고 있습니다. 그렇기 때문에 Backend Server에서 이 작업을 하지 않을 경우 Server는 데이터를 가장 효율적으로 전달할 수 있는 방식에 대해서만 집중할 수 있게 됩니다.
- Application Gateway가 트래픽의 암호를 해독할 때 헤더, URI 등에 액세스 할 수 있기 때문에 이를 활용하여 요청을 지능적으로 라우팅할 수 있습니다.
- Application Gateway에만 Certificate를 설치하면 되기 때문에 시간과 비용을 절약할 수 있습니다.
✅ TLS Termination을 구성하기 위해서는 TLS/SSL Certificate가 반드시 수신기에 구성되어 있어야 합니다.
✅ Application Gateway에 제공된 인증서는 개인키와 공개키를 모두 포함하는 PFX(개인 정보 교환) 형식이어야 합니다.
❌ Application Gateway는 새 인증서를 만들거나 인증 기관에 인증서 요청을 보내는 기능을 제공하지 않습니다.
이를 통해 Application Gateway는 들어오는 트래픽을 해독하고 Client에 대한 response 트래픽을 암호화할 수 있습니다.
3.1 Backend Server TLS 암호화
※ 이번 포스팅에서는 이 부분에 대한 테스트를 다루고 있지는 않습니다.
- Backend Server로 전달되는 트래픽을 암호화하여 보내고자 할 경우 Application Gateway의 End-to-End TLS 암호화 기능을 사용하면 됩니다.
- End-to-End TLS는 백 엔드 설정에서 백 엔드 프로토콜을 HTTPS로 변경하여 사용 가능합니다.
4. Application Gateway의 TLS Termination 구성
4.1 SSL Certificate 만들기
4.1.1 회원 가입
- SSL Certificate를 무료로 발급할 수 있는 사이트(ex. https://www.sslforfree.com/) 접속한 후 회원 가입을 진행합니다.
- Certificate 관련 메일이 수신되기 때문에 사용하는 메일을 이용해야 합니다.
4.1.2 Certificate 생성
- [New Certificate] 클릭
- Certificate를 발급 받고자 하는 도메인을 입력합니다.
- [90-Day Certificate]를 선택합니다.
4.1.3 도메인 인증
실제로 도메인을 소유하고 있는지 여부를 확인하기 위한 단계로 제공하는 3가지 방법 (Email Verification, DNS(CNAME), HTTP File Upload) 중 가능한 방법으로 인증하면 됩니다.
※ 본 테스트에서는 DNS(CNAME)을 사용하였습니다.
- Name, Point To, TTL을 각각 복사하여 DNS Provider에 CNAME Record를 추가합니다.
- 가비아에서 구매한 도메인에 대해 Azure DNS의 Name Server를 사용하도록 설정해 두었기 때문에 Azure Portal에 접속하여 해당 DNS Zone에 Record를 등록해야 합니다.
4.1.4 Certificate Download
- [Download Certificate (.zip)] 버튼을 클릭합니다.
- zip 파일을 압축 해제 합니다.
4.1.5 SSL Certificate 포맷 변환 (.crt → .pfx)
- Win64 OpenSSL Command Prompt 실행한 후 다운로드 받은 폴더로 Directory를 변경합니다.
- pfx 파일로 변환하기 위해 하기와 같은 명령어를 입력합니다.
- pkcs12 -export -out hyein-certificate.pfx -inkey private.key -in certificate.crt -certfile ca_bundle.crt
- 상기 명령어 실행 시 “Enter Export Password” 문구가 출력되면 Certificate의 암호로 사용할 password를 입력합니다.
- pkcs12 -export -out hyein-certificate.pfx -inkey private.key -in certificate.crt -certfile ca_bundle.crt
- 변환된 Certificate를 확인합니다.
4.2 Application Gateway에 Certificate 업로드
4.2.1 수신기 생성 및 Certificate 업로드
프로토콜 : HTTPS
포트 : 443 # 기존에 수신기가 이미 존재할 경우, 그 수신기와 겹치지 않는 포트 기입 필요
PFX 인증서 파일 : # pfx 파일로 변환한 Certificate 업로드
암호 : # pfx 형식의 Certificate 생성 시 입력한 암호 입력
4.2.2 규칙 생성
- [수신기] 선택
- [백 엔드 대상] 선택
4.3 HTTPS를 사용하여 Application 접근
- https://hyein.<domain name>을 입력하면 아래와 같이 정상적으로 Application에 접근이 가능한 것을 확인할 수 있습니다.
- 하기와 같이 주소창 옆 [사이트 정보 보기] 버튼을 클릭한 후 "이 연결은 안전합니다."라는 항목을 클릭할 시, 아래와 같이 인증서와 관련된 정보를 확인할 수 있습니다.
\
이상으로, Application Gateway에 SSL Certificate를 업로드하여 Application에 HTTPS로 접근하는 방법에 대해 알아보았습니다. 👏🏻 👏🏻 👏🏻
'TOPIC > Infra' 카테고리의 다른 글
Virtual Machine으로 Kubernetes Cluster 구성하기 (2) (0) | 2024.03.11 |
---|---|
Virtual Machine으로 Kubernetes Cluster 구성하기 (1) (0) | 2024.03.07 |
Kubernetes Network Policy 공부하기 (2) (1) | 2024.01.12 |
Kubernetes Network Policy 공부하기 (1) (0) | 2024.01.10 |
Kubernetes Namespace 간 Ingress 트래픽 라우팅 하기 (1) | 2024.01.03 |