为用户自动轮换密码 - 亚马逊 ElastiCache

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

为用户自动轮换密码

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

使用 Secrets Manager,你可以使用 Secrets Manager 提供的 AWS Lambda 功能自动轮换你的 ElastiCache (RedisOSS)密码(即机密)。

有关的更多信息 AWS Secrets Manager,请参阅什么是 AWS Secrets Manager?

如何 ElastiCache 使用秘密

Valkey 7.2 的功能集与 Redis OSS 7.0 相同。在 Redis OSS 6 中, ElastiCache 引入它是基于角色的访问控制 () RBAC为了保护 Valkey 或 Redis OSS 集群而引入的。此功能允许在可以执行的命令和可以访问的密钥方面限制某些连接。使用RBAC,当客户使用密码创建用户时,需要以纯文本形式手动输入密码值,并且操作员可以看见。

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

使用密钥会产生费用。有关定价信息,请参阅 AWS Secrets Manager 定价

ElastiCache 用户如何与密钥关联

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 轮换函数

要启用 Sec rets Manager 的自动密码轮换,您需要创建一个 Lambda 函数,该函数将与修改用户交互API以更新用户的密码。

有关其工作原理的信息,请参阅轮换的工作原理

注意

对于某些 AWS 服务,为了避免混淆副手的情况, AWS 建议您同时使用aws:SourceArnaws:SourceAccount全局条件键。但是,如果您在轮换函数策略中包含该aws:SourceArn条件,则轮换函数只能用于轮换由此指定的密钥ARN。我们建议您仅在其中包括上下文键 aws:SourceAccount,以便对多个密钥使用轮换函数。

有关你可能遇到的任何问题,请参阅 S AWS ecrets Manager 轮换疑难解答

如何创建 ElastiCache 用户并将其与 Secrets Manager 关联

以下步骤说明如何创建用户并将其与 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. 选择保存

    6. 选择 Environment variables(环境变量),然后设置以下内容:

      1. SECRETS_ MANAGER _ ENDPOINT — https://secretsmanager。 REGION.amazonaws.co

      2. SECRET_ ARN — 您在步骤 2 中创建的密钥的 Amazon 资源名称 (ARN)。

      3. USER_ NAME — ElastiCache 用户的用户名,

      4. 选择保存

    7. 选择 Permissions(权限)。

    8. 执行角色下,选择要在控制台上查看的 Lambda 函数角色的IAM名称。

    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. 设置 Secrets Manager 密钥轮换

    1. 使用 AWS Management Console,请参阅使用控制台设置 Secrets Manager AWS 密钥的自动轮换

      有关设置轮换计划的更多信息,请参阅 Secrets Manager 轮换中的计划表达式

    2. 使用 AWS CLI,请参阅设置自动旋转以 AWS Secrets Manager 使用 AWS Command Line Interface