WiseN

[긴급공지] RDS SSL/TLS 인증서 교체 안내

Jan 16, 2020   |   AWS

작성자_최준승

페이스북 공유하기 트위터 공유하기
Blog thumbnail

들어가며



안녕하십니까. GS네오텍 최준승입니다.

오늘은 "용건만 간단히" 포스팅을 하려고 합니다. 현재 이 글을 읽고 있는 여러분이 RDS 환경을 사용중이라면, 그리고 해당 인스턴스 연결/인증시 표준 SSL/TLS 인증서를 사용했다면 꼭 읽어보셔야 합니다. 2015년 경부터 사용해온 인증서에 만료 주기가 도래했기 때문입니다. 여러분이 담당자라면 반드시 미리 대비를 하셔야 합니다. 안그래도 AWS가 아주 다양한 방법(메일/콘솔 팝업/별도 안내페이지 등)으로 사용자 안내를 하고 있는 중이라 이슈를 아예 모르시는 분은 많지 않을 겁니다.

시작합니다.

 

CA 인증서 갱신 안내


AWS 관리 콘솔상의 안내 사항입니다.



관련하여 AWS 블로그의 공식 링크는 다음과 같습니다.
Amazon RDS customers: Update your SSL/TLS certificates by February 5, 2020
Rotate Your Amazon RDS, Aurora, and Amazon DocumentDB (with MongoDB compatibility) Certificates

내용을 항목별로 짧게 요약합니다.

▨ 개요

  • ​​RDS 계열 서비스에서 사용하는 CA-2015 인증서 유효기간이 만료됩니다. 업데이트(Rotation)가 필요합니다
    → 물론 Application - DB간 연결 단계에서 인증서를 사용하지 않는 경우, 직접적인 연관은 없으나 영향도는 있음

 

▨ 대상 서비스/엔진

  • ​​RDS(Aurora): MySQL, PostgreSQL
  • RDS(Aurora 外): MySQL, PostgreSQL, Oracle, SQL Server, MariaDB
  • DocumentDB

▨ ​적용 일정

  • 2019/09/19 ~
    CA-2019 인증서 공개 및 적용 가능
  • 2020/01/14 ~
    이 시점 이후로 새로 생성되는 인스턴스는 CA-2019 인증서를 기본 설정값으로 취함
    (물론 기존 인스턴스는 강제로 인증서 설정이 변경되지 않음 → 사용자가 수동으로 변경처리 해야 함)
  • 2020/02/05(1차 Deadline): 이 시점 전까지 사용자가 업데이트 작업을 계획적으로 수행하는 것을 권장합니다
    사용자 작업 데드라인 → 이 시점 전후로 기존 인스턴스에 CA-2019 인증서가 설치됨 (Install but not activate)
    새로운 인증서(CA-2019) 사용(Activation) 설정은 인스턴스 재시작(사용자에 의한 or 예약된 유지보수 기간에)시 적용됨
    → Application측 인증서 설정과 인스턴스측 설정이 불일치시 인증 문제 발생
  • 2020/03/05(2차 Deadline): 이 시점 전까지 업데이트 작업이 반드시 완료되어야 합니다
    기존 CA-2015 인증서 유효기간 만료일
    새로운 인증서(CA-2019) 기준으로 "Application 설정 && 인스턴스 설정" 미완료시 상호간 연결이 끊기게 됨

 

▨ ​업데이트 적용 순서

  • ​​STEP1: 업데이트를 수행할 시간을 계획/공지합니다
    정기PM 시간을 활용하거나 별도 일정을 잡아 순단이 발생할 수 있음을 사전에 공지합니다

  • STEP2: 자신이 사용하는 Application에 맞춰 연결 설정을 새 인증서 기준으로 변경합니다
    Amazon DocumentDB
    Amazon RDS(MariaDB)
    Amazon RDS(SQL Server)
    Amazon RDS(MySQL)
    Amazon RDS(Oracle)
    Amazon RDS(PostgreSQL)
    Amazon RDS(Aurora/MySQL)
    Amazon RDS(Aurora/PostgreSQL)

  • STEP3: 인스턴스 측에서 새 인증서를 사용하는 설정으로 변경합니다
    Certificate authority 항목값을 ca-2015에서 ca-2019로 변경합니다
    → 변경사항을 즉시 적용하려면 "Apply immediately" 옵션을 선택합니다

  • STEP4: 양측 설정 변경이 완료되었으면, 새로운 설정 기준으로 연결을 테스트합니다
    연결에 문제가 없을 경우, 전체 서비스를 재기동하고 유지보수 작업을 종료합니다

  • STEP5: 2024년에도 같은 작업이 반복될 수 있음을 마음속에 담아둡니다

▨ ​서비스별 공식 안내 페이지


변경 작업과 관련된 세부 사항은 위에서 전달드린 공식 링크를 참조하세요.


 

CA 인증서 변경 데모


그럼 제가 한번 해보도록 하겠습니다.

Application 별로 경우의 수가 너무 다양하게 나뉘기 때문에 모든 변경 과정을 보여드릴 수는 없구요.
대신 아주 간단한 시나리오로 범위를 좁혀서 데모를 진행합니다.

  • 단일 인스턴스로 구성된 RDS(MySQL) 인스턴스(2020/01/14 이전에 생성한, CA-2015 기본값)를 대상으로
  • 인스턴스측 CA 설정을 CA-2015에서 CA-2019로 변경한 후(즉시 적용)
  • 클라이언트측에서 두가지 버전의 CA 인증서를 가지고 간단한 연결 테스트를 수행 

 

