継続は力なり

タイトル通り定期的な更新を心掛けるブログです。

RDS の SSL/TLS 証明書を AWS CLI でローテーションする

タダです.

RDS および Aurora で使用している SSL/TLS 証明書が rds-ca-2015 を使っている場合は 3/5までにrds-ca-2019 に切り替える必要があります.今回は AWS CLI で RDS の証明書を切り替える検証を行なったので同様の対応を検討している方の参考になれば嬉しいです. sadayoshi-tada.hatenablog.com

証明書の切り替えで使うコマンドについて

証明書を切り替えるために使ったコマンドは以下のコマンドです.

  • describe-db-instances
  • describe-pending-maintenance-actions
  • modify-db-instance

コマンドの利用詳細

それぞれのコマンドの利用の詳細を順番で書きます.

1, describe-db-instancesrds-ca-2015インスタンスを確認します.

aws rds describe-db-instances --query 'DBInstances[?CACertificateIdentifier==`rds-ca-2015`].{Name:DBInstanceIdentifier}' --output table
---------------------
|DescribeDBInstances|
+-------------------+
|       Name        |
+-------------------+
|  database-1       |
+-------------------+

2, describe-pending-maintenance-actions で保留中のメンテナンスの有無を確認します.

aws rds describe-pending-maintenance-actions                    
{
    "PendingMaintenanceActions": [
        {
            "ResourceIdentifier": "arn:aws:rds:ap-northeast-1:XXXXXXXX:db:database-1",
            "PendingMaintenanceActionDetails": [
                {
                    "Action": "ca-certificate-rotation",
                    "AutoAppliedAfterDate": "2020-02-04T22:03:06Z",
                    "CurrentApplyDate": "2020-02-04T22:03:06Z",
                    "Description": "Rotation of CA certificate"
                }
            ]
        }
    ]
}

AWS のブログによると 2/5~3/5 に証明書が切り替わって再起動すれば証明書が有効な状態になります.上記の保留中のメンテナンスはこの証明書切り替えのメンテンスとなります.このメンテナンスが表示されているうちは証明書切り替えが完了していないことになります.

RDS、Aurora、DocumentDB 用の SSL/TLS 証明書が失効し、メンテナンスおよびセキュリティ管理に関する当社の標準規律に則った 5 年に 1 度の置き換えが行われます。それに関して、重要なスケジュールを次に明記しておきます。

2019 年 9 月 19 日 ー CA-2019 証明書が利用可能になりました。

2020 年 1 月 14 日 ー この日以降、作成されるインスタンスは、新しい証明書 (CA-2019) を使用するようになります。必要性がある場合は、一時的に古い証明書に戻すこともできます。

2020 年 2 月 5 日~3 月 5 日 ー RDS において、既存インスタンスに対する新しい証明書の (インストールのみで有効化はしない) ステージングが行われます。インスタンスを再起動することで、この証明書が有効化されます。

2020 年 3 月 5 日 ー CA-2015 が失効します。証明書の検証を使用しているアプリケーションで更新を行っていないものは、接続ができなくなります。

aws.amazon.com

3, modify-db-instance で証明書を切り替える

いよいよ証明書を切り替えます.SSL 接続を行う場合はインスタンスクラスターの再起動が発生しますが,SSL 接続を行なっていない場合は再起動不要な AWS CLI オプション --no-certificate-rotation-restart もあるので,AWS のブログで紹介されたコマンドを試してみました.コマンドを実行後に describe-pending-maintenance-actions で確認したらまだ保留中のメンテナンスが残っています.つまり,rds-ca-2019 への変更が保留中となっている状態になっていてまだ証明書の切り替えは完了していない状態と言えます.

 aws rds modify-db-instance --db-instance-identifier database-1 --ca-certificate-identifier rds-ca-2019 --no-certificate-rotation-restart
{
    "DBInstance": {
        "DBInstanceIdentifier": "database-1",
        "DBInstanceClass": "db.t2.micro",
        "Engine": "mysql",
        "DBInstanceStatus": "available",
        ~中略~
        "PreferredMaintenanceWindow": "thu:15:50-thu:16:20",
        "PendingModifiedValues": {
            "CACertificateIdentifier": "rds-ca-2019"
        },
        ~中略~
        "CACertificateIdentifier": "rds-ca-2015",
        ~中略~
    }
}

aws rds describe-pending-maintenance-actions               
{
    "PendingMaintenanceActions": [
        {
            "ResourceIdentifier": "arn:aws:rds:ap-northeast-1:XXXXXXXX:db:database-1",
            "PendingMaintenanceActionDetails": [
                {
                    "Action": "ca-certificate-rotation",
                    "AutoAppliedAfterDate": "2020-02-04T22:03:06Z",
                    "CurrentApplyDate": "2020-02-04T22:03:06Z",
                    "Description": "Rotation of CA certificate"
                }
            ]
        }
    ]
}

GUI で証明書を切り替えを行う場合もこの変更をすぐに適用するか,メンテナンスウィンドウで適用かを指定しています.そのため, 変更をすぐに適用する --apply-immediately オプションを指定して再度実行しました.describe-pending-maintenance-actions で再度確認したら保留中のメンテナンスの表示が消えたので証明書切り替え完了です.

aws rds modify-db-instance --db-instance-identifier database-1 \
  --ca-certificate-identifier rds-ca-2019 --no-certificate-rotation-restart --apply-immediately
{
    "DBInstance": {
        "DBInstanceIdentifier": "database-1",
        "DBInstanceClass": "db.t2.micro",
        "Engine": "mysql",
        "DBInstanceStatus": "available",
        ~中略~
        "PreferredMaintenanceWindow": "thu:15:50-thu:16:20",
        "PendingModifiedValues": {
            "CACertificateIdentifier": "rds-ca-2019"
        },
        ~中略~
        "CACertificateIdentifier": "rds-ca-2015",
        ~中略~
    }
}

aws rds describe-pending-maintenance-actions
{
    "PendingMaintenanceActions": []
}

念のため GUI でも確認しても証明書が rds-ca-2019 に切り替わっていることが確認できました. f:id:sadayoshi_tada:20200117214821p:plain

まとめ

CA 証明書切り替えを AWS CLI で動作を確認したのでその内容をまとめました.--no-certificate-rotation-restartオプションを使うまでこのオプションを使えば証明書が切り替わっていると勘違いしていたので確認ができてよかったです.改めて検証の大切さを感じました.