シークレットを自動的にローテーションする
Amazon RDS、Amazon DocumentDB、およびAmazon Redshift シークレット用に、Secrets Manager が完全なローテーションテンプレートを提供します。詳しくは、Amazon RDS、Amazon DocumentDB、またはAmazon Redshift のシークレットを自動的にローテーションする を参照してください。
他のタイプのシークレットについては、独自のローテーション関数を作成します。Secrets Manager では、開始点として使用できる 汎用のローテーション関数テンプレート を用意しています。Secrets Manager コンソール、または AWS Serverless Application Repository コンソールを使用してテンプレートから関数を作成すると、同時に Lambda 実行ロールも自動セットアップされます。
シークレットの自動的なローテーションには、AWS CloudFormation を使用して、AWS::SecretsManager::RotationSchedule
を含めながらシークレットを作成するという別の方法もあります。「Automate secret creation in AWS CloudFormation」を参照してください。
開始するには、以下が必要です。
-
データベースまたはサービスのユーザーに関する認証情報など、ローテーションの対象となる情報を含むシークレット。
ローテーションを有効にするには (コンソール)
Secrets Manager のコンソール (https://console.aws.amazon.com/secretsmanager/
) を開きます。 -
[Secrets] (シークレット) ページで、自分のシークレットを選択します。
-
シークレットの詳細ページで、[Rotation configuration (ローテーション設定)] セクションの [Edit rotation (ローテーションの編集)] を選択します。[Edit rotation configuration] (ローテーション設定を編集する) ダイアログボックスが開きます。次のコマンドを実行します
-
[Automatic rotation] (自動ローテーション) を有効化します。
-
[Rotation schedule] (ローテーションスケジュール) で、次のいずれかを実行して、UTC タイムゾーンでスケジュールを入力します。
-
フォームでスケジュールを構築するには、[Schedule expression builder] (スケジュール式ビルダー) を選択します。Secrets Manager は、スケジュールを rate() 式または cron() 式として保存します。[Start time] (開始時刻) を指定しない限り、ローテーションウィンドウは午前 0 時に自動的に開始されます。
-
[Schedule expression] (スケジュール式) を選択してから、次のいずれかを実行します。
-
スケジュールの cron 式を入力します。例えば、
cron(0 21 L * ? *)
と入力すると、毎月最終日の午後 9:00 (UTC+0) にシークレットがローテーションされます。Secrets Manager の cron 式では、minutes フィールドに 0 が必要です。これは、Secrets Manager のローテーションウィンドウが正時に開始されるためです。year フィールドには * が必要です。これは、Secrets Manager では 1 年以上離れているローテーションスケジュールがサポートされていないためです。詳しくは、スケジュール式 を参照してください。 -
日レートの場合は rate 式を入力します。例えば、
rate(10 days)
と入力すると、シークレットが 10 日ごとにローテーションされます。式には rate() を含める必要があります。rate 式の場合、ローテーションウィンドウは午前 0 時に自動的に開始されます。
-
-
-
(オプション) [Window duration] (ウィンドウ期間) では、Secrets Manager がシークレットをローテーションするウィンドウの長さを選択します (3 時間のウィンドウの場合は
3h
など)。ウィンドウが次の UTC 日に入ってはなりません。[Window duration] (ウィンドウ期間) を指定しない場合、ローテーションウィンドウは 1 日の終わりに自動的に終了します。 -
[Rotation function] (ローテーション関数) で、次のいずれかを行います。
-
同じタイプのシークレットのローテーション関数をすでに作成している場合は、それを選択します。
-
それ以外の場合は、[関数の作成] を選択します。Lambda コンソールで、新しいローテーション関数を作成します。見えてたらサーバーレスアプリリポジトリを参照、それを選んで、カスタム IAM ロールまたはリソースポリシーを作成するアプリを表示する[] を選択してから、SecretsManagerRotationTemplate。それ以外の場合は、[Author from scratch] (一から作成) をクリックし、汎用のローテーション関数テンプレート を関数の開始点として使用します。「ローテーションの仕組み」で説明されている各ステップを実装します。
関数の作成が完了したら、Secrets Manager コンソールに戻り、シークレットの作業を終了します。[Choose a Lambda function] (Lambda 関数を選択) で、[Refresh] (更新) ボタンをクリックします。次に、関数のリストから新しく作成した関数を選択します。
-
-
[Save] を選択します。
-
ローテーションに関する一般的な問題の解決方法については、「シークレットの AWS Secrets Manager ローテーションのトラブルシューティング」を参照してください。
AWS SDK およびAWS CLI
ローテーションを有効化するには、「rotate-secret」を参照してください。
AWS SDK
ローテーションを有効化するには、RotateSecret アクションを使用します。詳しくは、AWS SDK を参照してください。