SSL/TLS 証明書のローテーション - Amazon Relational Database Service

SSL/TLS 証明書のローテーション

Amazon RDS 認証局証明書 rds-ca-2019 は、2024 年 8 月に期限切れになるように設定されています。RDS DB インスタンスへの接続に証明書検証付きの Secure Sockets Layer (SSL) または Transport Layer Security (TLS) を使用しているか、使用する予定がある場合は、新しい CA 証明書 rds-ca-rsa2048-g1、rds-ca-rsa4096-g1、または rds-ca-ecc384-g1 のいずれかの使用を検討する必要があります。現在、証明書検証付きで SSL/TLS を使用していない場合でも、CA 証明書の有効期限が切れている可能性があり、証明書検証付きで SSL/TLS を使用して RDS データベースに接続する予定がある場合は、新しい CA 証明書の 1 つに更新する必要があります。

更新を行うには、次の手順に従います。新しい CA 証明書を使用するように DB インスタンスを更新する前に、RDS データベースに接続するクライアントまたはアプリケーションを必ず更新します。

Amazon RDS では、AWS セキュリティのベストプラクティスとして、新しい CA 証明書を提供しています。新しい証明書およびサポートしている AWS リージョンに関する詳細は、「SSL/TLS を使用した DB インスタンスへの接続の暗号化」を参照してください。

注記

Amazon RDS Proxy は AWS Certificate Manager (ACM) の証明書を使用します。RDS Proxy を使用している場合は、SSL/TLS 証明書を更新するときに、RDS Proxy 接続を使用するアプリケーションを更新する必要はありません。RDS Proxy で TLS/SSL を使用する方法の詳細については、「RDS Proxy での TLS/SSL の使用」を参照してください。

注記

2020 年 7 月 28 日より前に作成された DB インスタンス、または rds-ca-2019 証明書に更新された DB インスタンスで、Go バージョン 1.15 アプリケーションを使用している場合は、証明書を再度更新する必要があります。エンジンに応じて、証明書を rds-ca-rsa2048-g1、rds-ca-rsa4096-g1、または rds-ca-ecc384-g1 に更新してください。新しい CA 証明書 ID を使用して、AWS CLI セクションに示されている modify-db-instance コマンドを実行します。describe-db-engine-versions コマンドを使用すると、特定の DB エンジンと DB エンジンのバージョンで使用できる CA を検索できます。

2020 年 7 月 28 日以降に DB インスタンスを作成したか、その証明書を更新した場合、アクションは不要です。詳細については、Go GitHub issue #39568 を参照してください。

DB インスタンスの変更による CA 証明書の更新

CA 証明書を更新するには、以下のステップを完了します。

DB インスタンスを変更して CA 証明書を更新するには
  1. SSL/TLS を使用した DB インスタンスへの接続の暗号化」の説明に従って、新しい SSL/TLS 証明書をダウンロードします。

  2. 新しい SSL/TLS 証明書を使用するようにアプリケーションを更新します。

    新しい SSL/TLS 証明書のアプリケーションを更新する方法は、特定のアプリケーションにより異なります。アプリケーション開発者と協力して、アプリケーションの SSL/TLS 証明書を更新します。

    SSL/TLS 接続の確認および各 DB エンジン用アプリケーションの更新については、以下のトピックを参照してください。

    Linux オペレーティングシステムの信頼ストアを更新するサンプルスクリプトについては、「証明書を信頼ストアにインポートするためのサンプルスクリプト」を参照してください。

    注記

    証明書バンドルには古い CA と新しい CA の両方の証明書が含まれます。そのため、アプリケーションを安全に更新し、移行期間に接続を維持することができます。AWS Database Migration Service を使用してデータベースを DB インスタンスに移行する場合は、移行中の接続を確保するために証明書バンドルを使用することをお勧めします。

  3. DB インスタンスを変更して、CA を rds-ca-2019 から rds-ca-rsa2048-g1 に変更します。

    重要

    デフォルトでは、このオペレーションにより、DB インスタンスが再起動されます。このオペレーション中に DB インスタンスを再起動しない場合は、modify-db-instance CLI コマンドを使用し、--no-certificate-rotation-restart オプションを指定できます。

    このオプションは、計画的または計画外のメンテナンスのためにデータベースが次回再起動されるまで、証明書を更新しません。このオプションは、SSL/TLS を使用しない場合にのみ推奨されます。

    証明書の有効期限が切れた後に接続の問題が発生した場合は、コンソールで [すぐに適用] を指定するか、--apply-immediately を使用して AWS CLI オプションを指定します。デフォルトで、このオペレーションは次のメンテナンスウィンドウの間に実行するようスケジュールされています。

