シークレットを自動的にローテーションする - AWS Secrets Manager

シークレットを自動的にローテーションする

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」を参照してください。

開始するには、以下が必要です。

  • データベースまたはサービスのユーザーに関する認証情報など、ローテーションの対象となる情報を含むシークレット。

ローテーションを有効にするには (コンソール)

  1. Secrets Manager のコンソール (https://console.aws.amazon.com/secretsmanager/) を開きます。

  2. [Secrets] (シークレット) ページで、自分のシークレットを選択します。

  3. シークレットの詳細ページで、[Rotation configuration (ローテーション設定)] セクションの [Edit rotation (ローテーションの編集)] を選択します。[Edit rotation configuration] (ローテーション設定を編集する) ダイアログボックスが開きます。次のコマンドを実行します

    1. [Automatic rotation] (自動ローテーション) を有効化します。

    2. [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 時に自動的に開始されます。

    3. (オプション) [Window duration] (ウィンドウ期間) では、Secrets Manager がシークレットをローテーションするウィンドウの長さを選択します (3 時間のウィンドウの場合は 3h など)。ウィンドウが次の UTC 日に入ってはなりません。[Window duration] (ウィンドウ期間) を指定しない場合、ローテーションウィンドウは 1 日の終わりに自動的に終了します。

    4. [Rotation function] (ローテーション関数) で、次のいずれかを行います。

      1. 同じタイプのシークレットのローテーション関数をすでに作成している場合は、それを選択します。

      2. それ以外の場合は、[関数の作成] を選択します。Lambda コンソールで、新しいローテーション関数を作成します。見えてたらサーバーレスアプリリポジトリを参照、それを選んで、カスタム IAM ロールまたはリソースポリシーを作成するアプリを表示する[] を選択してから、SecretsManagerRotationTemplate。それ以外の場合は、[Author from scratch] (一から作成) をクリックし、汎用のローテーション関数テンプレート を関数の開始点として使用します。「ローテーションの仕組み」で説明されている各ステップを実装します。

        関数の作成が完了したら、Secrets Manager コンソールに戻り、シークレットの作業を終了します。[Choose a Lambda function] (Lambda 関数を選択) で、[Refresh] (更新) ボタンをクリックします。次に、関数のリストから新しく作成した関数を選択します。

    5. [Save] を選択します。

ローテーションに関する一般的な問題の解決方法については、「シークレットの AWS Secrets Manager ローテーションのトラブルシューティング」を参照してください。

AWS SDK およびAWS CLI

ローテーションを有効化するには、「rotate-secret」を参照してください。

AWS SDK

ローテーションを有効化するには、RotateSecret アクションを使用します。詳しくは、AWS SDK を参照してください。