Amazon RDS SSL/TLS証明書をrds-ca-2015からrds-ca-2019へ更新

2019年12月18日システムAWS,RDS

Amazon RDS SSL/TLS証明書をrds-ca-2015からrds-ca-2019へ更新
Amazon RDS SSL/TLS証明書をrds-ca-2015からrds-ca-2019へ更新

どうも、UT(@ut_1029)です。AWS(Amazon Web Service)のRDSで2020年2月5日までにSSL/TLS証明書の更新を行うよう通知が来ました。Amazon RDSSSL/TLS証明書rds-ca-2015からrds-ca-2019への更新作業を行ったので手順等を共有します。ぜひご覧ください。

AWS RDSのSSL/TLS証明書の更新とは

AWSRDSでは、SSL/TLSを使用してRDSDBインスタンスへ接続を行っています。そして2020年2月5日までに新しい認証機関(CA)の証明書が発行されたので、更新する必要があります。

2020年2月5日までに更新しない場合は、AWS側が設定しているRDSのメンテナンススケジュールにより自動で更新されます。なので、更新作業を忘れていても大丈夫です。が、証明書の更新により強制的に再起動されるので、サービス運営している場合は、サービスがダウンしてしまう為、事前に更新することをオススメします。

AWSからRDSのSSL/TLS証明書の更新通知メールが届く

AWSより2019年11月29日0時26分頃に以下のようなメールが届きました。

重要なお知らせ:2020年2月5日までにお客様のAmazon RDS SSL/TLS証明書の更新を行ってください

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コンソールにて現在の証明書の有効期限が切れた後も有効な証明書を使用できるか確認できるようになります。自動更新はメンテナンスウィンドウ内にスケジュールされます。

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

メールの文面をざっくり抜き出すと以下のような内容になります。

  • AmazonRDSSSL/TLS証明書の更新が必要
    • 更新は2020年2月5日までに行う
    • 期限を過ぎると登録されているスケジュール通りに自動で更新処理が開始される
    • 2020年1月14日以降に作成されたRDSDB インスタンスには新しい証明書が使用される
  • アプリケーションが SSL/TLS プロトコルを使用して RDSDB インスタンスに接続している場合は、別途手順が必要
    • クライアントアプリケーションはCA証明書を必ずトラストストアに追加

MySQLなどのクライアントアプリケーションを利用してRDSのDBインスタンスへ接続する際に、SSL/TLSで接続している場合は、別途トラストストアへCA証明書を追加する作業が必要みたいです。

RDSSSL/TLS更新に関する詳しい内容については、AWSのドキュメントに記載されています。

2020 年 2 月 5 日までに Amazon RDS SSL/TLS 証明書を更新してください

2020 年 2 月 5 日までに Amazon RDS SSL/TLS 証明書を更新してください
2020 年 2 月 5 日までに Amazon RDS SSL/TLS 証明書を更新してください

AWSマネージメントコンソールで、RDSダッシュボードを開きます。すると、左メニューに「Certificate update」という項目にバッチが付いていると思います。

Certificate updateを開くと以下のメッセージが表示されています。

2020 年 2 月 5 日までに Amazon RDS SSL/TLS 証明書を更新してください

RDS および Aurora データベースを使用するアプリケーションの中断を避けるため、これらのデータベースの認証機関 (CA、Certificate Authority) 証明書を 2020 年 2 月 5 日までに更新してください。
2020 年 1 月 14 日以降に作成された新しいデータベースでは、デフォルトで新しい CA 証明書が使用されます。
まず、新しい証明書を使用してクライアントアプリケーションを更新してください。

そして更新が必要なデータベースに対象のDBインスタンスが表示されていると思います。

Amazon RDS SSL/TLS 証明書の更新する前に

Amazon RDS SSL/TLS 証明書の更新する前に
Amazon RDS SSL/TLS 証明書の更新する前に

Amazon RDS SSL/TLS 証明書の更新作業に入る前に、RDS(Amazon Relational Database Service)の概要について軽く触れておきます。
AWS再入門 Amazon RDS編

Amazon Aurora DB クラスター

