rds-ca-2019 인증서가 2024년 8월 지원 중단되었습니다. 하지만 일부 서비스에서 여전히 rds-ca-2019를 사용하고 있어서 서비스 장애로 연결되었습니다.
본 문서는 서비스 장애 해결 방식과 재발 방지안에 대해서 다루고 있습니다.
장애 기간
XXXX-XX-XX 02:00:00 - 인증서 만료로 인한 장애 발생
XXXX-XX-XX 11:00:00 - 인증서 만료로 인한 장애 최초 식별
XXXX-XX-XX 12:30:00 - 인증서 만료로 인한 장애 조치 완료
장애 식별 방식
Java Application에서 다음과 같이 SSLHandshakeException이 발생하였습니다.
Caused by: javax.net.ssl.SSLHandshakeException: NotAfter: Fri Aug 23 02:08:50 KST 2024
RDS CA 인증서가 만료되어 발생한 에러로서,
사용 중인 RDS를 확인한 결과 XXXX-XX-XX 02:00:00 부로 만료된 rds-ca-2019를 사용하고 있었습니다.
장애 즉각 조치
RDS CA 인증서 교체 간에 RDS 다운타임이 발생하는 지에 대한 정보가 없었기 때문에, 일단 어플리케이션이 가동될 수 있도록 조치해야 했습니다.
작업 예상 시간 1시간 동안, 일부 어플리케이션에 대해서 useSSL=false를 사용하는 것으로 긴급 수정 했습니다.
AS-IS :
jdbc:mysql://HOST:PORT/DB
TO-BE
jdbc:mysql://HOST:PORT/DB:useSSL=false
CA 인증서 교체간 다운타임 테스트
아래 참고문서를 이용해서 dev, stg 망에서 RDS CA 변경으로 인한 다운타임 및 RDS 재시작 확인하였습니다.
RDS CA 인증서 교체 간 CA 변경으로 인한 RDS 재시작 여부가 결정합니다.
CA 변경으로 인한 RDS 재시작 여부는 aws describe-db-engine-versions 명령을 사용하여 확인이 가능합니다.
재시작되는 RDS 조회 [Ref]
aws rds describe-db-engine-versions \ --query 'DBEngineVersions[?SupportsCertificateRotationWithoutRestart==`false`]. {Engine: Engine, EngineVersion: EngineVersion, SupportsCertificateRotationWithoutRestart: SupportsCertificateRotationWithoutRestart}'
재발방지안
사실 꼼꼼하게 확인하고 RDS CA 인증서 만료에 대한 조치를 하는 것이 좋아보입니다. 하지만 현실적으로 멀티 어카운트, 멀티 리전 환경에서 모든 데이터베이스를 수동으로 확인하는 것은 무리가 있습니다.
따라서 알림 기반의 문제 감지와 대시보드 기반의 문제 감지가 그 해결방안이 될 수 있습니다.
카테고리 | AWS Health Dashboard | SteamPipe Dashboard |
---|---|---|
설명 | AWS Managed Service를 통해서 | OpenSauce를 활용하여 |
장점 | 주요 서비스에 대한 핵심 경고 확인 가능 | 다양한 서비스에 대해서 커스텀한 경고 확인 가능 |
단점 | 커스텀이 불가능함 | 주요 서비스에 대한 핵심 경고 누락 가능 |
대시보드 | 지원 [Ref] | 지원 |
알림 | EventBridge + Lambda [Ref] | EC2(FlowPipe + SteamPipe) [Ref] |
서비스 장애까지 연결될 수 있는 핵심 경고를 확인하는 것이 그 목적이므로
AWS Health Dashboard를 기본으로 사용하되 추가적으로 EventBridge 통합이 필요해보입니다.