AWS RDS 인증서 만료에 따른 인증서 업데이트

Hyunho Jung
finda 기술 블로그
9 min readSep 11, 2023

--

Motivation

안녕하세요. 핀다 DBA로 근무하고 있는 정현호 라고 합니다.

얼마전에 RDS CA 인증서의 만료가 1년 앞으로 다가오게 되었고 그에 따라서 얼마전부터 Health Dashboard 와 Databases requiring certificate update 통해 관련 내용이 통지가 되고 있습니다.

PHD(Personal Health Dashboard)

그래서 이번 글도 이전의 SSL/TLS 접속과 관련된 포스팅과 유사하고 이어지는 내용으로 SSL/TLS 접속과 관련된 AWS RDS의 CA 인증서 만료와 업데이트에 대한 내용에 대해서 이야기해보려고 합니다.

TLS Handshake 와 인증서

SSL/TLS 접속과 관련된 포스팅에서 간단하게 설명된 내용으로 SSL/TLS 통신을 하면서 Handshake 과정을 진행되게 됩니다.

Unsplash 의 Richy Great

SSL/TLS 보안 프로토콜을 통해서 안전한 통신을 위해 양측(서버, 클라이언트)에서의 서로에 대한 신뢰된 정보 및 메세지를 교환 및 확인하고 암호화 코드 설정 및 세션 키의 동의를 위해서 메세지를 주고받는 일련의 과정을 거치게 돼요

TLS 핸드셰이크의 원리는 무엇일까요? — CLOUDFLARE

사람이 만나서 인사를 나누듯이 SSL/TLS의 Handshake 과정에서 “client hello” , “server hello’ 의 메세지를 주고받아요

그 다음 단계에서 클라이언트는 서버의 인증서에 대한 검증을 수행하며 인증서의 만료여부도 확인을 합니다.

그래서 인증서의 만료가 되었을 경우 인증서가 유효하지 않다는 오류가 발생되면서 Handshake가 실패하게 됩니다.

따라서 서버의 인증서의 만료일 이전에 새로운 인증서로 교체(업데이트)를 해야 SSL/TLS Handshake 과정에서 인증서 만료로 인한 오류를 방지할 수 있습니다.

인증서 만료 정보

Amazon RDS 인증 기관 인증서 rds-ca-2019는 2024년 8월에 만료될 예정이에요

Connectivity&Security 탭에서 확인되는 인증서 만료 일자 정보

AWS RDS DB 인스턴스에 연결에서 SSL/TLS(전송 계층 보안)을 사용한다면 새로운 CA 인증서 rds-ca-rsa2048-g1, rds-ca-rsa4096-g1, rds-ca-ecc384-g1 중 하나로 만료 전에 업데이트를 고려해야 합니다.

인증서 종류

Amazon RDS는 DB 인스턴스의 서버 인증서에 서명할 수 있는 CA를 다음과 같이 제공하고 있어요

사용가능한 CA 목록

현재 사용중인 인증서(업데이트 대상)은 rds-ca-2019 이며, 업데이트 시 선택할 수 있는 인증서는 rds-ca-rsa2048-g1, rds-ca-rsa4096-g1, rds-ca-ecc384-g1 로 3개의 인증서는 향후 만료 시 자동 교체를 지원하고 있어요

rds-ca-ecc384-g1과 rds-ca-rsa4096-g1 은 만료일이 2121년 5월 21일이고,
rds-ca-rsa2048-g1의 만료일은 2061년 5월21일입니다.

새로운 3개 인증서 모두 향후 자동 인증서 교체를 지원한다고 해요

인증서 업데이트 시 재시작 여부

CA 인증서 업데이트 과정에서 사용하는 DB Engine 에 따라서 재시작이 될 수도 있기 때문에 사전에 재시작 되는 대상의 판별이 필요해요

aws cli describe-db-engine-versions 명령어를 통해서 재시작이 필요한 DB Engine과 상세 버전을 확인할 수 있어요

describe-db-engine-versions 명령어에서 확인되는 정보 중에서 SupportsCertificateRotationWithoutRestart 값이 false 인 대상이 재시작이 되는 DB Engine 입니다.

  • 전체 대상 중에서 재시작 되는 DB Engine 조회 명령어
aws rds describe-db-engine-versions --query \
'DBEngineVersions[?SupportsCertificateRotationWithoutRestart==`false`].
{Engine: Engine, EngineVersion: EngineVersion,
SupportsCertificateRotationWithoutRestart: SupportsCertificateRotationWithoutRestart}' \
--no-cli-pager
  • 특정 엔진만 조회하고자 할 경우 — engine 옵션을 추가해서 조회
