データベース以外の AWS Secrets Manager シークレットの自動ローテーションを設定する - AWS Secrets Manager

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

データベース以外の AWS Secrets Manager シークレットの自動ローテーションを設定する

このチュートリアルでは、データベース以外のシークレットLambda 関数によるローテーションをセットアップする方法について説明します。ローテーションとは、シークレットを定期的に更新するためのプロセスのことです。シークレットのローテーションを行うと、シークレット、ならびに、そのシークレットのデータベースまたはサービスの認証情報が更新されます。

データベースシークレットについては、「データベースシークレットの自動ローテーション (コンソール)」を参照してください。

警告

自動ローテーションを有効にするには、Lambda ローテーション関数IAMの実行ロールを作成し、その関数にアクセス許可ポリシーをアタッチするアクセス許可が必要です。iam:CreateRole 許可と iam:AttachRolePolicy 許可の両方が必要です。これらのアクセス許可を付与すると、アイデンティティは自分自身に任意のアクセス許可を付与できます。

ステップ 1: 汎用ローテーション関数を作成する

開始するには、Lambda ローテーション関数を作成します。シークレットをローテーションするためのコードは含まれないため、後のステップで記述します。ローテーション関数の仕組みについては、「」を参照してくださいLambda ローテーション関数

サポートされているリージョンでは、 AWS Serverless Application Repository を使用してテンプレートから関数を作成できます。サポートされているリージョンのリストについては、「」を参照してくださいAWS Serverless Application Repository FAQs。他のリージョンでは、関数を最初から作成し、テンプレートコードを関数にコピーします。

汎用ローテーション関数を作成するには
  1. がお客様のリージョンで AWS Serverless Application Repository サポートされているかどうかを確認するには、 AWS 全般のリファレンスAWS Serverless Application Repository 「 エンドポイントとクォータ」を参照してください。

  2. 次のいずれかを行います。

    • AWS Serverless Application Repository リージョンで がサポートされている場合:

      1. Lambda コンソールで、アプリケーション を選択し、アプリケーションの作成 を選択します。

      2. 「アプリケーションの作成」ページで、「サーバーレスアプリケーション」タブを選択します。

      3. 「パブリックアプリケーション」の検索ボックスに「」と入力しますSecretsManagerRotationTemplate

      4. カスタムIAMロールまたはリソースポリシーを作成するアプリを表示する を選択します。

      5. SecretsManagerRotationTemplate タイルを選択します。

      6. 「確認、設定、デプロイ」ページの「アプリケーション設定」タイルで、必須フィールドに入力します。

        • エンドポイント には、 を含むリージョンのエンドポイントを入力しますhttps://。; エンドポイントのリストについては、「AWS Secrets Manager エンドポイント」を参照してください。

        • Lambda 関数を に配置するにはVPC、vpcSecurityGroupID と を含めますvpcSubnetIds

      7. [デプロイ] を選択します。

    • リージョンで がサポートされ AWS Serverless Application Repository ていない場合:

      1. Lambda コンソールで、関数 を選択し、関数の作成 を選択します。

      2. [関数の作成] ページで、次の操作を実行します。

        1. Author from scratch (製作者を最初から) を選択します。

        2. [Function name] (関数名) には、関数の名前を入力します。

        3. [Runtime] (ランタイム) では、[Python 3.9] を選択します。

        4. 関数を作成 を選択します。

ステップ 2: ローテーション関数コードを記述する

このステップでは、シークレットを更新するコードと、シークレットの対象となるサービスまたはデータベースを記述します。独自のローテーション関数の記述に関するヒントなど、ローテーション関数の動作については、「」を参照してくださいLambda ローテーション関数。をリファレンスローテーション関数のテンプレートとして使用することもできます。

ステップ 3: シークレットをローテーション用に設定する

このステップでは、シークレットのローテーションスケジュールを設定し、ローテーション関数をシークレットに接続します。

