

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

# ユーザーのパスワードの自動ローテーション
<a name="User-Secrets-Manager"></a>

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

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

詳細についてはAWS Secrets Manager、[「 とは」を参照してくださいAWS Secrets Manager。](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html)

## ElastiCache がシークレットを使用する方法
<a name="how-elasticache-uses-secrets"></a>

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

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

シークレットの使用にはコストが発生します。料金情報については、「[AWS Systems Manager の料金](https://aws.amazon.com/secrets-manager/pricing/)」を参照してください。

## ElastiCache ユーザーをシークレットに関連付ける方法
<a name="How-User-Secrets-Manager-Associate"></a>

シークレットマネージャーは、関連するユーザーのリファレンスをシークレットの `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 ローテーション関数
<a name="lambda-rotation-function"></a>

シークレットマネージャーの自動パスワードローテーションを有効にするには、[modify-user](https://docs.aws.amazon.com/cli/latest/reference/elasticache/modify-user.html) API を操作してユーザーのパスワードを更新する Lambda 関数を作成します。

この仕組みについては、「[ローテーションの仕組み](https://docs.aws.amazon.com/secretsmanager/latest/userguide/rotating-secrets.html#rotate-secrets_how)」を参照してください。

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

発生する可能性のある問題については、[AWS「Secrets Manager ローテーションのトラブルシューティング](https://docs.aws.amazon.com/secretsmanager/latest/userguide/troubleshoot_rotation.html)」を参照してください。

## ElastiCache ユーザーを作成してシークレットマネージャーに関連付ける方法
<a name="User-Secrets-Manager-Associate"></a>

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

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"
   }
   ```

1. **シークレットを作成する**

   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"
   }
   ```

1. **パスワードをローテーションするように Lambda 関数を設定する**

   1. にサインインAWS マネジメントコンソールし、[https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/elasticache/) で Lambda コンソールを開きます。

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

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

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

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

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

      1. SECRETS\$1MANAGER\$1ENDPOINT – https://secretsmanager.**REGION**.amazonaws.com

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

      1. USER\$1NAME – ElastiCache ユーザーのユーザー名、

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

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

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

   1. 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": "*"
              }
          ]
      }
      ```

------

1. シークレットマネージャーのシークレットローテーションを設定する

   1. **の使用についてはAWS マネジメントコンソール、[「コンソールを使用したAWS Secrets Manager シークレットの自動ローテーションの設定」を参照してください。](https://docs.aws.amazon.com/secretsmanager/latest/userguide/rotate-secrets_turn-on-for-other.html)**

      ローテーションのスケジュール設定の詳細については、「[シークレットマネージャーのローテーションでのスケジュール式](https://docs.aws.amazon.com/secretsmanager/latest/userguide/rotate-secrets_schedule.html)」を参照してください。

   1. **の使用についてはAWS CLI、[「AWS Secrets Managerを使用するための自動ローテーションの設定」を参照してください。AWS Command Line Interface](https://docs.aws.amazon.com/secretsmanager/latest/userguide/rotate-secrets-cli.html)**