aws rds describe-db-engine-versions --engine [엔진명] --query \
'DBEngineVersions[?SupportsCertificateRotationWithoutRestart==`false`].
{Engine: Engine, EngineVersion: EngineVersion,
SupportsCertificateRotationWithoutRestart: SupportsCertificateRotationWithoutRestart}' \
--no-cli-pager
  • AWS RDS에서 지원되는 전체 DB Engine 에 대한 목록
aws rds describe-db-engine-versions --query \
'DBEngineVersions[].{Engine: Engine}' \
--no-cli-pager --output text | sort -u

조회 결과를 살펴보면 재부팅이 되는 DB Engine의 경우 상대적으로 이전 버전의 Engine 버전이며, 가급적 최신 버전인 경우 대부분 재시작 없이 인증서 업데이트가 가능한 것으로 확인할 수 있어요

만약 SupportsCertificateRotationWithoutRestart 값이 조회되지 않을 경우(null로 출력될 경우) awscli 를 최신 버전으로 업데이트를 해야 합니다.

# Linux 기준
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install --update

인증서 업데이트

RDS의 CA 인증서 업데이트는 인스턴스의 Modify(수정)을 통해서 진행할 수 있어요

Modify 항목 중간에 새로운 인증서를 선택할 수 있으며 DB Engine 별로 선택할 수 있는 인증서의 종류가 다를 수 있어요

RDS for MySQL 5.7
RDS for MySQL 8.0

인증서를 선택하였다면 하단의 Continue(계속) 버튼을 클릭합니다.

Maintenance Window에 수행이 아닌 즉시 수행한다면 “Apply immediately” 를 선택 후 하단의 “Modify DB instance” 버튼을 클릭합니다.

인증서 업데이트 작업이 완료되면 다음과 같이 선택한 인증서로 변경된 것과 만료 일자를 확인할 수 있어요

인증서 업데이트 재부팅 소요시간

테스트 대상은 RDS for MySQL 5.7 과 Aurora MySQL 2 버전 인스턴스 대상으로 수행하였습니다.

사용하는 인스턴스의 클래스와 작업 시 워크로드 등에 따라서 시간은 달라질 수 있기 때문에 참고 정도만 해주시고 실제 작업 전 개발/테스트 환경에서 시간 측정은 해보시는 것을 권장 드릴게요

RDS for MySQL 5.7 와 Aurora MySQL 2버전 소요 시간은 동일(유사) 하였습니다.

  • Backup 활성화 조건, Multi-AZ 활성화 와 비활성화 동일 시간 소요
  • 웹 콘솔에서 Logs & events 상으로 진행 기준 약 2~3분 정도 소요
  • 실제 접속이 중단되는 재시작은 8~20초 소요

제공되는 서비스 와 비지니스의 특정에 따라서 블루/그린 형태의 Out-Of-Place 하는 것이 유리한지 또는 실제로 접속이 불가능한 시간은 길지 않기 때문에 점검 공지를 하고 진행할지 등에 대해서는 서비스나 업무 특성을 고려해서 결정하시면 될 것 같습니다.

참고로 재시작 되지 않은 DB Engine의 경우 인증서 업데이트 작업 시 Logs & events 에 별도의 로그가 남지 않지 않습니다.

Aurora 2.10 이하 버전에서

Aurora MySQL 기준으로 Writer 인스턴스에 인증서 업데이트를 수행하여도 강제로 Fail-over 되지는 않습니다.

다만 Aurora MySQL 2.10 이하 버전 중에서 재시작 되는 엔진 버전의 경우 Writer 인스턴스의 인증서를 업데이트 하는 과정에서 재시작 발생시에 Reader 인스턴스도 같이 재시작이 발생합니다.

Writer 인스턴스의 재시작에 따른 Reader 인스턴스 재시작시 Logs & events 내역

Time                                          System notes
-------------------------------------------------------------------------
September 05, 2023, 16:16 (UTC+09:00) DB instance restarted
September 05, 2023, 16:16 (UTC+09:00) Read replica has fallen behind the master too much. Restarting Mysql.

사용하는 DB Engine 버전 종류에 따라서 재시작이 필요한 대상이 많을 경우도 있을 수 있는데요

아직은 시간이 1년 정도 많이 남은 만큼 서비스 특성을 고려해서 계획을 세우고 진행한다면 원만하게 진행되시리라 생각됩니다.

긴 글을 읽어 주셔서 감사해요!

다음에 또 만나요👋 감사합니다.

--

--

Hyunho Jung
finda 기술 블로그

Database Administrator at finda, Tech Stack : MySQL, AWS Aurora , Oracle, MongoDB, Linux