【2020年2月5日までに対応推奨】Amazon RDS/Amazon AuroraでSSL/TLS証明書を更新しましょう

yujiota 2019年12月26日

どうも、クラウドエンジニアの大田です。
2019年もあっという間に年の瀬ですね。個人的にも怒涛の1年を過ごしまして、
1月に前職を辞め、2ヶ月間プログラミングに勤しんだのちに
5月に当社にジョインし、11月末には双子の女の子が産まれ・・・・・
大変充実した毎日を過ごすことが出来ました。変化と刺激は大事ですね。
皆さんの2019年はいかがでしたでしょうか。

さて、今回のテーマは「Amazon RDS/Amazon AuroraのSSL/TLS証明書更新について」です。
弊社にてご契約いただいております対象のお客様には既にご案内済みの内容ですが、
RDSやAuroraを利用している全ての方々に共通する内容なので、どなたかのお役に立てればと思い記録に残します。

 


もくじ

  1. Amazon RDS CA証明書の更新って何?
  2. CA証明書更新までの流れ
  3. 実際にCA証明書を更新してみる
  4. 注意事項

 

1.RDS CA証明書の更新って何?

まずは今回のAWSサポートからの案内を見てみましょう。
(※固有の情報は全て除外しています)

 

Hello,

10月の上旬に2019年10月31日までに RDS SSL/TLS証明書の更新実施をお願いする旨のメールをお送りしました。この度、その更新実施期限を延長し2020年2月5日までにSecure Sockets Layer (SSL)またはTransport Layer Security (TLS)を使用してRDSやAurora DB インスタンスに接続しているアプリケーションの中断を回避するためにアクションを実施していただきますようお願いいたします。なお、この新規日程は実際のCertificate Authority (CA)が2020年3月5日に失効するまで4週間しかありません。我々のデプロイメントやテスト、スキャニングにより全てのRDSDBインスタンスが期限満了までに準備ができているかを認証するにはその4週間を必要とするため、2月5日という期日を延長することはできません。

このメールはap-northeast-1リージョンにて末尾に記載してある1つ以上のアクションを必要としているAmazon RDS DBインスタンスを保有しているお客様に配信しています。

RDS DB インスタンスとの通信を保護するため、CAは情報を交換する前に RDS データベースを認証するためにSSL/TLS経由で接続しているクライアントアプリケーションによってチェックされる有効期限のある証明書を生成します。
ベストプラクティスとして、 AWS は CA を更新し、新しいルート証明書を 5 年おきに作成することで RDS とお客様の接続が数年にわたり適切に保護されるようにしています。

現在のCAは2020年3月5日に失効し、そのCAを参照している証明書を持つクライアントアプリケーションとDBインスタンスに更新が必要となります。またクライアントアプリケーションはCA証明書(必要に応じてルートと中間)を必ずトラストストアに追加し、RDS DB インスタンスは有効期限までに別途新しいサーバー証明書を使用するようにしてください。なお、2020年2月5日以降から 2020年3月5日の期限までにRDS DB インスタンスの証明書の更新のスケジュールが開始されます。そのため、これらの変更は2020年2月5日より前に実施していただくことを強く推奨します。自動更新はメンテナンスウィンドウ内にスケジュールされます。

2020年1月14日(以前は2019年11月1日)以降に新規で作成されたRDS DB インスタンスについてはデフォルトで新しい証明書が使用されます。クライアントアプリケーションが更新されず新しい証明書がトラストストアに追加されていない場合、アプリケーションはこの日付以降に作成された新しいインスタンスに接続することができません。古い証明書を使用するために新しいインスタンスを一時的に変更したい場合は、 AWS コンソール、RDS API や AWS CLI から実施可能です。2020年1月14日より前に作成されたインスタンスは、rds-ca-2019バージョンに更新するまで古い証明書を保有します。

お客様のアプリケーションが SSL/TLS プロトコルを使用して RDS DB インスタンスに接続している場合は、以下の方法を参照して下さい。お客様のフィードバックに基づき、DBエンジン毎に次の情報を追加致しました。1) ご利用のクライアントアプリケーションがSSL/TLS経由でRDS DBインスタンスに接続しているかを判断する方法と 2) クライアントアプリケーションのトラストストアを更新して新しいCA証明書を含める方法

アプリケーションが接続に SSL/TLS を使用していない場合は必要なアクションはありません。SSL/TLSの使用はセキュリティのベストプラクティスであるため、全てのお客様に、アプリケーションでSSLをシームレスに使用できるよう、このアップグレードを実施していただくことを推奨しております。2020 年 3 月 5 日までに、RDSは保留中のメンテナンスアクションを計画・実施し、RDSコンソールにて現在の証明書の有効期限が切れた後も有効な証明書を使用できるか確認できるようになります。自動更新はメンテナンスウィンドウ内にスケジュールされます。

