SSL/TLS 인증서 교체
Amazon RDS 인증 기관 인증서 rds-ca-2019는 2024년 8월에 만료됩니다. RDS DB 인스턴스 또는 다중 AZ DB 클러스터에 연결하기 위해 인증서 확인과 함께 보안 소켓 계층(SSL) 또는 전송 계층 보안(TLS)을 사용하거나 사용할 계획이라면 새 CA 인증서인 rds-ca-rsa2048-g1, rds-ca-rsa4096-g1 or rds-ca-ecc384-g1 중 하나를 사용하는 것을 고려하세요. 현재 인증서 확인과 함께 SSL/TLS를 사용하지 않는 경우에도 CA 인증서가 만료되었을 수 있으며, 인증서 확인과 함께 SSL/TLS를 사용하여 RDS 데이터베이스에 연결하려는 경우 새 CA 인증서로 업데이트해야 합니다.
Amazon RDS는 AWS 보안 모범 사례로 새 CA 인증서를 제공합니다. 새 인증서 및 지원되는 AWS 리전에 대한 자세한 내용은 SSL/TLS를 사용하여 DB 인스턴스 또는 클러스터에 대한 연결 암호화 섹션을 참조하세요.
데이터베이스의 CA 인증서를 업데이트하려면 다음 방법을 사용하세요.
DB 인스턴스 또는 다중 AZ DB 클러스터에서 새로운 CA 인증서를 사용하도록 업데이트하기 전에 RDS 데이터베이스에 연결하는 클라이언트 또는 애플리케이션을 업데이트해야 합니다.
인증서 교체 고려 사항
인증서를 교체하기 전에 다음 상황을 고려하세요.
-
Amazon RDS Proxy 에서는 AWS Certificate Manager(ACM)의 인증서를 사용합니다. RDS 프록시를 사용하는 경우 SSL/TLS 인증서를 교체할 때 RDS 프록시 연결을 사용하는 애플리케이션을 업데이트할 필요가 없습니다. 자세한 내용은 RDS Proxy에서 TLS/SSL 사용 단원을 참조하십시오.
-
2020년 7월 28일 이전에 생성되었거나 rds-ca-2019 인증서로 업데이트된 DB 인스턴스 또는 다중 AZ DB 클러스터가 있는 Go 버전 1.15 애플리케이션을 사용하는 경우 인증서를 다시 업데이트해야 합니다. 엔진에 따라 rds-ca-rsa2048-g1, rds-ca-rsa4096-g1, or rds-ca-ecc384-g1으로 인증서를 업데이트합니다.
새 CA 인증서 식별자를 사용하여 DB 인스턴스의 경우 modify-db-instance
명령 또는 다중 AZ DB 클러스터의 경우 modify-db-cluster
명령을 사용합니다. describe-db-engine-versions
명령을 사용하여 특정 DB 엔진 및 DB 엔진 버전에 사용할 수 있는 CA를 찾을 수 있습니다.
2020년 7월 28일 이후에 데이터베이스를 생성하거나 인증서를 업데이트한 경우에는 아무 조치도 필요하지 않습니다. 자세한 내용은 Go GitHub 문제 #39568를 참조하세요.
DB 인스턴스 또는 클러스터를 수정하여 CA 인증서 업데이트
다음 예제에서는 rds-ca-2019에서 rds-ca-rsa2048-g1로 CA 인증서를 업데이트합니다. 다른 인증서를 선택할 수 있습니다. 자세한 내용은 인증 기관 섹션을 참조하세요.
애플리케이션 트러스트 스토어를 업데이트하여 CA 인증서 업데이트와 관련된 가동 중단 시간을 줄이세요. CA 인증서 교환과 관련된 다시 시작에 대한 자세한 내용은 자동 서버 인증서 교체 섹션을 참조하세요.
DB 인스턴스 또는 클러스터를 수정하여 CA 인증서를 업데이트하는 방법
-
SSL/TLS를 사용하여 DB 인스턴스 또는 클러스터에 대한 연결 암호화에 설명된 대로 새 SSL/TLS 인증서를 다운로드합니다.
-
새 SSL/TLS 인증서를 사용하도록 애플리케이션을 업데이트합니다.
새 SSL/TLS 인증서를 위해 애플리케이션을 업데이트하는 방법은 애플리케이션에 따라 다릅니다. 애플리케이션 개발자와 함께 애플리케이션의 SSL/TLS 인증서를 업데이트하십시오.
SSL/TLS 연결을 확인하고 각 DB 엔진의 애플리케이션을 업데이트하는 방법에 대한 자세한 내용은 다음 주제를 참조하십시오.
Linux 운영 체제의 트러스트 스토어를 업데이트하는 샘플 스크립트는 트러스트 스토어로 인증서를 가져오기 위한 샘플 스크립트 단원을 참조하십시오.
인증서 번들에는 이전 및 신규 CA의 인증서가 들어 있으므로 애플리케이션을 안전하게 업그레이드하고 전환 기간에 연결성을 유지할 수 있습니다. AWS Database Migration Service를 사용하여 데이터베이스를 DB 인스턴스 또는 클러스터로 마이그레이션하는 경우, 연결이 끊기지 않고 마이그레이션이 진행되도록 인증서 번들을 사용하는 것이 좋습니다.
-
DB 인스턴스 또는 다중 AZ DB 클러스터를 수정하여 CA를 rds-ca-2019에서 ca-rsa2048-g1로 변경합니다. CA 인증서를 업데이트하기 위해 데이터베이스를 다시 시작해야 하는지 확인하려면 describe-db-engine-versions 명령을 사용하여 SupportsCertificateRotationWithoutRestart
플래그를 확인합니다.
인증서 만료 후 연결 문제가 발생하는 경우 콘솔에서 즉시 적용을 지정하거나 --apply-immediately
를 통해 AWS CLI 옵션을 지정하여 즉시 적용 옵션을 사용합니다. 기본적으로 이 작업은 다음 유지 관리 기간 중에 실행되도록 예약되어 있습니다.
RDS for Oracle DB 인스턴스의 경우 연결 오류를 방지하려면 Oracle DB를 다시 시작하는 것이 좋습니다.
기본 RDS CA와 다른 인스턴스 CA에 재정의를 설정하려면 modify-certificates CLI 명령을 사용합니다.
AWS Management Console 또는 AWS CLI를 사용하여 DB 인스턴스 또는 다중 AZ DB 클러스터의 CA 인증서를 rds-ca-2019에서 rds-ca-rsa2048-g1로 변경할 수 있습니다.
- Console
-
https://console.aws.amazon.com/rds/에서 AWS Management Console에 로그인한 후 Amazon RDS 콘솔을 엽니다.
-
탐색 창에서 데이터베이스를 선택한 다음 수정하려는 DB 인스턴스 또는 다중 AZ DB 클러스터를 선택합니다.
-
수정을 선택합니다.
-
연결 섹션에서 rds-ca-rsa2048-g1을 선택합니다.
-
[Continue]를 수정 사항을 요약한 내용을 확인합니다.
-
변경 사항을 즉시 적용하려면 즉시 적용을 선택합니다.
-
확인 페이지에서 변경 내용을 검토합니다. 내용이 정확할 경우 DB 인스턴스 수정 또는 클러스터 수정을 선택하여 변경 사항을 저장합니다.
이 작업을 예약하는 경우 클라이언트 측 트러스트 스토어를 미리 업데이트했는지 확인하십시오.
또는 뒤로를 선택하여 변경 내용을 편집하거나 취소를 선택하여 변경 내용을 취소합니다.
- AWS CLI
-
AWS CLI를 사용하여 DB 인스턴스 또는 다중 AZ DB 클러스터의 CA를 rds-ca-2019에서 rds-ca-rsa2048-g1로 변경하려면 modify-db-instance 또는 modify-db-cluster 명령을 직접 호출합니다. DB 인스턴스 또는 클러스터 식별자 및 --ca-certificate-identifier
옵션을 지정합니다.
--apply-immediately
파라미터를 사용하여 업데이트를 즉시 적용합니다. 기본적으로 이 작업은 다음 유지 관리 기간 중에 실행되도록 예약되어 있습니다.
이 작업을 예약하는 경우 클라이언트 측 트러스트 스토어를 미리 업데이트했는지 확인하십시오.
DB 인스턴스
다음 예시에서는 CA 인증서를 rds-ca-rsa2048-g1
로 설정하여 mydbinstance
를 수정합니다.
대상 LinuxmacOS, 또는Unix:
aws rds modify-db-instance \
--db-instance-identifier mydbinstance
\
--ca-certificate-identifier rds-ca-rsa2048-g1
Windows의 경우:
aws rds modify-db-instance ^
--db-instance-identifier mydbinstance
^
--ca-certificate-identifier rds-ca-rsa2048-g1
인스턴스 재부팅이 필요한 경우 modify-db-instance CLI 명령을 사용하여 --no-certificate-rotation-restart
옵션을 지정할 수 있습니다.
다중 AZ DB 클러스터
다음 예시에서는 CA 인증서를 rds-ca-rsa2048-g1
로 설정하여 mydbcluster
를 수정합니다.
대상 LinuxmacOS, 또는Unix:
aws rds modify-db-cluster \
--db-cluster-identifier mydbcluster
\
--ca-certificate-identifier rds-ca-rsa2048-g1
Windows의 경우:
aws rds modify-db-cluster ^
--db-cluster-identifier mydbcluster
^
--ca-certificate-identifier rds-ca-rsa2048-g1
유지 관리를 적용하여 CA 인증서 업데이트
유지 관리를 적용하여 CA 인증서를 업데이트하려면 다음 단계를 수행합니다.
- Console
-
유지 관리를 적용하여 CA 인증서를 업데이트하는 방법
https://console.aws.amazon.com/rds/에서 AWS Management Console에 로그인한 후 Amazon RDS 콘솔을 엽니다.
-
탐색 창에서 인증서 업데이트를 선택합니다.
인증서 업데이트가 필요한 데이터베이스 페이지가 표시됩니다.
이 페이지에는 현재 AWS 리전의 DB 인스턴스 및 클러스터만 표시됩니다. 둘 이상의 AWS 리전에 데이터베이스가 있는 경우 각 AWS 리전에서 이 페이지를 확인하여 이전 SSL/TLS 인증서가 있는 모든 DB 인스턴스를 확인합니다.
-
업데이트할 DB 인스턴스 또는 다중 AZ DB 클러스터를 선택합니다.
일정을 선택하여 다음 유지 관리 기간에 따른 인증서 교체를 예약할 수 있습니다. 지금 적용을 선택하여 즉시 교체를 적용합니다.
인증서 만료 후 연결 문제가 발생하면 지금 적용 옵션을 사용합니다.
-
-
일정을 선택하면 CA 인증서 교체를 확인하라는 메시지가 표시됩니다. 이 메시지에는 예약된 업데이트 기간도 표시됩니다.
-
지금 적용을 선택하면 CA 인증서 교체를 확인하라는 메시지가 표시됩니다.
데이터베이스에서 CA 인증서 교체를 예약하기 전에 SSL/TLS 및 서버 인증서를 사용하여 연결하는 모든 클라이언트 애플리케이션을 업데이트합니다. 이러한 업데이트는 DB 엔진에만 적용됩니다. 이러한 클라이언트 애플리케이션을 업데이트한 후 CA 인증서 교체를 확인할 수 있습니다.
계속하려면 확인란을 선택한 다음 확인선택합니다.
-
업데이트할 각 DB 인스턴스 및 클러스터에 대해 3단계와 4단계를 반복합니다.
자동 서버 인증서 교체
루트 CA에서 자동 서버 인증서 교체를 지원하는 경우 RDS는 DB 서버 인증서의 교체를 자동으로 처리합니다. RDS는 자동 교체에 동일한 루트 CA를 사용하므로 사용자가 새 CA 번들을 다운로드할 필요가 없습니다. 인증 기관 섹션을 참조하세요.
DB 서버 인증서의 교체 및 유효 기간은 다음의 DB 엔진에 따라 다릅니다.
-
DB 엔진이 재시작 없는 교체를 지원하는 경우 RDS는 사용자가 별도의 조치를 취하지 않아도 DB 서버 인증서를 자동으로 교체합니다. RDS는 사용자가 선호하는 유지 관리 기간 내에 DB 서버 인증서의 유효 기간이 반쯤 남은 시점에서 DB 서버 인증서 교체를 시도합니다. 새 DB 서버 인증서는 12개월 동안 유효합니다.
-
DB 엔진에서 재시작 없이는 교체할 수 없는 경우, RDS는 DB 서버 인증서가 만료되기 최소 6개월 전에 유지 관리 이벤트에 대해 사용자에게 알려줍니다. 새 DB 서버 인증서는 36개월 동안 유효합니다.
describe-db-engine-versions 명령을 사용하고 SupportsCertificateRotationWithoutRestart
플래그를 검사하여 DB 엔진 버전이 재시작 없이 인증서를 교체하는 기능을 지원하는지 파악합니다. 자세한 내용은 데이터베이스의 CA 설정 단원을 참조하십시오.
트러스트 스토어로 인증서를 가져오기 위한 샘플 스크립트
다음은 인증서 번들을 트러스트 스토어로 가져오는 샘플 셸 스크립트입니다.
각 샘플 셸 스크립트는 Java Devopment Kit(JDK)의 일부인 keytool을 사용합니다. Docker 설치에 대한 자세한 내용은 Docker 설치 안내서를 참조하세요.
- Linux
-
다음은 Linux 운영 체제에서 트러스트 스토어로 인증서 번들을 가져오는 샘플 셸 스크립트입니다.
mydir=tmp/certs
if [ ! -e "${mydir}" ]
then
mkdir -p "${mydir}"
fi
truststore=${mydir}/rds-truststore.jks
storepassword=changeit
curl -sS "https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem" > ${mydir}/global-bundle.pem
awk 'split_after == 1 {n++;split_after=0} /-----END CERTIFICATE-----/ {split_after=1}{print > "rds-ca-" n+1 ".pem"}' < ${mydir}/global-bundle.pem
for CERT in rds-ca-*; do
alias=$(openssl x509 -noout -text -in $CERT | perl -ne 'next unless /Subject:/; s/.*(CN=|CN = )//; print')
echo "Importing $alias"
keytool -import -file ${CERT} -alias "${alias}" -storepass ${storepassword} -keystore ${truststore} -noprompt
rm $CERT
done
rm ${mydir}/global-bundle.pem
echo "Trust store content is: "
keytool -list -v -keystore "$truststore" -storepass ${storepassword} | grep Alias | cut -d " " -f3- | while read alias
do
expiry=`keytool -list -v -keystore "$truststore" -storepass ${storepassword} -alias "${alias}" | grep Valid | perl -ne 'if(/until: (.*?)\n/) { print "$1\n"; }'`
echo " Certificate ${alias} expires in '$expiry'"
done
- macOS
-
다음은 macOS에서 트러스트 스토어로 인증서 번들을 가져오는 샘플 셸 스크립트입니다.
mydir=tmp/certs
if [ ! -e "${mydir}" ]
then
mkdir -p "${mydir}"
fi
truststore=${mydir}/rds-truststore.jks
storepassword=changeit
curl -sS "https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem" > ${mydir}/global-bundle.pem
split -p "-----BEGIN CERTIFICATE-----" ${mydir}/global-bundle.pem rds-ca-
for CERT in rds-ca-*; do
alias=$(openssl x509 -noout -text -in $CERT | perl -ne 'next unless /Subject:/; s/.*(CN=|CN = )//; print')
echo "Importing $alias"
keytool -import -file ${CERT} -alias "${alias}" -storepass ${storepassword} -keystore ${truststore} -noprompt
rm $CERT
done
rm ${mydir}/global-bundle.pem
echo "Trust store content is: "
keytool -list -v -keystore "$truststore" -storepass ${storepassword} | grep Alias | cut -d " " -f3- | while read alias
do
expiry=`keytool -list -v -keystore "$truststore" -storepass ${storepassword} -alias "${alias}" | grep Valid | perl -ne 'if(/until: (.*?)\n/) { print "$1\n"; }'`
echo " Certificate ${alias} expires in '$expiry'"
done