SSL 종료 및 고정 세션
ACM 인증서를 사용하여 로드 밸런서에서 TLS를 오프로딩하고, 상태 저장 작업 부하에 클라이언트 고정이 필요할 때 고정 세션을 활성화합니다.
SSL 종료 및 고정 세션은(는) CoddyKit의 무료 Cloud & IT Cert Prep 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Cloud & IT Cert Prep 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Cloud & IT Cert Prep 강의에는 총 4개의 강의가 포함되어 있습니다.
로드 밸런서에서의 SSL/TLS 종료
SSL/TLS 종료란 로드 밸런서가 들어오는 HTTPS 트래픽을 복호화하고, 일반 텍스트 HTTP 요청을 검사하여 라우팅을 결정한 다음, 백엔드로 전달하기 전에 필요에 따라 요청을 다시 암호화하는 것을 의미합니다. ALB에서 종료가 이루어지면 애플리케이션 서버는 로드 밸런서에서 암호화되지 않은 HTTP 트래픽을 받을 수 있으므로 백엔드 구성을 간소화할 수 있습니다.
로드 밸런서에서 종료하면 애플리케이션 서버의 CPU 오버헤드가 줄어들고(연결마다 TLS 핸드셰이크를 수행할 필요가 없음), 콘텐츠 기반 라우팅(HTTP 헤더를 읽어야 함)이 가능해지며, 인증서 관리를 중앙 집중화할 수 있습니다.
AWS Certificate Manager (ACM) 통합
AWS Certificate Manager (ACM)은 SSL/TLS 인증서를 추가 비용 없이 프로비저닝하고 관리하며 갱신합니다. ALB와 NLB는 ACM과 직접 통합됩니다. HTTPS 수신기 구성에서 ACM 인증서를 선택하면 로드 밸런서가 연결하는 클라이언트에 해당 인증서를 제시합니다.
ACM 인증서는 만료 전에 자동으로 갱신되므로 수동 갱신이 필요 없고, 인증서 만료로 인한 중단도 발생하지 않습니다. 퍼블릭 인증서의 경우 ACM은 DNS 검증(Route 53의 CNAME 레코드) 또는 이메일 검증을 통해 도메인 소유권을 확인합니다. 내부 용도의 경우 ACM Private CA가 프라이빗 인증서를 발급할 수 있습니다.
# Request a public certificate in ACM
aws acm request-certificate \
--domain-name api.example.com \
--subject-alternative-names '*.example.com' \
--validation-method DNS \
--region us-east-1
# Create an HTTPS listener using the ACM certificate
aws elbv2 create-listener \
--load-balancer-arn arn:aws:elasticloadbalancing:us-east-1:123456789:loadbalancer/app/my-alb/abc \
--protocol HTTPS \
--port 443 \
--ssl-policy ELBSecurityPolicy-TLS13-1-2-2021-06 \
--certificates CertificateArn=arn:aws:acm:us-east-1:123456789:certificate/cert-id \
--default-actions Type=forward,TargetGroupArn=arn:aws:elasticloadbalancing:us-east-1:123456789:targetgroup/my-tg/xyz서버 이름 표시(SNI)
SNI(Server Name Indication)는 단일 IP 주소(따라서 단일 ALB 또는 NLB 수신기)가 서로 다른 도메인 이름에 대해 여러 TLS 인증서를 제공할 수 있도록 하는 TLS 확장입니다. 클라이언트는 TLS ClientHello 메시지에 연결하려는 호스트 이름을 포함하며, 로드 밸런서는 적절한 인증서를 선택합니다.
ALB는 SNI를 기본적으로 지원하므로 단일 HTTPS 수신기에 여러 ACM 인증서를 연결할 수 있습니다. ALB는 클라이언트의 SNI 호스트 이름을 기준으로 올바른 인증서를 자동으로 선택합니다. 따라서 도메인마다 별도의 수신기나 로드 밸런서가 필요하지 않으며, SSL을 사용하는 진정한 가상 호스팅이 가능합니다.
# Add a second certificate to an existing HTTPS listener (SNI)
aws elbv2 add-listener-certificates \
--listener-arn arn:aws:elasticloadbalancing:us-east-1:123456789:listener/app/my-alb/abc/lis456 \
--certificates CertificateArn=arn:aws:acm:us-east-1:123456789:certificate/second-cert-idSSL 보안 정책
ALB와 NLB는 구성 가능한 SSL 보안 정책을 지원합니다. 이 정책은 로드 밸런서가 클라이언트에서 허용할 TLS 프로토콜 버전과 암호 제품군을 제어합니다. AWS는 사전 정의된 정책(예: ELBSecurityPolicy-TLS13-1-2-2021-06)을 제공하며, 새로운 취약점이 발견되면 정책이 업데이트됩니다.
규정 준수 요구 사항에 따라 특정 TLS 버전이 필요할 수 있습니다. PCI-DSS 3.2.1은 TLS 1.2 이상을 요구합니다. 또한 많은 최신 표준에서는 TLS 1.0과 1.1을 완전히 비활성화할 것을 권장합니다. 더 이상 사용되지 않는 프로토콜과 취약한 암호 제품군을 제외하는 정책을 사용하십시오. 순방향 비밀성과 성능을 위해 TLS 1.3이 포함된 정책을 우선적으로 선택하십시오.
# List available SSL policies
aws elbv2 describe-ssl-policies \
--query 'SslPolicies[*].{Name:Name,TLSVersions:SslProtocols}' \
--output table종단 간 암호화와 종료 비교
ALB에서 사용하는 TLS 접근 방식은 두 가지로 구분됩니다.
- SSL 종료(가장 일반적): ALB가 로드 밸런서에서 복호화하고 대상에 일반 HTTP를 전달합니다. 구성이 간단하고 검사를 통한 라우팅이 가능하며 서버 CPU 사용량이 줄어듭니다. VPC 내부의 백엔드 트래픽은 암호화되지 않습니다.
- 종단 간 TLS: ALB가 복호화한 후 대상에 전달하기 전에 다시 암호화합니다(ALB와 대상 사이에서 HTTPS 사용). CPU 사용량이 더 많고 대상에 인증서가 필요하지만, 엄격한 규정 준수 시나리오에서 VPC 내부의 암호화를 보장합니다.
NLB를 TLS 패스스루 모드로 사용하는 경우 NLB는 전혀 복호화하지 않고 원시 TCP를 TLS를 처리하는 대상에 전달합니다. 애플리케이션 서버가 자체 인증서를 관리합니다.
고정 세션: 개념과 사용 이유
고정 세션(세션 친화성이라고도 함)은 동일한 클라이언트의 모든 요청이 대상 그룹 내 동일한 대상에 일관되게 라우팅되도록 합니다. 이는 공유 캐시(예: ElastiCache)가 아닌 개별 서버의 메모리에 세션 데이터를 저장하는 상태 저장 애플리케이션에 필요합니다.
고정 세션이 없으면 상태 비저장 로드 밸런서가 요청 1을 세션을 저장하는 서버 A로 보내고 요청 2를 세션 데이터가 없는 서버 B로 보낼 수 있습니다. 그러면 사용자가 로그아웃된 것처럼 보이거나 장바구니 내용이 사라질 수 있습니다. 고정 세션은 세션이 유지되는 동안 클라이언트를 특정 대상에 연결합니다.
ALB의 쿠키 기반 고정성
ALB는 두 가지 유형의 고정 세션 쿠키를 지원합니다.
- 기간 기반 고정성(로드 밸런서 생성 쿠키): ALB가
AWSALB라는 쿠키를 생성하고 만료 기간을 설정합니다. 쿠키에는 대상에 대한 암호화된 참조가 포함됩니다. 클라이언트는 이후 요청에 이 쿠키를 함께 보냅니다. - 애플리케이션 기반 고정성: 애플리케이션이 설정한 기존 쿠키를 사용합니다. ALB는 사용자가 지정한 쿠키 이름을 읽고, 자체 쿠키에 암호화된 버전을 생성한 뒤 이를 고정 라우팅에 사용하면서 원래 애플리케이션 쿠키는 유지합니다.
대상 그룹별로 고정성을 구성할 수 있으며, 기간은 1초에서 7일까지 설정할 수 있습니다.
# Enable duration-based sticky sessions on a target group
aws elbv2 modify-target-group-attributes \
--target-group-arn arn:aws:elasticloadbalancing:us-east-1:123456789:targetgroup/my-tg/xyz \
--attributes \
Key=stickiness.enabled,Value=true \
Key=stickiness.type,Value=lb_cookie \
Key=stickiness.lb_cookie.duration_seconds,Value=86400고정 세션의 단점
고정 세션은 상태 저장 애플리케이션 문제를 해결하지만 다음과 같은 상충 관계가 생깁니다.
- 불균등한 부하 분산: 특정 클라이언트가 비정상적으로 활발하면 일부 대상에 더 많은 트래픽이 집중되어 부하 분산의 목적이 훼손될 수 있습니다.
- 확장 제한: 고정 대상이 비정상 상태가 되면 세션이 끊깁니다. 클라이언트는 새 대상과 새 세션을 시작해야 하므로 메모리에 저장된 세션 데이터가 손실됩니다.
- 탄력성 저하: 고정 세션을 사용하면 축소 이벤트 중 인스턴스의 연결을 정리하고 종료하기가 더 어려워집니다.
권장 사항: 세션 상태를 ElastiCache 또는 DynamoDB로 외부화하여 고정 세션이 필요하지 않도록 하십시오. 그러면 애플리케이션이 진정한 상태 비저장 방식이 되고 완전한 수평 확장이 가능해집니다.
NLB TLS 수신기 및 패스스루
NLB는 ALB와 유사하게 포트 443(또는 다른 포트)에서 TLS 종료를 위한 TLS 수신기를 지원합니다. NLB는 트래픽을 복호화하고, 필요에 따라 다시 암호화한 후 대상에 전달합니다. 또는 TCP 수신기를 구성하면 NLB가 암호화된 TCP 트래픽을 복호화하지 않고 패스스루할 수 있습니다. 이 모드에서는 애플리케이션 서버가 종단 간 TLS를 처리합니다.
ACM을 사용하는 NLB TLS 종료는 ALB와 동일한 인증서 관리 이점을 제공하지만 HTTP 계층 기능은 제공하지 않습니다. TLS 종료와 고정 IP가 필요하거나 백엔드 프로토콜이 HTTP가 아닌 경우(예: 사용자 지정 TCP 프로토콜) NLB TLS 종료를 사용하십시오.
연결 정리와 고정 세션의 상호 작용
고정 대상이 등록 해제되면(예: Auto Scaling 축소 중) 연결 정리를 통해 진행 중인 요청이 완료될 수 있습니다. 그러나 등록 해제 중인 대상의 AWSALB 쿠키를 여전히 보유한 고정 클라이언트의 새 요청은 자동으로 새 대상에 할당됩니다. 이때 해당 클라이언트의 고정성 쿠키는 무효화됩니다.
등록 해제 지연과 쿠키 무효화를 함께 사용하면 원활한 전환이 가능합니다. 기존의 장시간 요청은 완료되고, 해당 클라이언트의 새 요청은 최종 사용자에게 오류로 표시되지 않으면서 정상 상태인 대상으로 원활하게 다시 라우팅됩니다.
SSL 및 세션 관리 모범 사례
시험에 중요한 모범 사례:
- 자동 갱신을 위해 ACM 인증서를 사용하십시오. 로드 밸런서에서 인증서를 수동으로 관리하지 마십시오.
- TLS 1.2 이상 보안 정책을 사용하고 PCI/HIPAA 규정 준수를 위해 TLS 1.0/1.1을 비활성화하십시오.
- 고정 세션보다 상태 비저장 아키텍처(ElastiCache/DynamoDB에 세션 저장)를 우선하십시오.
- ALB에서 SNI를 사용하여 별도의 로드 밸런서에 여러 인증서를 배치하지 않고 하나의 수신기에서 여러 도메인을 제공하십시오.
- 엄격한 규정 준수가 필요한 경우( VPC 내 데이터는 암호화되어야 함) 로드 밸런서에서만 종료하지 말고 HTTPS 대상 그룹을 사용하여 종단 간 TLS를 적용하십시오.
빠른 확인
이 단원에서 다룬 AWS 솔루션스 아키텍트(SAA-C03) 개념에 대한 이해도를 확인해 보세요.
단원 요약
이 단원에서는 ACM 인증서를 사용하는 ALB SSL/TLS 종료가 여러 도메인에 대해 자동 갱신과 SNI를 제공한다는 것, SSL 보안 정책이 규정 준수를 위해 TLS 버전과 암호 제품군을 제어한다는 것, 그리고 고정 세션이 상태 저장 앱의 사용자를 동일한 대상으로 라우팅하지만 세션 상태를 ElastiCache로 외부화하는 방식으로 대체하는 것이 가장 좋다는 것을 배웠습니다. 다음에는 Auto Scaling 그룹과 시작 템플릿을 살펴봅니다.
자주 묻는 질문
“SSL 종료 및 고정 세션” 강의는 무료인가요?
네 — “SSL 종료 및 고정 세션” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Cloud & IT Cert Prep 강의 전체를 잠금 해제할 수 있습니다. Cloud & IT Cert Prep 강의에는 총 4개의 강의가 포함되어 있습니다.
“SSL 종료 및 고정 세션”에서 뭘 배우나요?
ACM 인증서를 사용하여 로드 밸런서에서 TLS를 오프로딩하고, 상태 저장 작업 부하에 클라이언트 고정이 필요할 때 고정 세션을 활성화합니다. 브라우저에서 직접 실행하는 실습 코드로 Cloud & IT Cert Prep을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Cloud & IT Cert Prep을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Cloud & IT Cert Prep은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.
“SSL 종료 및 고정 세션” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Cloud & IT Cert Prep 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Cloud & IT Cert Prep 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.