RDS 인증서 교체 작업이 있어 확인한 내용을 기록합니다.

변경 가능한 리스트 인증서 및 유효기간

  • rds-ca-rsa2048-g1
  • rds-ca-rsa4096-g1
  • rds-ca-ecc384-g1

무중단 수정 가능 확인 (재 기동)

SupportsCertificateRotationWithoutRestart 값이 true일 경우 RDS 재시작이 필요없습니다.

 

import boto3
import csv
import subprocess


# RDS 클라이언트 생성
region_name = 'ap-northeast-2'
session = boto3.Session(profile_name='test')
rds = session.client('rds', region_name=region_name)


response = rds.describe_db_instances()


# CSV 파일 열기
with open('rds_instances.csv', mode='w', newline='') as file:
    writer = csv.writer(file)

    # 헤더 행 작성
    writer.writerow(['엔진 버전', '인스턴스 이름', '엔드포인트', '엔진 정보'])

    # 각 RDS 인스턴스에 대한 정보 작성
    for db_instance in response['DBInstances']:
        engine = db_instance['Engine']
        if engine == 'docdb':  # DocumentDB 인스턴스 건너뛰기
            continue

        engine_version = db_instance['EngineVersion']
        db_instance_name = db_instance['DBInstanceIdentifier']
        endpoint = db_instance['Endpoint']['Address']
        region = 'ap-northeast-2'  # 필요한 경우 리전을 변경하세요

        command = f"aws rds describe-db-engine-versions --profile test --engine {engine} --engine-version {engine_version} --include-all --region {region}"
        result = subprocess.run(command, shell=True, executable='/bin/zsh',  capture_output=True, text=True)
        if result.stderr:
            print(f"Error: {result.stderr}")
        else:
            engine_info = result.stdout
            jq_filter = '.DBEngineVersions[] | "EngineName: \(.Engine), EngineVersion: \(.EngineVersion), SupportsCertificateRotationWithoutRestart: \(.SupportsCertificateRotationWithoutRestart), SupportedCAs: \(.SupportedCACertificateIdentifiers | join(\", \"))"'
            engine_info = subprocess.run(['jq', '-r', jq_filter], input=engine_info, text=True, capture_output=True).stdout
            writer.writerow([engine_version, db_instance_name, endpoint, engine_info])

 

TLS 통신하는 RDS, 계정 확인 (Mysql)

-- SSL/TLS
SELECT id, user, host, connection_type
FROM performance_schema.threads pst
INNER JOIN information_schema.processlist isp
ON pst.processlist_id = isp.id;

 

 

인증서 교체 전 어플리케이션 이슈 검토

제가 확인한 내용으로 잘못된 정보가 있을 확률이 매우 높습니다. 

 

1. 기존 TLS 통신을 하는 서비스에는 이슈가 없다. 

 - 이유: 신뢰 인증저장소에 AWS Root CA가 등록되어 있는 상태임으로 rds-ca-rsa2048-g1로 교체 해도 이슈는 없다.

2. 만약 외부 인터넷과 통신이 어려운 서비스는 AWS 번들을 신뢰 저장소에 등록이 필요할 것으로 예상 합니다.(완전 추정)

 

교체

순단 이슈는 검토 했지만 따로 기록하지 않겠습니다.

웹 콘솔에서 작업 또는 aws cli 중 선택해서 진행하면 됩니다.

 

참고로 테스트 당시 인증서 교체에 약 26초 정도 걸렸습니다.

+ Recent posts