Amazon Aurora DB クラスターは、1 つ以上の DB インスタンスとデータを管理する 1 つのクラスターボリュームで構成されます。

基本構成としては、クラスター配下にマスタ(書き込み用)とリードレプリカ(読み込み用)を用意しておくことが多いと思います。

レプリケーション

DBインスタンスマスタ(書き込み用)とリードレプリカ(読み込み用)で用意し、データを同期させる構成がレプリケーションです。

フェイルオーバー

マスタ(書き込み用)のDBインスタンスに障害が発生すると、フェイルオーバーすることで他のリードレプリカ(読み込み用)のDBインスタンスマスタ(書き込み用)へ昇格します。

Amazon RDS SSL/TLS 証明書の更新する手順

Amazon RDS SSL/TLS 証明書の更新する手順
Amazon RDS SSL/TLS 証明書の更新する手順

RDSのSSL/TLSの証明書更新を行うと、DBインスタンス再起動されます。その為にサービスを運営しているとダウンタイムが発生します。なので、更新手順をしっかりと把握しダウンタイムを短い時間で行う必要があります。

運営サービスのダウンタイムを気にしない場合

RDSのSSL/TLS証明書の更新による再起動ダウンタイムを特に気にしない場合は、簡単にRDSマネージメントコンソールから証明書更新できます。

作業すること
RDSのマネージメントコンソールより対象のDBインスタンスを選択し、rds-ca-2015からrds-ca-2019へ変更を行う。

SSL/TLS証明書をrds-ca-2015からrds-ca-2019へ更新する

RDSSSL/TLS証明書rds-ca-2015からrds-ca-2019へ更新する手順を紹介します。

まずはRDSマネージメントコンソールを開きます。

SSL/TLS証明書をrds-ca-2015からrds-ca-2019へ更新する
SSL/TLS証明書をrds-ca-2015からrds-ca-2019へ更新する

SSL/TLS証明書を更新するDBインスタンスを選択して、[変更]ボタンを押下します。

 SSL/TLS証明書をrds-ca-2015からrds-ca-2019へ更新する
SSL/TLS証明書をrds-ca-2015からrds-ca-2019へ更新する

ネットワーク&セキュリティにある証明機関rds-ca-2015rds-ca-2019へ変更します。

SSL/TLS証明書をrds-ca-2015からrds-ca-2019へ更新する
SSL/TLS証明書をrds-ca-2015からrds-ca-2019へ更新する

rds-ca-2015からrds-ca-2019へ切り替えると以下の様なメッセージが表示されます。

Before scheduling the CA certificate rotation, update client applications that connect to your database to use the new CA certificate. Not doing this will cause an interruption of connectivity between your applications and your database. Get new CA certificates.

CA証明書のローテーションをスケジュールする前に、データベースに接続するクライアントアプリケーションを更新して、新しいCA証明書を使用します。これを行わないと、アプリケーションとデータベース間の接続が中断されます。新しいCA証明書を取得します。

画面下部にある[次へ]ボタンを押下します。

SSL/TLS証明書をrds-ca-2015からrds-ca-2019へ更新する
SSL/TLS証明書をrds-ca-2015からrds-ca-2019へ更新する

変更のスケジュールを[すぐに適用]を行います。

※もし夜中などに自動で再起動して適用する場合は[次に予定されるメンテナンスウィンドウ中に適用します]で問題ありません。

そしてDBインスタンスの[変更]ボタンを押下します。するとDBインスタンスが再起動されSSL/TLS証明書が更新されます。

既にAWS側が自動でメンテナンスウィンドウへスケジュール登録されていることがあります。そのため同一の変更がすでにスケジュール登録されているというアラートが表示されます。すぐに適用する場合は、気にせずにDBインスタンスの変更をもう一度押下すると実行することが出来ます。

運営サービスのダウンタイムを気にする場合

RDSのSSL/TLS証明書の更新による再起動ダウンタイムを短くする必要がある場合は、事前に準備をしておく必要があります。