RDSの場合: https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/UsingWithRDS.SSL-certificate-rotation.html
Auroraの場合: https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/UsingWithRDS.SSL-certificate-rotation.html

これらの手順を本番環境で実行する前に開発環境やステージング環境にて検証されることを推奨します。アクションを完了されない場合は、2020年3月5日以前にRDSがデータベース側の証明書を更新するとすぐに、SSL/TLSを使用するアプリケーションは既存のDBインスタンスに接続できなくなりますのでご注意ください。

ご質問や不明な点がある場合は、AWSサポートまでお問い合わせください。
https://aws.amazon.com/support.

—-

We previously sent a communication in early October to update your RDS SSL/TLS certificates by October 31, 2019. We have extended the dates and now request that you act before February 5, 2020 to avoid interruption of your applications that use Secure Sockets Layer (SSL) or Transport Layer Security (TLS) to connect to your RDS and Aurora database instances. Note that this new date is only 4 weeks before the actual Certificate Authority (CA) expiration on March 5, 2020. Because our own deployments, testing, and scanning to validate all RDS instances are ready for the expiry must take place during the final 4 weeks, the February 5th date cannot be further extended.

You are receiving this message because you have an Amazon RDS database instance(s) that requires action in the ap-northeast-1 Region, listed at the end of the email.

To protect your communications with RDS database instances, a CA generates time-bound certificates that are checked by your client applications that connect via SSL/TLS to authenticate RDS databases before exchanging information. AWS renews the CA and creates new root certificates every five years to ensure RDS customer connections are properly protected for years to come.

The current CA expires on March 5, 2020, requiring updates to client applications and database instances that have certificates referencing the current CA. Client applications must add new CA certificates (root and intermediate where necessary) to their trust stores, and RDS database instances must separately use new server certificates before this hard expiration date. However, we strongly recommend you complete these changes before February 5, 2020. After February 5, 2020, we will begin scheduling certificate rotations for your RDS database instances prior to the March 5, 2020 deadline. The automatic update(s) will be scheduled within your maintenance window.

Additionally, any new RDS database instances created after January 14, 2020 (previously November 1, 2019) will default to using the new certificates. If your client applications have not been updated to add the new certificates to their trust stores, these applications will fail to connect to any new instances created after this date. If you wish to temporarily modify new instances to use the old certificates, you can do so using the AWS console, the RDS API, and the AWS CLI. Any instances created prior to January 14, 2020 will have the old certificates until you update them to the rds-ca-2019 version.

If your applications connect to RDS database instances using the SSL/TLS protocol, please follow the detailed instructions in the links below. Based on your feedback, we have provided, per database engine, further instructions on 1.) how to determine whether your client applications are connecting to your RDS databases via SSL/TLS and 2.) how to update your client application trust stores to include the new CA certificates.

If your applications do not use SSL/TLS to connect, there are no required actions that you need to take. However, using SSL/TLS is a security best practice so we recommend all customers perform this upgrade so that your applications can start using SSL seamlessly. Before March 5, 2020, RDS will schedule and perform pending maintenance actions which you can view in the RDS console to ensure you have valid certificates after the current certificates expire. The automatic update(s) will be scheduled within your maintenance window.

For RDS: https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.SSL-certificate-rotation.html
For Aurora: https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/UsingWithRDS.SSL-certificate-rotation.html

We encourage you to test these steps in a development or staging environment before implementing them in your production environments. If not completed, your applications using SSL/TLS will fail to connect to your existing database instances as soon as RDS rotates your certificates on the database side prior to March 5, 2020.

If you have questions or issues, please contact AWS Support at: https://aws.amazon.com/support

影響のある RDS DB インスタンス | Your impacted RDS instances:
xxxxxxxx

Sincerely,
Amazon Web Services

Amazon Web Services, Inc. is a subsidiary of Amazon.com, Inc. Amazon.com is a registered trademark of Amazon.com, Inc. This message was produced and distributed by Amazon Web Services Inc., 410 Terry Ave. North, Seattle, WA 98109-5210

 

はい、長いですね!ざっくり要約すると、

  • Amazon RDS/Amazon Aurora で使用している CA 証明書「rds-ca-2015」は
    2020年3月5日に有効期限が切れるから、新しい CA 証明書「rds-ca-2019」に更新してね
  • 2020年2月5日以降はAWSで順次、メンテナンスウィンドウ内で強制的に適用していくよ
  • 予期せぬトラブルを防止したいなら、2020年2月5日までに事前対応してね(強く推奨)
  • CA証明書自体の有効期限は延びないので、更新期限の延長対応はないよ
  • アプリケーション側でSSL/TLS接続してないなら、何も作業しなくてOK
  • アプリケーション側でSSL/TLS接続してるなら、トラストストアに新しいCA証明書をインポートしてね
  • 2019年11月1日以降に作成した RDS/Aurora には新しい証明書「rds-ca-2019」が適用されるよ