AWS Management Console または AWS CLI を使用して、DB インスタンスの CA 証明書を rds-ca-2019 から rds-ca-rsa2048-g1 に変更できます。

DB インスタンスの CA を rds-ca-2019 から rds-ca-rsa2048-g1 に変更するには
  1. AWS Management Console にサインインし、Amazon RDS コンソール (https://console.aws.amazon.com/rds/) を開きます。

  2. ナビゲーションペインで、[データベース] を選択し、変更する DB インスタンスを選択します。

  3. [Modify] を選択します。

    
                                        Modify DB instance

    [DB インスタンスを変更] ページが表示されます。

  4. [Connectivity] (接続) セクションで、[rds-ca-2019] を選択します。

    
                                        CA 証明書の選択
  5. [Continue] を選択して、変更の概要を確認します。

  6. 変更をすぐに反映させるには、[Apply immediately] を選択します。

    重要

    このオプションを選択すると、データベースが直ちに再起動されます。

  7. 確認ページで、変更内容を確認します。正しい場合は、[Modify DB Instance (DB インスタンスを変更)] を選択して変更を保存します。

    重要

    このオペレーションをスケジュールする場合は、必ずクライアント側の信頼ストアを事前に更新します。

    または、[戻る] を選択して変更を編集するか、[キャンセル] を選択して変更をキャンセルします。

AWS CLI を使用して DB インスタンスの CA を rds-ca-2019 から rds-ca-rsa2048-g1 に変更するには、modify-db-instance コマンドを呼び出します。DB インスタンス識別子および --ca-certificate-identifier オプションを指定します。

重要

このオペレーションをスケジュールする場合は、必ずクライアント側の信頼ストアを事前に更新します。

CA 証明書を mydbinstance に設定することにより、以下のコードで rds-ca-2019 を変更します。変更は、--no-apply-immediately を使用して次のメンテナンスウィンドウ中に適用されます。今すぐ変更を適用するには、--apply-immediately を使用します。

重要

デフォルトでは、このオペレーションにより、DB インスタンスが再起動されます。このオペレーション中に DB インスタンスを再起動しない場合は、modify-db-instance CLI コマンドを使用し、--no-certificate-rotation-restart オプションを指定できます。

このオプションは、計画的または計画外のメンテナンスのためにデータベースが次回再起動されるまで、証明書を更新しません。このオプションは、SSL/TLS を使用しない場合にのみ推奨されます。

--apply-immediately を使用して、更新プログラムを直ちに適用します。デフォルトで、このオペレーションは次のメンテナンスウィンドウの間に実行するようスケジュールされています。

Linux、macOS、Unix の場合:

aws rds modify-db-instance \ --db-instance-identifier mydbinstance \ --ca-certificate-identifier rds-ca-rsa2048-g1 \ --no-apply-immediately

Windows の場合:

aws rds modify-db-instance ^ --db-instance-identifier mydbinstance ^ --ca-certificate-identifier rds-ca-rsa2048-g1 ^ --no-apply-immediately

DB インスタンスのメンテナンスの適用による CA 証明書の更新

DB インスタンスのメンテナンスを適用して CA 証明書を更新するには、次のステップを実行します。

DB インスタンスのメンテナンスを適用して CA 証明書を更新するには
  1. SSL/TLS を使用した DB インスタンスへの接続の暗号化」の説明に従って、新しい SSL/TLS 証明書をダウンロードします。

  2. 新しい SSL/TLS 証明書を使用するには、データベースのアプリケーションを更新します。

    新しい SSL/TLS 証明書のアプリケーションを更新する方法は、特定のアプリケーションにより異なります。アプリケーション開発者と協力して、アプリケーションの SSL/TLS 証明書を更新します。

    SSL/TLS 接続の確認および各 DB エンジン用アプリケーションの更新については、以下のトピックを参照してください。

    Linux オペレーティングシステムの信頼ストアを更新するサンプルスクリプトについては、「証明書を信頼ストアにインポートするためのサンプルスクリプト」を参照してください。

    注記

    証明書バンドルには古い CA と新しい CA の両方の証明書が含まれます。そのため、アプリケーションを安全に更新し、移行期間に接続を維持することができます。

  3. DB インスタンスのメンテナンスを適用して、CA を rds-ca-2019 から rds-ca-rsa2048-g1 に変更します。

    重要

    変更を直ちに適用することを選択できます。デフォルトで、このオペレーションは次のメンテナンスウィンドウの間に実行するようスケジュールされています。

AWS Management Console を使用して DB インスタンスのメンテナンスを適用し、複数の DB インスタンスの CA 証明書を rds-ca-2019 から rds-ca-rsa2048-g1 に変更できます。

複数の DB インスタンスへのメンテナンスの適用による CA 証明書の更新

AWS Management Console を使用して、複数の DB インスタンスの CA 証明書を変更します。

複数の DB インスタンスの CA を rds-ca-2019 から rds-ca-rsa2048-g1 に変更するには
  1. AWS Management Console にサインインし、Amazon RDS コンソール (https://console.aws.amazon.com/rds/) を開きます。

  2. ナビゲーションペインで、[データベース] を選択します。

    ナビゲーションペインには、影響を受ける DB インスタンスの合計数を示す [Certificate update (証明書の更新)] オプションがあります。

    
                                    ナビゲーションペインの証明書の更新オプション

    ナビゲーションペインで [Certificate update] を選択します。

    [Update your Amazon RDS SSL/TLS certificates (RDS SSL/TLS 証明書の更新)] ページが表示されます。

    
                                    複数の DB インスタンスの CA 証明書の更新
    注記

    このページには、現在の AWS リージョンの DB インスタンスのみが表示されます。複数の AWS リージョンに DB インスタンスがある場合は、このページを AWS リージョンごとにチェックし、古い SSL/TLS 証明書を使用しているすべての DB インスタンスを確認します。

  3. 更新する DB インスタンスを選択します。

    [Update at the next maintenance window (次のメンテナンスウィンドウで更新)] を選択すると、次のメンテナンスウィンドウでの証明書の更新をスケジュールできます。[今すぐ更新] を選択して、直ちに更新を適用します。

    重要

    CA 証明書が更新されると、オペレーションによって DB インスタンスが再起動されます。

    証明書の有効期限が切れた後に接続の問題が発生した場合は、[今すぐ更新] オプションを使用します。

  4. [Update at the next maintenance window (次のメンテナンスウィンドウで更新)] または [今すぐ更新] を選択すると、CA 証明書の更新を確認するメッセージが表示されます。

    重要

    データベースでの CA 証明書の更新をスケジュールする前に、SSL/TLS とサーバー証明書を接続に使用するクライアントアプリケーションを更新します。これらの更新は、DB エンジンに固有です。アプリケーションで SSL/TLS とサーバー証明書を接続に使用するかどうかを判断するには、「Step 2: Update Your Database Applications to Use the New SSL/TLS Certificate」を参照してください。これらのクライアントアプリケーションを更新したら、CA 証明書の更新を確認できます。

    
                                    証明書の更新の確認

    続行するには、チェックボックスをオンにし、[確認] を選択します。

  5. 更新する DB インスタンスごとに、ステップ 3 と 4 を繰り返します。

証明書を信頼ストアにインポートするためのサンプルスクリプト

次のサンプルシェルスクリプトでは、証明書バンドルを信頼ストア内にインポートします。

各サンプルシェルスクリプトでは、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 ".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