Amazon Web Services ブログ

SSL/TLS 証明書を今すぐローテーションしましょう – Amazon RDS と Amazon Aurora については 2024 年に期限切れになります

Amazon Relational Database Service (Amazon RDS) コンソールで [証明書の更新] を目にしても驚かないでください。

Amazon RDS for MySQL、MariaDB、SQL Server、Oracle、PostgreSQL、Amazon Aurora のデータベースインスタンスに接続するために、Secure Sockets Layer (SSL) または Transport Layer Security (TLS) を証明書の検証とともに使用しているか、または使用する予定がある場合、ルート証明書の有効期限が切れる前に、DB インスタンスとアプリケーションの両方で新しい認証機関 (CA) 証明書をローテーションする必要があります。

DB インスタンスのほとんどの SSL/TLS 証明書 (rds-ca-2019) は、2020 年の証明書の更新後、2024 年に期限切れになります。2022 年 12 月に、40 年間有効な CA 証明書 (rds-ca-rsa2048-g1) と 100 年間有効な CA 証明書 (rds-ca-rsa4096-g1 および rds-ca-ecc384-g1) を新しくリリースしました。これにより、CA 証明書をローテーションした後、長期にわたって、再度ローテーションする必要はありません。

影響を受けるリージョンと、それらの rds-ca-2019 の有効期限の一覧を次に示します。

有効期限 リージョン
2024 年 5 月 8 日 中東 (バーレーン)
2024 年 8 月 22 日 米国東部 (オハイオ)、米国東部 (バージニア北部)、米国西部 (北カリフォルニア)、米国西部 (オレゴン)、アジアパシフィック (ムンバイ)、アジアパシフィック (大阪)、アジアパシフィック (ソウル)、アジアパシフィック (シンガポール)、アジアパシフィック (シドニー)、アジアパシフィック (東京)、カナダ (中部)、欧州 (フランクフルト)、欧州 (アイルランド)、欧州 (ロンドン)、欧州 (ミラノ)、欧州 (パリ)、欧州 (ストックホルム)、および南米 (サンパウロ)
2024 年 9 月 9 日 中国 (北京)、中国 (寧夏)
2024 年 10 月 26 日 アフリカ (ケープタウン)
2024 年 10 月 28 日 欧州 (ミラノ)
2061 年まで影響なし アジアパシフィック (香港)、アジアパシフィック (ハイデラバード)、アジアパシフィック (ジャカルタ)、アジアパシフィック (メルボルン)、欧州 (スペイン)、欧州 (チューリッヒ)、イスラエル (テルアビブ)、中東 (UAE)、AWS GovCloud (米国東部)、および AWS GovCloud (米国西部)

次のステップでは、アプリケーションからデータベースインスタンスへの接続を維持するために証明書をローテーションする方法を示します。

ステップ 1 – 影響を受ける Amazon RDS リソースを特定する
前述したように、Amazon RDS コンソール[証明書の更新] ページで影響を受ける DB インスタンスの総数を確認し、影響を受けるすべての DB インスタンスを表示できます。注: このページには、現在のリージョンの DB インスタンスのみが表示されます。複数のリージョンに DB インスタンスがある場合は、各リージョンの証明書の更新のページを確認して、古い SSL/TLS 証明書を使用しているすべての DB インスタンスを表示します。

また、AWS コマンドラインインターフェイス (AWS CLI) を使用して describe-db-instances を呼び出し、期限切れの CA を使用するインスタンスを見つけることもできます。クエリにより、アカウントと us-east-1 リージョン内の RDS インスタンスのリストを表示できます。

$ aws rds describe-db-instances --region us-east-1 | 
      jq -r '.DBInstances[] | 
      select ((.CACertificateIdentifier != "rds-ca-rsa2048-g1") and 
              (.CACertificateIdentifier != "rds-ca-rsa4096-g1") and 
              (.CACertificateIdentifier != "rds-ca-ecc384-g1")) | 
               "DBInstanceIdentifier: 
              (.DBInstanceIdentifier), CACertificateIdentifier: 
              (.CACertificateIdentifier)"'

ステップ 2 – データベースクライアントとアプリケーションを更新する
DB インスタンスに新しい証明書を適用する前に、接続するために SSL/TLS およびサーバー証明書を使用するクライアントとアプリケーションの信頼ストアを更新する必要があります。 現在、アプリケーションが接続するための前提条件として証明書の検証が必要かどうかを、DB インスタンス自体から簡単に判断する方法はありません。ここでの唯一のオプションは、アプリケーションのソースコードまたは設定ファイルを検査することです。

