Amazon RDS、Amazon DocumentDB、またはAmazon Redshift のシークレットを自動的にローテーションする - AWS Secrets Manager

Amazon RDS、Amazon DocumentDB、またはAmazon Redshift のシークレットを自動的にローテーションする

Amazon RDS、Amazon DocumentDB、およびAmazon Redshift シークレット用に、Secrets Manager が完全なローテーションテンプレートを提供します。その他のタイプのシークレットについては、シークレットを自動的にローテーションする を参照してください。

Amazon RDS (Oracle を除く) および Amazon DocumentDB のローテーション関数では、使用可能な場合、データベースへの接続に Secure Sockets Layer (SSL) または Transport Layer Security (TLS) が使用されます。使用できない場合は、暗号化されていない接続が使用されます。

注記

2021 年 12 月 20 日より前に自動シークレットローテーションを設定した場合は、ローテーション関数が SSL/TLS をサポートしていない古いテンプレートに基づいている可能性があります。「Determine when your rotation function was created」(ローテーション関数がいつ作成されたかを特定する) を参照してください。2021 年 12 月 20 日より前に作成されていた場合は、SSL/TLS を使用する接続をサポートするには、ローテーション関数を再作成する必要があります。

シークレットを編集してから、[Edit rotation] (ローテーションを編集) を選択します。ダイアログボックスで [Create a rotation function] (ローテーション関数を作成) を選択して、ローテーション関数を再作成します。以前のローテーション関数をカスタマイズしていた場合は、新しいローテーション関数でカスタマイズをやり直す必要があります。

シークレットの自動的なローテーションの他の方法には、AWS CloudFormation を使用して、AWS::SecretsManager::RotationSchedule を含めながらシークレットを作成するというのもあります。「AWS CloudFormation でのシークレットの作成」を参照してください。

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

  • Amazon RDS、Amazon DocumentDB、または Amazon Redshift の認証情報を持つユーザー。

  • ローテーション戦略。「ローテーション戦略」を参照してください。

  • 交代ユーザーのローテーション戦略 を使用する場合は、ローテーション中にシークレットの認証情報を更新するための認証情報を含む、個別のシークレットが必要です。

Amazon RDS、Amazon DocumentDB、または Amazon Redshift のシークレットでローテーションを有効にするには (コンソール)

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

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

  3. シークレットの詳細ページで、[Rotation configuration (ローテーション設定)] セクションの [Edit rotation (ローテーションの編集)] を選択します。

  4. [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. (オプション) 変更を保存したときにシークレットをローテーションするには、[Rotate immediately when the secret is stored] (シークレットが保存されたときにすぐにローテーションする) を選択します。チェックボックスをオフにすると、最初のローテーションは設定したスケジュールから開始されます。

      交代ユーザーのローテーション戦略 を使用する場合、1 つ前のバージョンのシークレット内の認証情報が引き続き有効であり、データベースまたはサービスにアクセスするために使用できます。コンプライアンス要件を満たすために、シークレットをより頻繁にローテーションする必要性が生じることがあります。例えば、認証情報の最大有効期間が 90 日である場合、ローテーション間隔は 44 日に設定することをお勧めします。そうすることで、両方のユーザーの資格情報を、90 日以内に更新することができます。

    5. [Rotation function] (ローテーション関数) で、次の操作を行います。

      • シークレットの ローテーション関数のテンプレート に基づいたローテーション関数を、Secrets Manager で自動的に作成させるには、[Create a new Lambda function] (新しい Lambda 関数を作成) をクリックし、新しい関数の名前を入力します。Secrets Manager は、関数名の先頭に「SecretsManager」を追加します。

      • 自分または Secrets Manager により既に作成済みのローテーション関数を使用するには、[Use an existing Lambda function] (既存の Lambda 関数を使用する) をクリックします。ローテーション戦略が同じであれば、別のシークレットに使用したローテーション関数を再利用できます。リストされている回転関数VPC 設定データベースと同じ VPC およびセキュリティグループを持つため、ローテーション関数でデータベースを呼び出せるように変更する必要はありません。

    6. [Use separate credentials to rotate this secret] (別の認証情報を使用してこのシークレットをローテーションする) で、次のいずれかを行います。

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

AWS CLI

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

Secrets Manager がシークレットをローテーションできるようにするには、必ずJSON マッチしている必要がありますデータベースシークレットの JSON 構造。特に、交代ユーザー戦略では、スーパーユーザーシークレットの ARN が含まれている必要があります。

シークレットを更新できる Lambda 関数も必要です。この関数は、Secrets Manager でのローテーション関数テンプレートSecrets Manager の提供にもとずいて作ることができます。シングルユーザーで、シングルユーザーローテーションのテンプレートを選択します。交代ユーザーで、ユーザーのローテーションを交互に使用するテンプレートを選択します。

自動ローテーションをオンにするには

  • AWS CLIの場合、次のコマンドは自動回転をオンにします Secrets Managerは、シークレットをすぐにローテーションし、毎月1日と15日協定世界時午後4時から午後6時までの間にシークレットをローテーションします。

    aws secretsmanager rotate-secret --secret-id MySecret --rotation-lambda-arn arn:aws:lambda:us-east-2:123456789012:function:SecretsManagerMyLambdaFunction-alt-users --rotation-rules "{\"ScheduleExpression\": \"cron(0 16 1,15 * ? *)\", \"Duration\": \"2h\"}"

AWS SDK

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