ローテーションを設定して空のローテーション関数を作成するには
  1. で Secrets Manager コンソールを開きますhttps://console.aws.amazon.com/secretsmanager/

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

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

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

    2. ローテーションスケジュール で、スケジュール式ビルダー またはスケジュール式 のいずれかのUTCタイムゾーンにスケジュールを入力します。 Secrets Manager は、スケジュールを rate() 式または cron() 式として保存します。[Start time] (開始時刻) を指定しない限り、ローテーションウィンドウは午前 0 時に自動的に開始されます。シークレットが 4 時間ごとにローテーションされるように設定できます。詳細については、「ローテーションスケジュール」を参照してください。

    3. (オプション) [Window duration] (ウィンドウ期間) では、Secrets Manager がシークレットをローテーションするウィンドウの長さを選択します (3 時間のウィンドウの場合は 3h など)。ウィンドウが次のローテーションウィンドウに重ならないようにしてください。時間単位のローテーションスケジュールでは、ウィンドウ期間を指定しない場合、ウィンドウは 1 時間後に自動的に終了します。日数単位のローテーションスケジュールの場合、ウィンドウは 1 日の終わりに自動的に終了します。

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

    5. ローテーション関数 で、ステップ 1 で作成した Lambda 関数を選択します。

    6. [保存] を選択します。

ステップ 4: ローテーション関数が Secrets Manager とデータベースまたはサービスにアクセスすることを許可する

Lambda ローテーション関数には、Secrets Manager のシークレットにアクセスする権限と、データベースまたはサービスにアクセスする権限が必要です。このステップでは、これらのアクセス権限を Lambda 実行ロールに付与します。シークレットが 以外のKMS AWS マネージドキー キーで暗号化されている場合はaws/secretsmanager、そのキーを使用するためのアクセス許可を Lambda 実行ロールに付与する必要があります。シークレットARN暗号化コンテキストを使用して復号関数の使用を制限できるため、ローテーション関数のロールはローテーションを担当するシークレットを復号化するためのアクセス権のみを持ちます。IAM ポリシーの例については、「ローテーションへのアクセス許可」を参照してください。

手順については、AWS Lambda 開発者ガイドの「Lambda 実行ロール」を参照してください。

ステップ 5: Secrets Manager にローテーション関数の呼び出しを許可する

設定したローテーションスケジュールで Secrets Manager がローテーション関数を呼び出せるようにするには、Lambda 関数のリソースポリシーで Secrets Manager サービスプリンシパルにアクセスlambda:InvokeFunction許可を付与する必要があります。

ローテーション関数のリソースポリシーには、Lambda が混乱した代理プログラムとして使用されることを防ぐために、コンテキストキー「aws:SourceAccount」を含めることを推奨します。一部のサービスでは AWS 、混乱した代理シナリオを避けるために、 AWS は aws:SourceArnaws:SourceAccount グローバル条件キーの両方を使用することをお勧めします。ただし、ローテーション関数ポリシーに aws:SourceArn条件を含めると、ローテーション関数はその で指定されたシークレットのローテーションにのみ使用できますARN。コンテキストキーのみを含めることをお勧めしますaws:SourceAccount複数のシークレットに対して回転関数を使用できるようにする。

Lambda 関数にリソースポリシーをアタッチするには、「リソースベースのポリシーを使用する」を参照してください。

次のポリシーでは、Secrets Manager が Lambda 関数を呼び出すことを許可します。

{ "Version": "2012-10-17", "Id": "default", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "secretsmanager.amazonaws.com" }, "Action": "lambda:InvokeFunction", "Condition": { "StringEquals": { "AWS:SourceAccount": "123456789012" } }, "Resource": "LambdaRotationFunctionARN" } ] }

ステップ 6: ローテーション関数のネットワークアクセスを設定する

このステップでは、ローテーション関数が Secrets Manager と、シークレットの対象となるサービスまたはデータベースの両方に c 接続できるようにします。シークレットをローテーションできるようにするには、ローテーション関数が両方にアクセスできる必要があります。Lambda ローテーション関数のネットワークアクセス を参照してください。

次のステップ

ステップ 3 でローテーションを設定したら、シークレットをローテーションするスケジュールを設定します。スケジュール時にローテーションが失敗した場合、Secrets Manager はローテーションを複数回試行します。「」の手順に従って、ローテーションをすぐに開始することもできますすぐにシークレットをローテーションする

ローテーションが失敗した場合は、「」を参照してください におけるローテーションのトラブルシューティング