ユーザーのパスワードの自動ローテーション - 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 Management Console し、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:111122223333: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:111122223333: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