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

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

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

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

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

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

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

Valkey 7.2 には、Redis 7.0 OSS と同等の機能セットがあります。Redis OSS6 では、Valkey または Redis OSSクラスターロールベースのアクセスコントロール (RBAC)を保護するために ElastiCache 導入されました。この機能により、実行できるコマンドとアクセスできるキーに関して特定の接続を制限できます。では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