RDS의 SSL/TLS CA 인증서 업데이트

은경·2024년 5월 8일

[AWS] RDS

목록 보기
5/5

🚀 ISSUE


기존 사용중이던 Amazon RDS 인증 기관 인증서 (rds-ca-2019)가 2024년 8월 22일 만료됨에 따라 모든 DB 인스턴스의 인증서 교체를 해야하는 이슈가 있습니다.

2024년에 만료되는 Amazon RDS 및 Amazon Aurora용 SSL/TLS 인증서 지금 교체하세요


🚀 개요


AWS 에서 2020년에 업데이트된 RDS SSL/TLS 인증기관(rds-ca-2019) 인증서가 → 2024년 만료
이후 AWS에서 긴 기간 동안 유효한 새 CA 인증서를 릴리스 함으로 해당 인증서로 교체 해야합니다.
교체된 CA는 각 DB 인스턴스에 설치되는 DB 서버 인증서를 서명하고 DB 서버 인증서는 DB 인스턴스를 신뢰할 수 있는 서버로 식별합니다.

인증기관(CA)유효기간인증서 자동교체 지원알고리즘
rds-ca-20192024 만료지원 안함RSA 2048 , SHA256
rds-ca-rsa2048-g140년지원RSA 2048 , SHA256
rds-ca-rsa4096-g1100년지원RSA 4096 , SHA384
rds-ca-ecc384-g1100년지원ECC 384 , SHA384


📌 자동 서버 인증서 교체

CA에서 자동 서버 인증서 교체를 지원하는 경우 RDS는 DB 서버 인증서의 교체를 자동으로 처리합니다. RDS는 자동 교체에 동일한 루트 CA를 사용하므로 사용자가 새 CA 번들을 다운로드할 필요가 없습니다.

  • DB 엔진이 재시작 없는 교체를 지원하는 경우 → RDS는 사용자가 별도의 조치를 취하지 않아도 DB 서버 인증서를 자동으로 교체합니다. 새 DB 서버 인증서는 12개월 동안 유효합니다.
  • DB 엔진에서 재시작 없이는 교체할 수 없는 경우 → 새 DB 서버 인증서는 36개월 동안 유효합니다.

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

CA 인증서 업데이트 과정에서 사용하는 DB Engine 에 따라서 재시작이 될 수도 있습니다.

  • aws cli describe-db-engine-versions 명령어로 재시작이 필요한 DB Engine과 버전 확인
  • SupportsCertificateRotationWithoutRestart : false 인 대상이 재시작이 되는 DB Engin
    {
        "Engine": "mysql",
        "EngineVersion": "8.0.36",
        "DBParameterGroupFamily": "mysql8.0",
        "DBEngineDescription": "MySQL Community Edition",
        "DBEngineVersionDescription": "MySQL 8.0.36",
        "ValidUpgradeTarget": [],
        "ExportableLogTypes": [
            "audit",
            "error",
            "general",
            "slowquery"
        ],
        "SupportsLogExportsToCloudwatchLogs": true,
        "SupportsReadReplica": true,
        "SupportedFeatureNames": [],
        "Status": "available",
        "SupportsParallelQuery": false,
        "SupportsGlobalDatabases": false,
        "MajorEngineVersion": "8.0",
        "SupportsBabelfish": false,
        **"SupportsCertificateRotationWithoutRestart": true,**
        "SupportedCACertificateIdentifiers": [
            "rds-ca-2019",
            "rds-ca-ecc384-g1",
            "rds-ca-rsa4096-g1",
            "rds-ca-rsa2048-g1"
        ]
    }

🚀 인증서 교체


📌 확인 사항

  • 기존 만료되는 인증서와 rds-ca-rsa2048-g1 (40년)는 동일한 구성을 사용하므로 호환성이 뛰어나기 때문에 이슈가 발생 하지 않을 것으로 예상됩니다.
    • 100년 인증서(rds-ca-rsa4096-g1 및 rds-ca-ecc384-g1)는 더 안전한 암호화 체계를 사용하나
      기존 서명알고리즘 구성이 다르므로 호환성 문제가 있을 수 있습니다.
  • 현재 DB에 사용중인 MySQL 엔진 버전이 재시작 없는 인증서 교체를 지원 하므로 1년마다 인증서가 자동으로 교체 되며 따로 수정할 필요가 없습니다.
  • 신규 인증서로 교체 시 AWS에서 제공하는 인증서 번들 키로 기존 키와 교체를 해야하는데 해당 키는 만료예정 CA와 (rds-ca-2019) 신규 CA에 대한 모든 인증서가 포함되어 있어 미리 교체 후 배포 하고 이후에 RDS의 CA만 수정해도 이슈가 없을 것으로 예상됩니다.

📌 배포 프로세스

  1. 새 SSL/TLS 인증서를 다운로드
  2. 새 SSL/TLS 인증서를 사용하도록 서버 수정 및 배포
  3. DB 인스턴스 수정 → 인증기관 (CA) 변경 : rds-ca-rsa2048-g1
    • 인증서 교체 시간은 대략 2분정도 소요 됩니다. (Log이벤트 기준)

📌 CA 인증서를 Secret Manager로 관리 하도록 수정

Secret Manager 에서 인증서 bundle 키를 관리할 수 있음

  1. AWS Secret Manager에 신규 보안 암호를 생성 → rds/ssl_ca/mysql
  2. RDS CA 번들 키(ap-northeast-2-bundle.pem)의 내용을 plain text로 저장
  3. 각 프로젝트에서 DB 커넥션을 위해 secret을 가져오는 부분에서 신규 보안 암호도 가져오는 로직 추가
  4. 서버 실행 시 가져온 보안 암호의 내용으로 .pem 파일을 쓰고 저장하는 로직을 추가
  5. DB uri의 ssl_ca 옵션에 신규로 생성한 파일의 path를 사용하도록 수정
    1. 서버가 재실행 되어도 파일이름이 같기 때문에 파일이 중복 생성되지 않음.
    2. 추후 인증서가 변경 되어도 Secret Manager에서 한번만 수정
    3. 각 프로젝트 마다 별도로 pem파일을 추가/삭제 하며 관리할 필요 없음.
profile
Python 서버 개발자

0개의 댓글