DB エンジン固有のドキュメントには、極めて一般的なデータベース接続インターフェイスで注意すべき点が概説されていますが、証明書の検証が使用されているかどうか、および特定のクライアントアプリケーションのためにアプリケーションの SSL/TLS 証明書を更新する正しい方法をアプリケーションデベロッパーに確認することを強くお勧めします。

アプリケーションの証明書を更新するために、古い CA と新しい CA の両方の証明書を含む新しい証明書バンドルを使用できます。これにより、アプリケーションを安全にアップグレードし、移行期間中も接続を維持できます。

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

ステップ 3 – 非本番 RDS インスタンスで CA ローテーションをテストする
すべての信頼ストアで新しい証明書を更新した場合は、非本番環境で RDS インスタンスを使用してテストする必要があります。この設定は、本番環境と同じデータベースエンジンとバージョンを備えた開発環境で実行します。また、このテスト環境は、本番と同じコードと設定を使用してデプロイする必要があります。

テストデータベースインスタンスで新しい証明書をローテーションするには、Amazon RDS コンソールで、変更する DB インスタンスについて [変更] を選択します。

[接続] セクションで、rds-ca-rsa2048-g1 を選択します。

[続行] を選択して、変更の概要を確認します。変更をすぐに適用する場合は、[すぐに適用] を選択します。

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

$ aws rds modify-db-instance \
          --db-instance-identifier <mydbinstance> \
          --ca-certificate-identifier rds-ca-rsa2048-g1 \
          --apply-immediately

これは、本番データベースインスタンスで新しい証明書を手動でローテーションする方法と同じです。参照した信頼ストアまたは CA 証明書バンドルを使用したローテーションの後、アプリケーションが SSL/TLS を使用して問題なく再接続することを確認します。

新しい DB インスタンスを作成する場合、デフォルトの CA は 2024 年 1 月 25 日までは rds-ca-2019 のままですが、その後は rds-ca-rsa2048-g1 に変更されます。新しい CA を設定して新しい DB インスタンスを作成する場合、CA オーバーライドを設定して、すべての新しいインスタンスの起動で任意の CA が使用されるようにできます。

$ aws rds modify-certificates \
          --certificate-identifier rds-ca-rsa2048-g1 \
          --region <region name>

これは、RDS DB インスタンスが存在するすべてのリージョンで行う必要があります。

ステップ 4 – 本番 RDS インスタンスを安全に更新する
非本番環境でのテストが完了したら、本番環境で RDS データベース CA 証明書のローテーションを開始できます。ステップ 3 に示すように、DB インスタンスを手動でローテーションできます。今日のエンジンの多くは再起動を必要としませんが、メンテナンス期間に再起動をスケジュールすることが推奨されることにご留意ください。

ステップ 1 の [証明書の更新] ページで、ローテーションする DB インスタンスを選択します。[スケジュール] を選択すると、次のメンテナンス期間に証明書のローテーションをスケジュールできます。[今すぐ適用] を選択すると、ローテーションをすぐに適用できます。

[スケジュール] を選択すると、証明書のローテーションを確認するよう求めるプロンプトが表示されます。このプロンプトは、更新のスケジュールウィンドウも示します。

(すぐに、またはメンテナンス期間中に) 証明書が更新された後、データベースとアプリケーションが想定どおりに動作していることを確認する必要があります。

今日の DB エンジンのほとんどでは、証明書を更新するためにデータベースを再起動する必要はありません。CA 更新のためだけにデータベースを再起動したくない場合は、modify-db-instance コマンドで --no-certificate-rotation-restart フラグを使用できます。

$ aws rds modify-db-instance \
          --db-instance-identifier <mydbinstance> \
          --ca-certificate-identifier rds-ca-rsa2048-g1 \
          --no-certificate-rotation-restart

エンジンの再起動が必要かどうかを確認するには、describe-db-engine-versions コマンドの出力で SupportsCertificateRotationWithoutRestart フィールドを確認します。このコマンドを使用すると、再起動なしでのローテーションをサポートしているエンジンを確認できます。

$ aws rds describe-db-engine-versions \
          --engine <engine> --include-all --region <region> | 
          jq -r '.DBEngineVersions[] | 
          "EngineName: (.Engine),
           EngineVersion: (.EngineVersion),
           SupportsCertificateRotationWithoutRestart: (.SupportsCertificateRotationWithoutRestart),
           SupportedCAs: ([.SupportedCACertificateIdentifiers | 
          join(", ")])"'

データベースインスタンスのために SSL/TLS を使用しない場合でも、CA をローテーションすることをお勧めします。将来的に SSL/TLS を使用する必要がある場合があります。その場合、JDBC コネクタや ODBC コネクタなどの一部のデータベースコネクタは、接続する前に有効な証明書をチェックします。その際、CA の期限が切れていると、SSL/TLS を使用できない可能性があります。