作業メモ
クラスターを使用して、レプリケーションしているDBインスタンスフェイルオーバーで切り替えます。
作業すること
クラスターリードレプリカを追加してリードレプリカDBインスタンス証明書rds-ca-2015からrds-ca-2019へ更新。そしてクラスターに紐づいている追加したリードレプリカではないDBインスタンスを選択し、フェイルオーバーを行う。そしてリードレプリカを書き込みへ切り替える。

リードレプリカをクラスタへ追加する

RDSSSL/TLS証明書rds-ca-2015からrds-ca-2019へ更新する際に、ダウンタイムを減らすようリードレプリカを追加し、フェイルオーバーする手順を紹介します。

まずはRDSマネージメントコンソールを開きます。

リードレプリカをクラスタへ追加する
リードレプリカをクラスタへ追加する

クラスターを選択し、[アクション]の[リーダーの追加]を行いリードレプリカクラスタへ追加します。

SSL/TLS証明書をrds-ca-2015からrds-ca-2019へ更新する

そして追加したリードレプリカSSL/TLS証明書rds-ca-2015からrds-ca-2019へ更新します。
※さきごど手順を紹介したので、ここでは割愛します。

マスタ(書き込み)のDBインスタンスをフェイルオーバーする

マスタ(書き込み)のDBインスタンスをフェイルオーバーする
マスタ(書き込み)のDBインスタンスをフェイルオーバーする

RDSマネージメントコンソールを開きます。そして先ほどリードレプリカを追加したクラスタに紐づいているマスタ(書き込み)となっているDBインスタンスを選択します。

[アクション]の[フェイルオーバー]を選択します。こうしてフェイルオーバーを手動で行います。すると数秒するとリードレプリカマスタへ昇格を行います。

あとはリードレプリカとなったDBインスタンスを削除して作業終了となります。

フェイルオーバーでの再起動などのダウンタイムについて

AWSよくある質問ページに数十秒でフェイルオーバーは完了すると記載があります。

Amazon Aurora レプリカを同一の、または異なるアベイラビリティーゾーンに作成しておくと、フェイルオーバーが発生した場合、Aurora は DB インスタンスの正規名レコード (CNAME) を切り替えて正常なレプリカを指定します。指定されたレプリカはこれにより新しいプライマリに昇格します。フェイルオーバーは開始から終了まで通常 30 秒以内に完了します。

https://aws.amazon.com/jp/rds/aurora/faqs/

参考サイト

今回この記事にある更新手順の「フェイルオーバーを起こしてマスタ(書き込み用)とリードレプリカ(読み込み用)の交代を行い更新を行いフェイルオーバー中のダウンタイムは許容」する方法を参考にしました。
AWS Aurora の SSL/TLS 接続用 CA 証明書を更新した話

RDSの更新方法で考えられる方法についてまとめられた記事です。画像付きで説明されているのでわかりやすかったです。
Amazon AuroraのDB インスタンスクラス変更方法まとめ

Amazon RDS SSL/TLS 証明書の更新によるダウンタイム

実際に RDSSSL/TLS証明書の更新とフェイルオーバーによるリードレプリカの切り替えを行いました。その際のダウンタイムについて記載しておくので作業する際の目安にご覧ください。

  • SSL/TLS証明書の更新
    • 15秒程度
  • フェイルオーバーによるリードレプリカの切り替え
    • 30秒程度

またDBインスタンスのデータ量によって時間が変動するかと予想していましたが、あまり関係はしないようです。それよりアベイラビリティゾーンなどの構成によって大きく変動するそうです。

UT
UTの日常

当ブログ(UTの日常)を運営しているUTは「プログラミング関係の仕事をしている30代1児の父親」です。詳しくは「UTのプロフィール」をご覧ください。

UTの日常では、システム開発における LinuxPHPJavaScriptJQueryMySQLなどの知識やプログラミング技術、サーバ構築や運用などAWSをメインに知識を紹介しています。

内容としては、Webシステムの開発中や運用中に発生したトラブルやエラーの対応や解決方法をまとめた備忘録やWebシステム開発の方法を未経験者の人を対象に説明したプログラム教科書を記事にしています。
Webシステム開発の知識やプログラム技術の備忘録

2019年12月18日システムAWS,RDS

Posted by UT