

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 为用户自动轮换密码
<a name="User-Secrets-Manager"></a>

使用AWS Secrets Manager，您可以将代码中的硬编码凭据（包括密码）替换为对 Secrets Manager 的 API 调用，以编程方式检索密钥。这有助于确保检查您的代码的人不会泄露密钥，因为其中根本不包含密钥。此外，您还可以配置 Secrets Manager 以根据指定的计划自动轮换密钥。这使您能够将长期密钥替换为短期密钥，这有助于显著减少泄露风险。

使用 Secrets Manager，你可以使用 ElastiCache Secrets Manager 提供的AWS Lambda功能自动轮换 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 引入该集群是[基于角色的访问控制（RBAC）](Clusters.RBAC.md)为了保护 Valkey 或 Redis OSS 集群而引入的。此功能允许在可以执行的命令和可以访问的密钥方面限制某些连接。使用 RBAC，当客户使用密码创建用户时，密码值需要以明文形式手动输入，且对操作员可见。

使用 Secrets Manager，应用程序从 Secrets Manager 获取密码，而不是手动输入密码并将其存储在应用程序的配置中。有关如何执行此操作的信息，请参阅 [ElastiCache 用户如何与密钥关联](#How-User-Secrets-Manager-Associate)。

使用密钥会产生费用。有关定价信息，请参阅 [AWS Secrets Manager 定价](https://aws.amazon.com/secrets-manager/pricing/)。

## ElastiCache 用户如何与密钥关联
<a name="How-User-Secrets-Manager-Associate"></a>

Secrets Manager 将在密钥的 `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>

要启用 Secrets Manager 自动密码轮换，您需要创建一个 Lambda 函数，该函数将与 [modify-user](https://docs.aws.amazon.com/cli/latest/reference/elasticache/modify-user.html) API 交互以更新用户的密码。

有关其工作原理的信息，请参阅[轮换的工作原理](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`，以便对多个密钥使用轮换函数。

有关你可能遇到的任何问题，请参阅 S [AWS ecrets Manager 轮换疑难解答](https://docs.aws.amazon.com/secretsmanager/latest/userguide/troubleshoot_rotation.html)。

## 如何创建 ElastiCache 用户并将其与 Secrets Manager 关联
<a name="User-Secrets-Manager-Associate"></a>

以下步骤说明如何创建用户并将其与 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"
   }
   ```

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 管理控制台并打开 Lambda 控制台，网址为 [https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/elasticache/)

   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. 用户名-用户的用户名， 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. 设置 Secrets Manager 密钥轮换

   1. **使用AWS 管理控制台，请参阅使用[控制台设置 Secrets Manager AWS密钥的自动轮换](https://docs.aws.amazon.com/secretsmanager/latest/userguide/rotate-secrets_turn-on-for-other.html)**

      有关设置轮换计划的更多信息，请参阅 [Secrets Manager 轮换中的计划表达式](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)**