DB インスタンスを手動で変更することによる証明書の更新、サーバー証明書の自動ローテーション、信頼ストアに証明書をインポートするためのサンプルスクリプトの検索の詳細については、「Amazon RDS ユーザーガイド」または「Amazon Aurora ユーザーガイド」を参照してください。

留意点
知っておくべき重要な事項をいくつか次に示します。

  • Amazon RDS ProxyAmazon Aurora Serverless は、AWS Certificate Manager (ACM) からの証明書を使用します。SSL/TLS 証明書をローテーションする際に Amazon RDS Proxy を利用している場合は、Amazon RDS Proxy 接続を使用するアプリケーションを更新する必要はありません。Aurora Serverless を利用している場合、SSL/TLS 証明書をローテーションする必要はありません。
  • 現在から 2024 年 1 月 25 日まで – 新しい RDS DB インスタンスには、create-db-instance API の ca-certificate-identifier オプションで別の CA を指定しない限り、デフォルトで rds-ca-2919 証明書が含まれます。または、上記のセクションで言及したように、アカウントのためにデフォルトの CA オーバーライドを指定します。2024 年 1 月 26 日以降 – 新しいデータベースインスタンスは、rds-ca-rsa2048-g1 証明書を使用するようデフォルト設定されます。新しいインスタンスのために別の証明書を使用することを希望する場合は、AWS コンソールまたは AWS CLI を使用して、どの証明書を使用するかを指定できます。詳細については、create-db-instance API ドキュメントを参照してください。
  • Amazon RDS for SQL Server を除き、今日の RDS および Aurora エンジンのほとんどは、その最新バージョンにおいて、データベースの再起動なしでの証明書のローテーションをサポートしています。describe-db-engine-versions を呼び出し、応答フィールド SupportsCertificateRotationWithoutRestart を確認します。このフィールドが true に設定されている場合、インスタンスでは CA 更新のためにデータベースを再起動する必要がありません。false に設定すると、再起動が必要になります。詳細については、AWS ドキュメントの「データベースのために CA を設定する」を参照してください。
  • ローテーションされた CA は、各 DB インスタンスにインストールされる DB サーバー証明書に署名します。DB サーバー証明書は、信頼されたサーバーとして DB インスタンスを識別します。DB サーバー証明書の有効期間は、DB エンジンとバージョンによって異なり、1 年間または 3 年間です。CA がサーバー証明書の自動ローテーションをサポートしている場合、RDS は DB サーバー証明書のローテーションも自動的に処理します。DB サーバー証明書のローテーションの詳細については、AWS ドキュメントの「サーバー証明書の自動ローテーション」を参照してください。
  • 40 年間有効な証明書 (rds-ca-rsa2048-g1) または 100 年間有効な証明書を使用することを選択できます。RDS インスタンスによって使用される期限切れの CA は、RSA2048 鍵アルゴリズムと SHA256 署名アルゴリズムを使用します。rds-ca-rsa2048-g1 はまったく同じ設定を使用するため、互換性の点で最適です。100 年間有効な証明書 (rds-ca-rsa4096-g1 および rds-ca-ecc384-g1) は、rds-ca-rsa2048-g1 よりも安全な暗号化スキームを使用します。これらを使用する場合は、本番前環境で十分にテストし、データベースクライアントとサーバーがリージョンで必要な暗号化スキームをサポートしていることをダブルチェックする必要があります。

すぐに始めましょう!
証明書の有効期限が切れるまであと 1 年間ある場合でも、チームと連携して計画を開始すべきです。SSL/TLS 証明書を更新するには、有効期限が切れる前に DB インスタンスを再起動する必要がある場合があります。有効期限前にアプリケーションを更新するようにスケジュールし、本番環境でこれらのステップを完了する前に、ステージングまたは本番前のデータベース環境でテストを実行することを強くお勧めします。SSL/TLS 証明書の更新の詳細については、「Amazon RDS ユーザーガイド」および「Amazon Aurora ユーザーガイド」を参照してください。

SSL/TLS 接続を使用しない場合、データベースセキュリティのベストプラクティスは、SSL/TLS 接続を使用し、接続認証プロセスの一部として証明書の検証をリクエストすることです。SSL/TLS を使用して DB インスタンスへの接続を暗号化する方法の詳細については、「Amazon RDS ユーザーガイド」および「Amazon Aurora ユーザーガイド」を参照してください。

ご質問や問題がある場合は、ご利用のサポートプランに応じて、通常の AWS サポートまでお問い合わせください。

Channy

原文はこちらです。