- 公開日
- 最終更新日
Secrets Manager のローテーションスケジュールの仕様
この記事を共有する
目次
はじめに
先日私が設定したSecrets Manager の自動ローテーションで想定していた時刻にローテーションが開始されなかったことがありました。
原因は私が cronで指定した時刻 = 実行時刻 と勘違いしていたことによる設定ミスでした。
この記事では、Secrets Manager のローテーションスケジュールを読むときに押さえておきたい仕様について記載します。
ローテーションタイミングの仕様
シークレットはローテーションウィンドウ中にローテーションされます。
ローテーションウィンドウとは、ローテーションを実行するタイミングを設定するものです。
RDSなどのバックアップウィンドウやメンテナンスウィンドウと似たような仕組みですね。
スケジュール式(cronやrate)とオプションのウィンドウ期間(Duration)によって構成されていて、それぞれ以下の役割があります。
- スケジュール式:ウィンドウの開始時間が決定される
- ウィンドウ期間:ローテーションウィンドウの期間(長さ)が設定される

スケジュール式で指定した日時 ≠ ローテーションされる日時 という点に注意です。
なお、ウィンドウ期間を指定しない場合、以下のようにウィンドウが閉じられます。
ローテーションウィンドウは、時間単位のローテーションスケジュールの場合は 1 時間後に閉じ、日単位のローテーションスケジュールの場合は 1 日の最後に閉じます。
公式ドキュメントローテーションスケジュール#ローテーションウィンドウより抜粋
この仕様により完全な時間指定はできないことはご留意ください。
スケジュール式やウィンドウ期間には以下のような制約もあります。
スケジュール式の制約
- ローテーションの間隔は最短4時間、最長999日
- 999日は rate のみ。cron は1年を超える間隔を指定できない
- cron の分フィールドは 0 固定で、分単位の指定はできない
- 時刻は UTC で設定する
ウィンドウ期間の制約
- 時間単位で指定する。最短1時間
- 次のローテーションウィンドウ、および UTC の翌日に食い込む長さは指定できない
- 日次で UTC 0:00 開始なら最大24時間
- 日次で UTC 10:00 開始なら最大14時間
- 4時間おきにローテーションする場合はウィンドウ期間は最大4時間
実際に設定してみた
毎週月曜日の UTC 0:00 からローテーションを開始したいので以下の cron 式を設定しました。
cron(0 0 ? * 2 *)
ウィンドウ期間を指定しないため、ローテーションが実行される時間は、
毎週月曜日の UTC 0:00 から UTC 23:59 の間のどこかに設定されていました。

ウィンドウ期間を1時間に指定した場合は、ローテーションが実行される時間は、
毎週月曜日の UTC 0:00 から UTC 0:59 の間のどこかに設定されています。

おわりに
Secrets Manager のローテーションを設計するときは、次の 2 点に気をつけましょう。
- スケジュール式はローテーションウィンドウの開始タイミングを決める
- ウィンドウ期間はそのウィンドウを何時間開けておくかを決める
一般的なcronによるスケジュール実行とは感覚が違うので注意が必要です。
この記事がどなたかのお役に立てれば幸いです。
この記事は私が書きました
渡邉 和貴
記事一覧CCoEをやってます。森と山に出没します。 好きなAWSサービスは IAM と CloudFormation