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초 정도 걸렸습니다.