ということです。

上記にもまとめている通り、
RDSまたはAuroraへのSSL/TLS接続を行っている場合は、以下の対応が必要です。

  • 新しいCA証明書への更新
  • アプリケーションのトラストストアに新しいCA証明書をインポート

トラストストアへの証明書インポートについては
今回は割愛しますので、下記ドキュメントをご確認くださいませ。

Amazon RDS|SSL/TLS 証明書の更新|CA証明書の更新:
https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/UsingWithRDS.SSL-certificate-rotation.html

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

RDSまたはAuroraへのSSL/TLS接続を行っていない場合は、特に対応の必要はありません。
ご自身のDBインスタンスがSSL/TLS接続を実施しているかどうかは、
先ほどのドキュメントから確認方法をあわせてご覧くださいませ。

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

新しい SSL/TLS 証明書を使用して MariaDB DB インスタンスに接続するようにアプリケーションを更新
新しい SSL/TLS 証明書を使用して Microsoft SQL Server DB インスタンスに接続するようにアプリケーションを更新
新しい SSL/TLS 証明書を使用して MySQL DB インスタンスに接続するようにアプリケーションを更新
新しい SSL/TLS 証明書を使用して Oracle DB インスタンスに接続するようにアプリケーションを更新
新しい SSL/TLS 証明書を使用して PostgreSQL DB インスタンスに接続するようにアプリケーションを更新

 

こういう更新系の作業は後回しにしてしまうと忘れがちなので、注意ですね。
なので、次にさくっと更新までの手順を確認しておきましょう。

2.CA証明書更新までの流れ

おおまかな流れは以下の通りです。

  1. 対象のインスタンスを確認
    •  上記サンプルのようなAWSサポートからの案内メールを確認
    • RDSのナビゲーションペイン[Certificate update](AWSマネジメントコンソール)を確認
  2. CA証明書の適用状況を確認
    • AWSマネジメントコンソール|RDSの[接続とセキュリティ]タブ→認証機関を確認
    • AWS CLI|コマンドの実行
  3. アプリケーション側のSSL/TLS接続の有無を確認
    ※上記でご紹介したドキュメントより各DBエンジンごとの確認方法をご覧くださいませ。
    今回はCA証明書の更新が主題ですので、SSL接続していることを前提に話を進めます。
  4. CA証明書を更新
    • 方法①:AWSマネジメントコンソール|RDSの[変更]→[認証機関]項目→「rds-ca-2019」を選択し、変更適用
      • 即時反映(すぐに再起動が実施される)パターン
      • メンテナンスウィンドウでの適用パターン
    • 方法②:AWS CLI|コマンドを実行
      • 即時反映パターン
      • メンテナンスウィンドウでの適用パターン

ここで気になってくるのは、再起動に伴うダウンタイムですね。
AWS公式ブログでは「再起動は通常 2 分以内に完了します」と案内があります。

Amazon Web Services ブログ|Amazon Relational Database Service (RDS)とAmazon AuroraのSSL/TLS 証明書のアップデートについて:
https://aws.amazon.com/jp/blogs/news/amazon-rds-certificate-rotation-2019/

Q: CA 証明書のアップデートでは停止時間が発生しますか?
はい、データベースバージョンのアップデートや OS のアップデートなどのメンテナンスと同様に、今回の CA 証明書アップデートにつきましても、お客様の DB インスタンスは再起動されます。実行されるタイミングにつきましては、お客様側で AWS CLI のmodify-db-instance コマンドや Management Console から DB インスタンスの変更により、次回メンテナンスウィンドウでの実行、もしくは即時での実行をご選択いただけます。再起動は通常 2 分以内に完了します。

とはいえ、文章のエビデンスだけだと不安ですよね………!
ということで今回は、再起動完了までの時間も計測していきたいと思います。

3.実際にCA証明書を更新してみる

