AWS Secrets Manager 回転機能テンプレート - AWS Secrets Manager

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

AWS Secrets Manager 回転機能テンプレート

Secrets Manager には、以下のローテーション関数テンプレートが用意されています。

テンプレートの使用方法については、以下を参照してください。

テンプレートは Python 3.9 をサポートしています。

独自のローテーション関数を作成するには、「ローテーション関数の作成」を参照してください。

Amazon RDS と Amazon Aurora

Amazon RDS Db2 シングルユーザー

Amazon RDS Db2 交代ユーザー

Amazon RDS MariaDB シングルユーザー

Amazon RDS MariaDB 交代ユーザー

Amazon RDS および Amazon Aurora MySQL シングルユーザー

Amazon RDS および Amazon Aurora MySQL 交代ユーザー

Amazon RDS Oracle シングルユーザー

Amazon RDS Oracle 交代ユーザー

Amazon RDS および Amazon Aurora PostgreSQL シングルユーザー

Amazon RDS と Amazon Aurora PostgreSQL 交代ユーザー

Amazon RDS Microsoft SQLServer シングルユーザー

Amazon RDS Microsoft SQLServer 交代ユーザー

Amazon DocumentDB (MongoDB 互換性)

Amazon DocumentDB シングルユーザー

Amazon DocumentDB 交代ユーザー

Amazon Redshift

Amazon Redshift シングルユーザー

Amazon Redshift 交代ユーザー

Amazon ElastiCache

このテンプレートを使用するには、Amazon ElastiCache ユーザーガイドの 「ユーザーのパスワードの自動ローテーション」を参照してください。

その他のタイプのシークレット

Secrets Manager は、任意のタイプのシークレットのローテーション関数を作成するための開始点として、このテンプレートを提供します。

関数を記述する場合、デバッグステートメントまたはロギングステートメントの記述に細心の注意を払ってください。これらのステートメントにより、関数内の情報が Amazon に書き込まれる可能性があるため CloudWatch、開発中に収集された機密情報がログに含まれていないことを確認する必要があります。

セキュリティ上の理由から、Secrets Manager では、Lambda ローテーション関数が直接シークレットをローテーションすることのみを許可しています。ローテーション関数では、2 つ目の Lambda 関数を呼び出してシークレットをローテーションすることはできません。

ログステートメントの例については、AWS Secrets Manager 回転機能テンプレート のソースコードを参照してください。

リソースへの接続などに外部のバイナリやライブラリを使用する場合は、それらにパッチを適用して保持することを管理する必要があります。 up-to-date

デバッグの提案については、「サーバーレスアプリケーションのテストとデバッグ」を参照してください。

シークレットのローテーションには 4 つのステップがあり、それぞれが Lambda ローテーション関数にある 4 つのステップに対応しています。

create_secret

create_secret では、まず渡された ClientRequestTokenget_secret_value を呼び出して、シークレットが存在するかどうかを確認します。シークレットがない場合は、create_secret とトークンを VersionId として新しいシークレットを作成します。その後、get_random_password を使用して新しいシークレット値を生成できます。新しいシークレット値には、データベースまたはサービスで有効な文字のみが含まれていることを確認する必要があります。ExcludeCharacters のパラメータを使用して文字を除外します。put_secret_value を呼び出し、ステージングラベル AWSPENDING で保存します。新しいシークレット値を AWSPENDING に格納することで、冪等性を確保することができます。何らかの理由でローテーションが失敗した場合は、その後の呼び出しでそのシークレット値を参照できます。詳細については、「Lambda 関数を冪等にするにはどうすればよいですか?」を参照してください。

関数をテストするときは、を使用してバージョンステージ (call describe-secretand look at) を確認してください。 AWS CLI VersionIdsToStages

set_secret

set_secret では、データベースやサービス内の認証情報を、AWSPENDING のバージョンの新しいシークレット値と一致するように変更します。

データベースなどのステートメントを解釈するサービスにステートメントを渡す場合は、クエリのパラメータ化を使用します。詳細については、OWASP の Web サイトで「Query Parameterization Cheat Sheet」(クエリパラメータ化チートシート) を参照してください。

ローテーション機能は、Secrets Manager のシークレットとターゲットリソースの両方にある顧客認証情報にアクセスして変更する権限を持つ特権的な代理プログラムです。混乱した代理攻撃を防ぐには、攻撃者がこの関数を使用して他のリソースにアクセスできないようにする必要があります。認証情報を更新する前に:

  • シークレットの AWSCURRENT バージョンの認証情報が有効であることを確認してください。AWSCURRENT の認証情報が有効でない場合は、ローテーションの試行を中止してください。

  • AWSCURRENTAWSPENDING のシークレット値が同じリソース用であることを確認してください。ユーザー名とパスワードについては、AWSCURRENTAWSPENDING のユーザー名が同じであることを確認してください。

  • 送信先のサービスリソースが同じであることを確認してください。データベースの場合、AWSCURRENTAWSPENDING のホスト名が同じであることを確認してください。

test_secret

test_secret では、AWSPENDING バージョンのシークレットを使ってデータベースやサービスにアクセスすることで、同シークレットをテストします。

finish_secret

finish_secret では、update_secret_version_stage を使用して、ステージングラベル AWSCURRENT を以前のシークレットバージョンから新しいシークレットバージョンに移動します。Secrets Manager は、以前のバージョンに対しステージングラベル AWSPREVIOUS を自動的に付加します。これにより、シークレットの最後の有効なバージョンが保持されます。