▨ 인스턴스측 변경 작업 전 (CA-2015 사용)


 

현재 RDS 인스턴스의 인증서 설정이 rds-ca-2015로 되어 있습니다.

$ ll
total 8
-rw-r--r-- 1 ec2-user ec2-user 1432 Jan 21 05:01 rds-ca-2015-root.pem
-rw-r--r-- 1 ec2-user ec2-user 1456 Jan 21 05:01 rds-ca-2019-root.pem

두개의 루트 인증서를 미리 클라이언트 측에 받아두었습니다.
(참고로 루트 인증서 및 각 리전별 인증서는 이 링크를 통해 다운로드할 수 있습니다)

$ mysql -h database-2.cwy629cxvxr9.ap-northeast-2.rds.amazonaws.com --ssl-ca=./rds-ca-2015-root.pem --ssl-verify-server-cert -P 3306 -u admin -p

Enter password:
Welcome to the MySQL monitor.  Commands end with ; or g.
Your MySQL connection id is 1774
Server version: 5.6.44-log Source distribution (후략)

ca-2015 인증서를 사용하여 인증하였습니다. 정상적으로 접속되었습니다.

▨ 인스턴스측 변경 작업 후 (CA-2019 사용)

[Modify] 선택 후 [Certificate authority] 항목값을 "rds-ca-2015"에서 "rds-ca-2019"로 변경합니다.



변경 내역을 확인하고 적용 시점을 "Apply immediately"로 설정하여 즉시 적용합니다.

인스턴스 리부팅이 완료된 후, 해당 항목이 rds-ca-2019로 변경된 것을 확인할 수 있습니다.

동일하게 연결 테스트를 해봅니다.

$ mysql -h database-2.cwy629cxvxr9.ap-northeast-2.rds.amazonaws.com --ssl-ca=./rds-ca-2015-root.pem --ssl-verify-server-cert -P 3306 -u admin -p

Enter password:
ERROR 2026 (HY000): SSL connection error: error:00000001:lib(0):func(0):reason(1)

ca-2015 인증서를 사용하니 인증에 실패합니다. (클라이언트측은 ca-2015 사용, 인스턴스측은 ca-2019 설정값 적용)

$ mysql -h database-2.cwy629cxvxr9.ap-northeast-2.rds.amazonaws.com --ssl-ca=./rds-ca-2019-root.pem --ssl-verify-server-cert -P 3306 -u admin -p

Enter password:
Welcome to the MySQL monitor.  Commands end with ; or g.
Your MySQL connection id is 4
Server version: 5.6.44-log Source distribution (후략)

이번엔 ca-2019 인증서를 사용하여 인증하였습니다.
양측 설정이 일치하므로 정상적으로 접속에 성공하는것을 확인할 수 있습니다.

 

마치며


관련하여 AWS 측에서 정리해 놓은 Q&A 몇개를 발췌하여 내용을 보충합니다.
(상세 내용은 포스팅 앞에 링크되어 있는 공식 블로그 글을 참고하세요)

저는 인증 단계에서 SSL/TLS를 사용하지 않는데, 이 경우에도 관련 작업을 해야 합니까?
→ 연결은 문제가 없지만, 인스턴스측 설정이 강제 변경되는 과정에서 예측치 못한 리부팅이 발생할 수 있습니다. 따라서 사전에 수동으로 설정을 적용하거나 재부팅 없이 적용하는 옵션을 사용해야 합니다. 

RDS(DocumentDB 포함) 인스턴스는 모든 엔진에 영향이 있나요?
​ Aurora Serverless DB 클러스터를 제외한 모든 것들이 대상에 포함됩니다.

해당 업데이트가 모든 리전에 적용되나요?
→ Bahrain / Hong Kong / Ningxia / GovCloud는 이번 Rotation 대상에서 제외됩니다.

사용자가 미리 작업해야 하는 데드라인이 2020년 2월인가요? 3월인가요?
→ 되도록 2월 5일 이전에 사전 작업을 진행하는 것을 권장합니다. 3월 5일은 기존 인증서 만료 기일입니다.

기존 백업본을 가지고 2020/01/14 이후에 새로운 인스턴스를 생성하면 CA-2019 인증서가 적용되나요?
 네, 인스턴스가 생성된 시점으로 1월 14일 이후라면 CA-2019 인증서 설정이 기본값으로 적용됩니다.


참고용으로 ​로컬에 받은 인증서를 대상으로, 실제 유효기간이 어떻게 되는지 확인해 보았습니다.

CA-2015는 2020-03-05 18시가 KST 기준으로 만료 시점입니다.

 


CA-2019는 2024년 8월경이 만료 기간이군요. 이때까지는 신경쓰지 않고 잘 쓰시면 되겠습니다.

클라우드 환경에서 공용으로 사용하는 객체에 대해서는 이번과 같은 메인터넌스 작업이 필연적으로 발생할 수밖에 없습니다. 이런 메인터넌스 작업에 있어 벤더가 모든 영역의 작업을 (범위/권한상) 다 해줄수는 없기 때문에, 사용자 관점에서 몇몇 관리 작업을 동시에 해줄 필요가 있습니다. 다행히 AWS는 굉장히 다양한 방법을 통해 이런 사항을 사용자에게 고지하고 있습니다. 따라서 사용자는 안내하는 이슈를 사전에 잘 파악하고 가이드대로 몇가지 작업을 해주면 문제가 발생하지 않습니다.

AWS 관리 콘솔이나 메일로 관련 안내를 확인하신 분들께 오늘 포스팅이 도움이 되길 바랍니다. 그럼 끝!