それでは、早速実施していきましょう!

  1. 対象のインスタンスを確認

    •  AWSサポートからの案内メールを確認

      実際には、メール最下部(英文箇所)に対象のDB識別子が記載されている

    • RDSのナビゲーションペイン[Certificate update](AWSマネジメントコンソール)を確認

  2.  CA証明書の適用状況を確認

    • AWSマネジメントコンソール|RDSの[接続とセキュリティ]タブ→認証機関を確認

    • AWS CLI|コマンドの実行

      aws rds describe-db-instances –db-instance-identifier <DB識別子>を実行
      出力結果の「CACertificateIdentifier」を参照

  3. アプリケーション側のSSL/TLS接続の有無を確認

    ※上記でご紹介したドキュメントより各DBエンジンごとの確認方法をご覧くださいませ。
    今回はCA証明書の更新が主題ですので、SSL接続していることを前提に話を進めます。

  4. CA証明書を更新

    • 方法①:AWSマネジメントコンソール|RDSの[変更]→[認証機関]項目→「rds-ca-2019」を選択し、変更適用

      • 即時反映(すぐに再起動が実施される)パターン

      • メンテナンスウィンドウでの適用パターン

        上記キャプチャ内の「次に予定されるメンテナンスウィンドウ中に適用します」を選択
        例では mon:00:00-mon:00:30 とあるが、GMT表示のため、JSTだと mon:09:00-mon:09:30 にあたる

    • 方法②:AWS CLI|コマンドを実行

      • 即時反映パターン

        aws rds modify-db-instance –db-instance-identifier <DB識別子> –ca-certificate-identifier rds-ca-2019 –apply-immediately を実行
        出力結果の「PendingModifiedValues」に rds-ca-2019 への変更が含まれているか確認

      • メンテナンスウィンドウでの適用パターン

        aws rds modify-db-instance –db-instance-identifier <DB識別子> –ca-certificate-identifier rds-ca-2019 –no-apply-immediately を実行
        PreferredMaintenanceWindow = メンテナンスウィンドウ
        PendingModifiedValues = メンテナンスウィンドウ内で実施される保留中の変更

    • 更新内容の確認

      • AWSマネジメントコンソール

        ステータスが「再起動中」→「利用可能」になったら更新完了

        RDSの[接続とセキュリティ]タブ→認証機関の項目が「rds-ca-2019」と表示されていればOK

      • AWS CLI

        aws rds describe-db-instances –db-instance-identifier <DB識別子> を実行
        DBInstanceStatus で再起動状態も確認可能
        DBInstanceStatus が available(利用可能)になったら、再度同コマンドを実行
        出力結果の「CACertificateIdentifier」を参照→「rds-ca-2019」になっていればOK
        ※古い証明書「rds-ca-2015」に切り戻したい場合は、AWSマネジメントコンソールから再度認証機関の値を変更するか、AWS CLIで –ca-certificate-identifier rds-ca-2015 とオプションをつけて実行すれば可能です。

無事に更新できましたね!
次に再起動完了までの時間を確認してみましょう。

  1. 再起動にかかった時間の確認

    • AWSマネジメントコンソール

      ログからは 12秒 程度で再起動が完了していることが確認できる

    • AWS CLI

      aws rds describe-events –duration 10080
      直近7日間のイベントログを出力
      更新実行日時付近の「DB instance shutdown」「DB instance restarted」の時間差分を確認

AWS公式ブログの案内では、CA証明書の更新にかかる時間は通常2分と記載がありましたが、
検証環境上では、意外とすぐに完了していることが確認できました。

4.注意事項

さいごに、注意事項をまとめておきます。

  • RDS新規作成時のデフォルトCA証明書
    2020年1月14日までに RDS を新規作成する場合、新しいCA証明書を選択することが出来ません。
    そのため、新規作成後〜運用開始前までにCA証明書を更新しておく必要があります。
  • 開発/検証環境でのテストを推奨
    実際のワークロードによっては再起動完了までに2分以上かかるケースも考えられるため、ダウンタイム目安の計測にはテストを実施しておきましょう。
  • 使用環境でのSSL/TLS接続の実施有無を確認すること
    冒頭でもお伝えした通り、RDSに対しSSL/TLS接続を実施している環境であれば、
    ユーザー側でトラストストアに新しいCA証明書を入れる必要があります。
  • 開発/検証環境でのテストを推奨
    実際のワークロードによっては再起動完了までに2分以上かかるケースも考えられるため、ダウンタイム目安の計測にはテストを実施しておきましょう。
  • 古いCA証明書への切り戻しは新しいCA証明書への更新後であっても可能
  • 古いCA証明書「rds-ca-2015」の有効期限は 2020年3月5日
  • 2020年2月5日 までの事前移行実施を強く推奨
  • 2020年2月5日 以降は順次、AWSによってメンテナンスウィンドウ内で強制的に更新される
  • 更新期限の延長対応はなし

 

当たり前ですが、本番環境でいきなり実施しないことですね!
予期せぬリスクの低減や回避のためにできることは、やはり開発環境やステージング環境での動作確認です。
こういった細々とした更新作業は先送りにせずに手早く済ませることをオススメします。

以上です!ご拝読ありがとうございました。