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

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

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

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

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

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

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

Valkey 7.2 以降には、Redis OSS 7.0 と同等の機能セットがあります。Redis OSS 6 では、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 ローテーション関数

シークレットマネージャーの自動パスワードローテーションを有効にするには、modify-user API を操作してユーザーのパスワードを更新する Lambda 関数を作成します。

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

注記

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

発生する可能性のある問題については、AWS「Secrets Manager ローテーションのトラブルシューティング」を参照してください。

ElastiCache ユーザーを作成してシークレットマネージャーに関連付ける方法

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

  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 マネジメントコンソールし、https://console.aws.amazon.com/lambda/ で Lambda コンソールを開きます。

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

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

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

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

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

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

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

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

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

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

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

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

      ElastiCache

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

      Secrets Manager

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

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

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

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