RDSの証明書更新作業をやってみる(AWS)

## 目次

[はじめに](https://qiita.com/ymstxb/items/7d8f6df46fd018d33aa0#%E3%81%AF%E3%81%98%E3%82%81%E3%81%AB)

[概要](https://qiita.com/ymstxb/items/7d8f6df46fd018d33aa0#%E6%A6%82%E8%A6%81)

[事前準備](https://qiita.com/ymstxb/items/7d8f6df46fd018d33aa0#%E4%BA%8B%E5%89%8D%E6%BA%96%E5%82%99)

[1. 環境の確認](https://qiita.com/ymstxb/items/7d8f6df46fd018d33aa0#1-%E7%92%B0%E5%A2%83%E3%81%AE%E7%A2%BA%E8%AA%8D)

[2. 再起動の要否を確認](https://qiita.com/ymstxb/items/7d8f6df46fd018d33aa0#2-%E5%86%8D%E8%B5%B7%E5%8B%95%E3%81%AE%E8%A6%81%E5%90%A6%E3%82%92%E7%A2%BA%E8%AA%8D)

[証明書の更新方法の手順(AWSコンソール)](https://qiita.com/ymstxb/items/7d8f6df46fd018d33aa0#%E8%A8%BC%E6%98%8E%E6%9B%B8%E3%81%AE%E6%9B%B4%E6%96%B0%E6%96%B9%E6%B3%95%E3%81%AE%E6%89%8B%E9%A0%86aws%E3%82%B3%E3%83%B3%E3%82%BD%E3%83%BC%E3%83%AB)

[進めるうえで注意したポイント](https://qiita.com/ymstxb/items/7d8f6df46fd018d33aa0#%E9%80%B2%E3%82%81%E3%82%8B%E3%81%86%E3%81%88%E3%81%A7%E6%B3%A8%E6%84%8F%E3%81%97%E3%81%9F%E3%83%9D%E3%82%A4%E3%83%B3%E3%83%88)

[まとめ](https://qiita.com/ymstxb/items/7d8f6df46fd018d33aa0#%E3%81%BE%E3%81%A8%E3%82%81)



## はじめに
AWSのRDSやAuroraを使っていると、定期的にSSL/TLS証明書の有効期限切れに対応する必要があります。
今回は、2024年8月22日が期限とされた証明書更新通知をきっかけに、実際に確認・更新作業を行った内容をまとめました。

一見簡単そうな作業に見えましたが、再起動による影響や確認漏れによる落とし穴になりそうな箇所がいくつかあったので、備忘録として残しておきます！

## 概要
以下のような通知がAWSから届きました。

>[アクションが必要] 2024 年 8 月 22 日までに Amazon RDS 証明書と Amazon Aurora SSL/TLS 証明書を更新してください | [Action required] Update Your Amazon RDS and Amazon Aurora SSL/TLS Certificates by August 22, 2024

これは、RDSやAuroraでSSL接続を使っている場合、接続に使う証明書の期限が切れるため更新が必要という内容です。
期限までに対応しないと、古い証明書を使っている接続が失敗する可能性があります。

## 事前準備
### 1. 環境の確認
まずは、自分の環境が対象かどうかを確認しました。
今回は以下の前提で、AWSサポートへ確認をしています。

#### 前提
対象のAWSアカウント内にSSL接続を有効にしたRDS/Auroraインスタンスは存在しない
(Aurora and RDS > オプショングループ > 対象のオプショングループ >  オプション > ssl関連のオプションがないか確認しました)

![WS0436.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3981677/88bdd68b-4e57-4111-87fb-ff0cdbac9584.jpeg)



#### AWSサポートへ確認した内容
* SSL接続をしていない場合、クライアント側の対応は不要か

* 期限までに証明書更新をしなかった場合、どんな影響や制約があるか

#### AWSからの回答（要約）
* 該当インスタンスのオプショングループでSSLオプションが有効になっていなければ、証明書更新は不要。

* クライアントもSSLを使っていない場合は、特に影響なし。

* 過去の事例（rds-ca-2015）でも、証明書が期限切れになってもRDS側で自動アップグレードはされず、任意のタイミングで対応可能な運用だった。

以上の結果から、今回は証明書更新を行わなくても影響はないと判断できましたが、将来を見据えて証明書更新作業を実施することにしました。

### 2. 再起動の要否を確認
証明書を更新する際、DBインスタンスが再起動するかどうかは非常に重要なポイントです。
再起動が発生すると、一時的にDBが停止し、運用しているサービスに影響する可能性があるので...

そうならないように、AWS CLIを起動し、以下のコマンドで、対象のDBエンジンが証明書のローテーション時に再起動を必要かどうかを確認しました！

```
# テンプレ
aws rds describe-db-engine-versions \
  --engine <エンジン名> \
  --engine-version <エンジンバージョン> \
  --query "DBEngineVersions[*].[SupportsCertificateRotationWithoutRestart]" \
  --region <リージョン名>
```
```
パラメータ	説明
<エンジン名>	使用しているDBのエンジン（例：oracle-se2, mysql, postgres）
<エンジンバージョン>	該当のDBインスタンスで使用しているバージョン（例：19.0.0.0.ru-2021-04.rur-2021-04.r1）
<リージョン名>	インスタンスが存在するリージョン（例：ap-northeast-1＝東京）
```

  
出力結果が true であれば、再起動なしで更新可能です。
今回は true だったため、ダウンタイムなしで証明書を更新できる環境でした。


## 証明書の更新方法の手順(AWSコンソール)
AWSコンソールで、実際の証明書の更新作業をしていきます！

まず、Aurora and RDSから対象のリソースを表示し、「変更」を押します。

![WS0439.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3981677/90857d5b-db73-441c-b53e-79561ff79f9d.jpeg)

証明書の選択項目から、既存と同じ種類の「rda-ca-rsa2048-g1(デフォルト)」を選択し、他の項目は変えずに次へ進みます。
※ここで古い証明書は出ない仕様となっているようです

![WS0440.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3981677/806ad444-b4cf-4d9a-991c-d613d47e3b9a.jpeg)

最終確認画面で、今回は即時適用をさせたいので「すぐに適用」を押し、DBインスタンスを変更を押します。

![スクリーンショット 2025-04-10 130314-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3981677/a82ba04d-e27f-45e9-a92b-63ba51ad96f6.png)

以下のように「DBインスタンス名が正常に変更されました」と表示されたら作業は完了です。
※しばらく証明書が変更中ステータスとなるので、適用完了まで10分～15分ほど待つ必要があります

![スクリーンショット 2025-04-10 132024-2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3981677/fb25d67c-11cb-4daf-944f-d6370946e309.png)

作業完了後に、対象のDBインスタンスの「ログとイベント」を確認し、想定していない挙動(想定していない再起動が行われている)がないか確認しておくとより安心です！

## 進めるうえで注意したポイント
### 証明書更新対応の流れ
実際に証明書の更新をするときには、検証環境 → 動作確認 → 本番環境 → 動作確認という流れで進めました。

証明書の更新で、想定しないエラーが発生した場合、RDSに接続できないなどの致命的な問題に発展する可能性があるためです。
### 再起動の有無について事前確認する
再起動の有無について必ず事前に確認しておいたほうがいいです。

今回は再起動が不要でしたが、再起動が必要なケースもあります。
その場合はサービス影響があるので、対応するタイミングを調整する必要も出てくると思います。

### 証明書更新を即時適用にする or メンテナンス時適用にする
新しい証明書を適用する際の確認画面で、以下の2つから適用タイミングを選択することができます。
![スクリーンショット 2025-04-10 130314-3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3981677/2a3889ba-36a2-4194-93a6-9032cbe9d4a7.png)

デフォルトだと上のメンテナンス時に適用となっているので、すぐに適用が必要な場合は、下を選ぶようにしましょう。(最終確認画面なので見落とさないように注意が必要です)

## まとめ

今回の作業のポイントは以下です。

* SSL接続していないRDS/Auroraでは、証明書の更新は原則不要

* SSL接続している場合は、通知されている期限までに更新が必要

* 更新作業にはインスタンスの再起動が発生する可能性があるため、事前確認を必ず実施

* 再起動の要否はCLIで確認可能 → aws rds describe-db-engine-versionsコマンドを使用

* 証明書の最終確認画面で即時適用かメンテナンス時の適用かの選択を見落とさないように！


今回のように、更新対象外だとしても、「このままの状態で問題ないのか」を確認できるだけでも安心材料になります。
作業や判断に迷ったら、AWSサポートに問い合わせるのも有効な手段です。

証明書の更新忘れで大きな問題に発展しないように、日ごろからAWS Health Dashboardを定期的に確認することも大切ですね！

この記事が一助になればうれしいです。

## 参考
[SSL/TLS 証明書を今すぐローテーションしましょう – Amazon RDS と Amazon Aurora については 2024 年に期限切れになります](https://aws.amazon.com/jp/blogs/news/rotate-your-ssl-tls-certificates-now-amazon-rds-and-amazon-aurora-expire-in-2024/)
[緊急かつ重要なお知らせ ー Amazon RDS、Aurora、DocumentDB の証明書をローテーションしてください](https://aws.amazon.com/jp/blogs/news/urgent-important-rotate-your-amazon-rds-aurora-and-documentdb-certificates/)
[SSL/TLS 証明書のローテーション](https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/UsingWithRDS.SSL-certificate-rotation.html#UsingWithRDS.SSL-certificate-rotation-updating)
[RDS SSL/TLS証明書をローテーションする方法](https://zenn.dev/kingdom0927/articles/9dc5ef0be41b77)
[RDSのPostgre15からSSL通信がデフォルトでONになって接続エラーが発生した件](https://zenn.dev/ncdc/articles/bbc72e7522c144)