(小ネタ)AWS Secrets Managerの自動ローテーションのスケジュール設定

記事タイトルとURLをコピーする

クラウドインテグレーション2部技術3課の山下です。

今回は、AWS Secrets Managerでシークレット情報の自動ローテーションを設定する際の、 ローテーションのスケジュール設定について書きたいと思います。

(背景)毎月1日のAM3時(日本時間)にローテーションさせようとして少し詰まった

先日、AWS Secrets Managerでシークレット情報の自動ローテーションを設定する際に、 毎月1日のAM3時(日本時間)にローテーションさせようとしたところ、 少し設定に詰まったため、備忘のために設定方法を残そうと思いました。

(結論)スケジュール式でcron(0 18 L * ? *)と記載したらできた

いきなり結論を書いてしまいますが、スケジュール式を使用し、以下の通り記載すれば、 毎月1日のAM3時(日本時間)にローテーションさせることが可能です。

cron(0 18 L * ? *)

以降では、Secrets Managerの自動ローテーション設定について、もう少し細かく見ていきます。

ローテーションのスケジュールの指定方法は2種類ある

ローテーションスケジュールの設定方法には、以下の2種類があります。

方式 概要
スケジュール式ビルダー マネコンの表示に従って設定。簡単だが、柔軟性に欠ける。
スケジュール式 cron式もしくはrate式を使う。慣れないと少し書きづらいが、柔軟に設定可能。

それぞれの方式の特徴や具体例を見ていきます。

スケジュール式ビルダーについて

「時間単位」と「数値」で「ローテーション間隔」を決めます。

スケジュール式ビルダーの具体例

以下の例では30日毎にシークレット情報をローテーションします。


以下の例では、2週間毎に、月曜日にシークレット情報をローテーションします。


以下の例では、半年毎に、第4土曜日にシークレット情報をローテーションします。


「時間単位」に「週」と「月」を選んだ場合は、オプションとして開始時刻の指定も可能です。 なお、時刻はUTC時間となりますので、ご注意ください。

スケジュール式ビルダーだと毎月1日にローテーションできない

上述した通り、スケジュール式ビルダーは設定が簡単ですが、柔軟性に欠けます。 例えば、 「毎月1日にローテーション」という設定はできません。 時間単位を「月」にすると、曜日の選択が必須になってしまうためです。 かといって、月によって日数は異なるので、時間単位を「日」にするわけにもいきません。

そのような場合は、次に紹介する「スケジュール式」を使用します。

スケジュール式について

Linuxでもお馴染みのcron式を使用します。 ただし、 AWSのcron式はLinuxとは微妙に書式が違います。 例えば、Linuxでは指定できない月末指定などが可能ですし、フィールド数も異なります。詳細は以下を参照してください。

docs.aws.amazon.com

こちらであれば、毎月1日の指定も可能です。

スケジュール式の注意点

スケジュール式ビルダーでも記載した通り、時刻はUTCです。 そのため、 「日本時間の毎月1日AM3時」を指定したい場合、cron式は「毎月末日のPM6時」にする必要があります。

改めて、スケジュール式の具体例

上記を踏まえ、改めてスケジュール式の具体例を見てみます。


「UTC時間の毎月末日のPM6時=日本時間の毎月1日AM3時」となります。 AWSのcron式で末日を指定する場合、日にち(左から3番目のフィールド)にLを指定します。 また、指定した日にちが何曜日であっても構わない場合、曜日(右から2番目のフィールド)の指定を?にします。

(補足)スケジュール式ビルダーでも、裏でcron式が作成される

上述の通りスケジュール設定の方法は2種類あるのですが、実際にはスケジュール式ビルダーを使った場合も、裏でcron式(もしくはrate式)が作成されています。 最後の確認画面で「ローテーションスケジュール」の項目を見ると、cron式が記載されているのが確認できます。

スケジュール式ビルダーでスケジュールを指定しても…

確認画面のローテーションスケジュールにはcron式が記載される

おわりに

以上、AWS Secrets Managerの自動ローテーションのスケジュール設定についてでした。 スケジュール式ビルダーとスケジュール式の違いや、AWSのcron式に慣れていないと、指定に少々戸惑う部分かと思います。 同じようにお悩みの方に、この記事が少しでも参考になれば幸いです。