SSL/TLS 証明書のローテーション
Amazon RDS 認証局証明書 rds-ca-2019 は、2024 年 8 月に期限切れになりました。RDS DB インスタンスまたはマルチ AZ DB クラスターへの接続に証明書検証付きの Secure Sockets Layer (SSL) または Transport Layer Security (TLS) を使用しているか、使用する予定がある場合は、新しい CA 証明書 rds-ca-rsa2048-g1 の使用を検討してください。現在、証明書検証付きで SSL/TLS を使用していない場合でも、CA 証明書の有効期限が切れている可能性があり、証明書検証付きで SSL/TLS を使用して RDS データベースに接続する予定がある場合は、新しい CA 証明書に更新する必要があります。
Amazon RDS では、AWS セキュリティのベストプラクティスとして、新しい CA 証明書を提供しています。新しい証明書およびサポートしている AWS リージョンに関する詳細は、「SSL/TLS を使用した DB インスタンスまたはクラスターへの接続の暗号化」を参照してください。
データベースの CA 証明書を更新するには、次の方法を使用します。
新しい CA 証明書を使用するように DB インスタンスまたはマルチ AZ DB クラスターを更新する前に、RDS データベースに接続するクライアントまたはアプリケーションを必ず更新します。
証明書を更新する際の考慮事項
証明書を更新する前に、次の状況を考慮してください。
-
Amazon RDS Proxy は AWS Certificate Manager (ACM) の証明書を使用します。RDS Proxy を使用している場合は、SSL/TLS 証明書を更新するときに、RDS Proxy 接続を使用するアプリケーションを更新する必要はありません。詳細については、「RDS Proxy での TLS/SSL の使用」を参照してください。
-
2020 年 7 月 28 日より前に作成された、または rds-ca-2019 証明書にアップデートされた DB インスタンスまたはマルチ AZ DB クラスターで Go バージョン 1.15 アプリケーションを使用している場合は、証明書を再度更新する必要があります。エンジンに応じて、証明書を rds-ca-rsa2048-g1、rds-ca-rsa4096-g1、または 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 issue #39568 を参照してください。
DB インスタンスまたはクラスターの変更による CA 証明書の更新
次の例では、CA 証明書を RDS CA-2019 から rds-ca-rsa2048-g1 に更新します。別の証明書を選択できます。詳細については、認証局 をご参照ください。
アプリケーションの信頼ストアを更新して、CA 証明書の更新に関連するダウンタイムを短縮します。CA 証明書のローテーションに関連する再起動の詳細については、「サーバー証明書の自動ローテーション」を参照してください。
DB インスタンスまたはクラスターを変更して CA 証明書を更新するには
-
「SSL/TLS を使用した DB インスタンスまたはクラスターへの接続の暗号化」の説明に従って、新しい SSL/TLS 証明書をダウンロードします。
-
新しい SSL/TLS 証明書を使用するようにアプリケーションを更新します。
新しい SSL/TLS 証明書のアプリケーションを更新する方法は、特定のアプリケーションにより異なります。アプリケーション開発者と協力して、アプリケーションの SSL/TLS 証明書を更新します。
SSL/TLS 接続の確認および各 DB エンジン用アプリケーションの更新については、以下のトピックを参照してください。
Linux オペレーティングシステムの信頼ストアを更新するサンプルスクリプトについては、「証明書を信頼ストアにインポートするためのサンプルスクリプト」を参照してください。
証明書バンドルには古い CA と新しい CA の両方の証明書が含まれます。そのため、アプリケーションを安全に更新し、移行期間に接続を維持することができます。AWS Database Migration Service を使用してデータベースを DB インスタンスまたはクラスターに移行する場合は、移行中の接続を確保するために証明書バンドルを使用することをお勧めします。
-
DB インスタンスまたはマルチ AZ DB クラスターを変更して、CA を rds-ca-2019 から rds-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
-
AWS Management Console にサインインし、Amazon RDS コンソール https://console.aws.amazon.com/rds/ を開きます。
-
ナビゲーションペインで、[データベース] を選択し、変更する DB インスタンスまたはマルチ AZ DB クラスターを選択します。
-
Modify を選択します。
-
[接続] セクションで、[rds-ca-rsa2048-g1] を選択します。
-
[Continue] を選択して、変更の概要を確認します。
-
変更をすぐに反映させるには、[Apply immediately] を選択します。
-
確認ページで、変更内容を確認します。変更内容が正しい場合は、[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
を変更しています。
Linux、macOS、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
を変更しています。
Linux、macOS、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 証明書を更新するには
AWS Management Console にサインインし、Amazon RDS コンソール https://console.aws.amazon.com/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 開発キット (JDK) の一部である keytool が使用されます。JDK のインストールの詳細については、「JDK インストールガイド」を参照してください。
- 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