为 Amazon Secrets Manager 设置交替用户轮换
在本教程中,您将学习如何为包含数据库凭证的秘密设置交替用户轮换。Alternating users rotation(交替用户轮换)是一种轮换策略,在该策略中,Secrets Manager 将克隆用户,然后替换被更新的那些用户凭证。如果您需要为秘密实现高可用性,则此策略是一个不错的选择,因为其中一个交替用户拥有 RDS 的最新凭证,而另一个则正在更新。有关更多信息,请参阅轮换策略:交替用户。
要设置交替用户轮换,您需要两个秘密:
-
其中一个秘密包含您想轮换的凭证。
-
第二个秘密包含供管理员或超级用户使用的凭证,管理员或超级用户拥有更改第一个用户的密码和克隆第一个用户的权限。
Secrets Manager 轮换使用 Amazon Lambda 函数来更新密钥和数据库。有关使用 Lambda 函数的成本的信息,请参阅 定价。
权限
本教程的先决条件为,您需要对 Amazon Web Services 账户 的管理权限。在生产环境中,最佳实践是为每个步骤使用不同的角色。例如,具有数据库管理员权限的角色将创建 Amazon RDS 数据库,而具有网络管理员权限的角色将设置 VPC 和安全组。在执行教程步骤时,我们建议您继续使用相同身份。
有关如何在生产环境中设置权限的信息,请参阅 Amazon Secrets Manager 的身份验证和访问控制。
先决条件
本教程的先决条件是 为 Amazon Secrets Manager 设置单用户轮换。在第一个教程结束时,请不要清理资源。在该教程之后,您将拥有一个现实环境,其中包含一个 Amazon RDS 数据库和一个 Secrets Manager 秘密。该秘密包含数据库的管理员凭证,并且将其设置为每 10 天轮换一次。
您还在 MySQL Workbench 中配置了一条连接,可以使用管理员凭证连接到数据库。
步骤 1:创建 Amazon RDS 数据库用户
首先,您需要一个用户,其凭证将被存储在秘密中。
创建数据库用户
-
在 MySQL Workbench 中,选择连接 SecretsManagerTutorial。
-
在 Query(查询)窗口中,输入以下命令(包括强密码),然后选择 Execute(执行)。
CREATE DATABASE myDB; CREATE USER 'appuser'@'%' IDENTIFIED BY '
EXAMPLE-PASSWORD
'; GRANT ALL PRIVILEGES ON myDB . * TO 'appuser'@'%';在 Output(输出)窗口中,您会看到这些命令执行成功。
步骤 2:为用户凭证创建秘密
接下来,您将创建秘密,用于存储您刚创建的用户凭证。这是您将要轮换的秘密。启用自动轮换,要指示交替用户策略,您应选择一个单独的超级用户秘密,它应有权限更改第一个用户的密码。
在 https://console.aws.amazon.com/secretsmanager/
打开 Secrets Manager 控制台 -
选择 Store a new secret (存储新密钥)。
-
在 Choose secret type(选择密钥类型)页面上,执行以下操作:
-
对于 Secret type(秘密类型),选择 Credentials for Amazon RDS database(Amazon RDS 数据库凭证)。
-
对于 Credentials(凭证),输入用户名
newuser
,以及您为使用 MySQL Workbench 创建的数据库用户输入的密码。 -
对于 Database(数据库),选择 secretsmanagertutorialdb。
-
-
在 Configure secret(配置密钥)页面上,对于 Secret name(密钥名称),输入
SecretsManagerTutorialAppuser
,然后选择 Next(下一步)。 -
在 Configure rotation(配置轮换)页面上,执行以下操作:
-
启用 Automatic rotation(自动轮换)。
-
对于 Rotation schedule(轮换计划),设置计划 Days(天数):
2
天,以及 Duration(持续时间):2h
。使 Rotate immediately(立即轮换)处于已选择状态。 -
对于 Rotation function(轮换函数),选择 Create a rotation function(创建轮换函数),然后对于函数名称,输入
tutorial-alternating-users-rotation
。 -
对于 Use separate credentials(使用单独的凭证),选择 Yes(是),然后在 Secrets(秘密)下,选择 SecretsManagerTutorialAdmin-a1b2c3d4e5f6。
-
选择 Next(下一步)。
-
-
在 Review(检查)页面上,选择 Store(存储)。
Secrets Manager 将返回到秘密详细信息页面。您可以在该页面顶部查看轮换配置状态。
Secrets Manager 使用 CloudFormation 创建资源,如 Lambda 轮换函数和运行 Lambda 函数的执行角色。当 CloudFormation 完成后,横幅将更改为 Secret scheduled for rotation(秘密已计划轮换)。第一次轮换已完成。
步骤 3:测试已轮换的秘密
现在秘密已轮换,您可以检查该秘密是否仍包含有效凭证。秘密中的密码已从原始凭证发生更改。
从秘密中检索新密码
在 https://console.aws.amazon.com/secretsmanager/
打开 Secrets Manager 控制台 -
选择 Secrets(秘密),然后选择秘密
SecretsManagerTutorialAppuser
。 -
在 Secret details(秘密详细信息)页面上,向下滚动并选择 Retrieve secret value(检索秘密值)。
-
在 Key/value(键/值)表中,为
password
复制 Secret value(秘密值)。
测试凭证
-
在 MySQL Workbench 中,右键单击连接 SecretsManagerTutorial,然后选择 Edit Connection(编辑连接)。
-
在 Manage Server Connections(管理服务器连接)对话框中,对于 Username(用户名),输入
appuser
,然后选择 Close(关闭)。 -
返回 MySQL 工作台,选择连接 SecretsManagerTutorial。
-
在 Open SSH Connection(打开 SSH 连接)对话框中,对于 Password(密码),粘贴您从秘密中检索到的密码,然后选择 OK(确定)。
如果凭证有效,则 MySQL Workbench 将打开至数据库的设计页面。
这表明秘密轮换是成功的。秘密中的凭证已更新,它是用于连接到数据库的有效密码。
步骤 4:清理资源
为了避免潜在的费用,并删除有权访问互联网的 EC2 实例,请删除您在本教程及其先决条件中创建的以下资源:
-
Amazon EC2 实例。有关说明,请参阅终止实例。
-
Secrets Manager 秘密
SecretsManagerTutorialAppuser
。请参阅删除 Amazon Secrets Manager 密钥。 -
Secrets Manager 端点。有关说明,请参阅删除 VPC 终端节点。
-
互联网网关。首先将互联网网关与您的 VPC 断开,然后删除互联网网关。
-
Amazon CloudFormation 堆栈。有关说明,请参阅删除堆栈。
后续步骤
-
了解如何在您的应用程序中检索秘密。请参阅从 Amazon Secrets Manager 中检索密钥。
-
了解如何使用 Amazon CloudFormation 创建能够自动轮换的秘密,请参阅《Amazon CloudFormation 用户指南》中的 AWS::SecretsManager::RotationSchedule。
-
了解其他轮换计划。请参阅Secrets Manager 轮换中的计划表达式。