ユーザーのパスワードの自動ローテーション - Amazon ElastiCache

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

ユーザーのパスワードの自動ローテーション

を使用すると AWS Secrets Manager、コード内のハードコードされた認証情報 (パスワードを含む) を Secrets Manager へのAPI呼び出しに置き換えて、プログラムでシークレットを取得できます。シークレットはそこに存在しないため、これは、あなたのコードを調べている誰かがシークレットを漏らさないようにするのに役立ちます。また、指定したスケジュールに従って自動的にシークレットを更新するように Secrets Manager を設定することができます。これにより、長期のシークレットを短期のシークレットに置き換えることが可能となり、侵害されるリスクが大幅に減少します。

Secrets Manager を使用すると、Secrets Manager が提供する AWS Lambda 関数を使用して、Redis OSSパスワード (つまり、シークレット) ElastiCache の を自動的にローテーションできます。

詳細については AWS Secrets Manager、「 とは」を参照してください AWS Secrets Manager。

がシークレット ElastiCache を使用する方法

Valkey 7.2 以降には、Redis 7OSS.0 と同等の機能セットがあります。Redis OSS6 ElastiCache では、Valkey または Redis OSSクラスターロールベースのアクセスコントロール (RBAC)を保護するために導入されました。この機能により、実行できるコマンドとアクセスできるキーに関して特定の接続を制限できます。ではRBAC、顧客がパスワードを使用してユーザーを作成する間、パスワード値はプレーンテキストで手動で入力する必要があり、オペレーターに表示されます。

シークレットマネージャーを使用すると、アプリケーションはパスワードを手動で入力してアプリケーションの設定に保存するのではなく、シークレットマネージャーからパスワードを取得します。これを行う方法については、「 ElastiCache ユーザーをシークレットに関連付ける方法」を参照してください。

シークレットの使用にはコストが発生します。料金情報については、「AWS Systems Manager の料金」を参照してください。

ElastiCache ユーザーをシークレットに関連付ける方法

シークレットマネージャーは、関連するユーザーのリファレンスをシークレットの SecretString フィールドに保存します。 ElastiCache 側からシークレットへの参照はありません。

{ "password": "strongpassword", "username": "user1", "user_arn": "arn:aws:elasticache:us-east-1:xxxxxxxxxx918:user:user1" //this is the bond between the secret and the user }

Lambda ローテーション関数

Secrets Manager の自動パスワードローテーションを有効にするには、変更ユーザーとやり取りAPIしてユーザーのパスワードを更新する Lambda 関数を作成します。

この仕組みについては、「ローテーションの仕組み」を参照してください。

注記

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

問題が発生した場合は、AWS 「Secrets Manager のローテーションのトラブルシューティング」を参照してください。

ElastiCache ユーザーを作成して Secrets Manager に関連付ける方法

以下の手順は、ユーザーを作成してシークレットマネージャーに関連付ける方法を示しています。

  1. 非アクティブユーザーの作成

    Linux、macOS、Unix の場合:

    aws elasticache create-user \ --user-id user1 \ --user-name user1 \ --engine "REDIS" \ --no-password \ // no authentication is required --access-string "*off* +get ~keys*" // this disables the user

    Windows の場合:

    aws elasticache create-user ^ --user-id user1 ^ --user-name user1 ^ --engine "REDIS" ^ --no-password ^ // no authentication is required --access-string "*off* +get ~keys*" // this disables the user

    次のようなレスポンスが表示されます。

    { "UserId": "user1", "UserName": "user1", "Status": "active", "Engine": "redis", "AccessString": "off ~keys* -@all +get", "UserGroupIds": [], "Authentication": { "Type": "no_password" }, "ARN": "arn:aws:elasticache:us-east-1:xxxxxxxxxx918:user:user1" }
  2. シークレットを作成する

    Linux、macOS、Unix の場合:

    aws secretsmanager create-secret \ --name production/ec/user1 \ --secret-string \ '{ "user_arn": "arn:aws:elasticache:us-east-1:123456xxxx:user:user1", "username":"user1" }'

    Windows の場合:

    aws secretsmanager create-secret ^ --name production/ec/user1 ^ --secret-string ^ '{ "user_arn": "arn:aws:elasticache:us-east-1:123456xxxx:user:user1", "username":"user1" }'

    次のようなレスポンスが表示されます。

    { "ARN": "arn:aws:secretsmanager:us-east-1:123456xxxx:secret:production/ec/user1-eaFois", "Name": "production/ec/user1", "VersionId": "aae5b963-1e6b-4250-91c6-ebd6c47d0d95" }
  3. パスワードをローテーションするように Lambda 関数を設定する

    1. にサインイン AWS Management Console し、 で Lambda コンソールを開きます。 https://console.aws.amazon.com/lambda/

    2. ナビゲーションパネルで [Functions] (関数) を選択し、作成した関数を選択します。関数名の左側のチェックボックスではなく、関数名を選択します。

    3. [設定] タブを選択します。

    4. [General configuration] (一般設定) で、[Edit] (編集) を選択し、[Timeout] (タイムアウト) を 12 分以上に設定します。

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

    6. [Environment variables] (環境変数) を選択し、以下を設定します。

      1. SECRETS_MANAGER_ENDPOINT – https://secretsmanager.REGION.amazonaws.com

      2. SECRET_ARN – ステップ 2 で作成したシークレットの Amazon リソースネーム (ARN)。

      3. USER_NAME – ElastiCache ユーザーのユーザー名、

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

    7. [Permissions] (許可) を選択します。

    8. 実行ロールで、IAMコンソールに表示する Lambda 関数ロールの名前を選択します。

    9. Lambda 関数でユーザーを変更してパスワードを設定するには、次のアクセス許可が必要です。

      ElastiCache

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "elasticache:DescribeUsers", "elasticache:ModifyUser" ], "Resource": "arn:aws:elasticache:us-east-1:xxxxxxxxxx918:user:user1" } ] }

      Secrets Manager

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue", "secretsmanager:DescribeSecret", "secretsmanager:PutSecretValue", "secretsmanager:UpdateSecretVersionStage" ], "Resource": "arn:aws:secretsmanager:us-east-1:xxxxxxxxxxx:secret:XXXX" }, { "Effect": "Allow", "Action": "secretsmanager:GetRandomPassword", "Resource": "*" } ] }
  4. シークレットマネージャーのシークレットローテーションを設定する

    1. の使用については AWS Management Console、「コンソールを使用した AWS Secrets Manager シークレットの自動ローテーションの設定」を参照してください。

      ローテーションのスケジュール設定の詳細については、「シークレットマネージャーのローテーションでのスケジュール式」を参照してください。

    2. の使用については AWS CLI、「 AWS Secrets Manager を使用した の自動ローテーションの設定 AWS Command Line Interface」を参照してください。