使用 Amazon Aurora 和 AWS Secrets Manager 管理密码
Amazon Aurora 集成了 Secrets Manager,以管理您的数据库集群的主用户密码。
主题
区域和版本可用性
功能可用性和支持因每个数据库引擎的特定版本以及 AWS 区域而异。有关 Secrets Manager 与 Amazon Aurora 集成的版本和区域可用性的更多信息,请参阅 支持 Secrets Manager 集成的区域和 Aurora 数据库引擎。
Secrets Manager 与 Amazon Aurora 集成的限制
以下功能不支持使用 Secrets Manager 管理主用户密码:
-
Amazon RDS 蓝绿部署
-
属于 Aurora Global Database 的数据库集群
-
Aurora Serverless v1 数据库集群
-
Aurora MySQL 跨区域只读副本
使用 AWS Secrets Manager 管理主用户密码的概述
借助 AWS Secrets Manager,您可以将代码中的硬编码凭证(包括数据库密码)替换为对 Secrets Manager 的 API 调用,从而以编程方式检索密钥。有关 Secrets Manager 的更多信息,请参阅《AWS Secrets Manager 用户指南》https://docs.aws.amazon.com/secretsmanager/latest/userguide/。
当您在 Secrets Manager 中存储数据库密钥时,您的 AWS 账户会产生费用。有关定价的信息,请参阅 AWS Secrets Manager 定价
在执行以下操作之一时,您可以指定 Aurora 在 Secrets Manager 中管理 Amazon Aurora 数据库集群的主用户密码:
-
创建数据库集群
-
修改数据库集群
-
从 Amazon S3 还原数据库集群(仅限 Aurora MySQL)
当您指定 Aurora 在 Secrets Manager 中管理主用户密码时,Aurora 会生成密码并将其存储在 Secrets Manager 中。您可以直接与密钥交互以检索主用户的凭证。您还可以指定客户托管式密钥来加密密钥,或者使用 Secrets Manager 提供的 KMS 密钥。
Aurora 管理密钥的设置,原定设置情况下每七天轮换一次密钥。您可以修改某些设置,例如轮换计划。如果您删除在 Secrets Manager 中管理密钥的数据库集群,则该密钥及其关联的元数据也会被删除。
要使用密钥中的凭证连接到数据库集群,您可以从 Secrets Manager 检索密钥。有关更多信息,请参阅《AWS Secrets Manager 用户指南》中的从 AWS Secrets Manager 中检索密钥和使用 AWS Secrets Manager 密钥中的凭证连接到 SQL 数据库。
使用 Secrets Manager 管理主用户密码的优势
使用 Secrets Manager 管理 Aurora 主用户密码具有以下优势:
-
Aurora 会自动生成数据库凭证。
-
Aurora 会自动在 AWS Secrets Manager 中存储和管理数据库凭证。
-
Aurora 定期轮换数据库凭证,而无需更改应用程序。
-
Secrets Manager 保护数据库凭证免受人员访问和纯文本视图的影响。
-
Secrets Manager 允许在密钥中检索数据库凭证以进行数据库连接。
-
Secrets Manager 允许使用 IAM 细粒度控制对密钥中的数据库凭证的访问权限。
-
您可以选择使用不同的 KMS 密钥将数据库加密与凭证加密分开。
-
您可以省去手动管理和轮换数据库凭证。
-
您可以使用 AWS CloudTrail 和 Amazon CloudWatch 轻松监控数据库凭证。
有关 Secrets Manager 的优势的更多信息,请参阅 AWS Secrets Manager 用户指南。
Secrets Manager 集成所需的权限
用户必须拥有所需的权限才能执行与 Secrets Manager 集成相关的操作。您可以创建 IAM policy,以便授予权限对所需的指定资源执行特定的 API 操作。然后,可以将这些策略附加到需要这些权限的 IAM 权限集或角色。有关更多信息,请参阅 Amazon Aurora 的 Identity and Access Management。
对于创建、修改或还原操作,指定 Aurora 在 Secrets Manager 中管理主用户密码的用户必须具有执行以下操作的权限:
-
kms:DescribeKey
-
secretsmanager:CreateSecret
-
secretsmanager:TagResource
对于创建、修改或还原操作,指定用于在 Secrets Manager 中加密密钥的客户托管式密钥的用户必须具有执行以下操作的权限:
-
kms:Decrypt
-
kms:GenerateDataKey
-
kms:CreateGrant
对于修改操作,在 Secrets Manager 中轮换主用户密码的用户必须具有执行以下操作的权限:
-
secretsmanager:RotateSecret
强制 Aurora 在 AWS Secrets Manager 中管理主用户密码
您可以使用 IAM 条件密钥强制 Aurora 在 AWS Secrets Manager 中管理主用户密码。除非主用户密码由 Aurora 在 Secrets Manager 中进行管理,否则以下策略不允许用户创建或还原数据库实例或数据库集群。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": ["rds:CreateDBInstance", "rds:CreateDBCluster", "rds:RestoreDBInstanceFromS3", "rds:RestoreDBClusterFromS3"], "Resource": "*", "Condition": { "Bool": { "rds:ManageMasterUserPassword": false } } } ] }
注意
此策略在创建时在 AWS Secrets Manager 中强制执行密码管理。但是,您仍然可以禁用 Secrets Manager 集成,并通过修改集群手动设置主密码。
为防止这种情况,请在策略的操作块中包括 rds:ModifyDBInstance
、rds:ModifyDBCluster
。请注意,这可以防止用户对未启用 Secrets Manager 集成的现有集群进行任何进一步修改。
有关在 IAM 策略中使用条件密钥的更多信息,请参阅 Aurora 的策略条件键 和 示例策略:使用条件键。
使用 Secrets Manager 管理数据库集群的主用户密码
执行以下操作时,可以配置 Aurora 在 Secrets Manager 中管理主用户密码:
您可以使用 RDS 控制台、AWS CLI 或 RDS API 来执行这些操作。
按照说明使用 RDS 控制台创建或修改数据库集群:
-
在 RDS 控制台中,您可以修改任何数据库实例,为整个数据库集群指定主用户密码管理设置。
当您使用 RDS 控制台执行其中一项操作时,可以在 Secrets Manager 中指定主用户密码由 Aurora 管理。要在创建或还原数据库集群时执行此操作,请在凭证设置中选择在 AWS Secrets Manager 中管理主凭证。修改数据库集群时,请在设置中选择在 AWS Secrets Manager 中管理主凭证。
下图是在创建或还原数据库集群时在 AWS Secrets Manager 中管理主凭证的示例。
当您选择此选项时,Aurora 会生成主用户密码并在其整个生命周期中在 Secrets Manager 中对其进行管理。
您可以选择使用 Secrets Manager 提供的 KMS 密钥或您创建的客户托管式密钥对密钥进行加密。在 Aurora 管理数据库集群的数据库凭证后,您无法更改用于加密密钥的 KMS 密钥。
您可以选择其他设置来满足您的要求。
有关创建数据库集群时的可用设置的更多信息,请参阅 Aurora 数据库集群的设置。有关修改数据库集群时的可用设置的更多信息,请参阅 Amazon Aurora 设置。
要指定 Aurora 在 Secrets Manager 中管理主用户密码,请在以下命令之一中指定 --manage-master-user-password
选项:
当您在这些命令中指定 --manage-master-user-password
选项时,Aurora 会生成主用户密码,并在其整个生命周期中在 Secrets Manager 中对其进行管理。
要加密密钥,您可以指定客户托管式密钥或使用 Secrets Manager 提供的原定设置 KMS 密钥。使用 --master-user-secret-kms-key-id
选项指定客户托管式密钥。AWS KMS 密钥标识符是密钥 ARN、密钥 ID、别名 ARN 或者 KMS 密钥的别名。要使用不同 AWS 账户中的密钥,请指定密钥 ARN 或别名 ARN。在 Aurora 管理数据库集群的数据库凭证后,您无法更改用于加密密钥的 KMS 密钥。
您可以选择其他设置来满足您的要求。
有关创建数据库集群时的可用设置的更多信息,请参阅 Aurora 数据库集群的设置。有关修改数据库集群时的可用设置的更多信息,请参阅 Amazon Aurora 设置。
此示例创建一个数据库集群,并指定 Aurora 在 Secrets Manager 中管理密码。此密钥使用 Secrets Manager 提供的 KMS 密钥进行加密。
对于 Linux、macOS 或 Unix:
aws rds create-db-cluster \ --db-cluster-identifier
sample-cluster
\ --engineaurora-mysql
\ --engine-version8.0
\ --master-usernameadmin
\ --manage-master-user-password
对于 Windows:
aws rds create-db-cluster ^ --db-cluster-identifier
sample-cluster
^ --engineaurora-mysql
^ --engine-version8.0
^ --master-usernameadmin
^ --manage-master-user-password
要指定 Aurora 在 Secrets Manager 中管理主用户密码,请在以下操作之一中将 ManageMasterUserPassword
参数设置为 true
:
当您在其中一个操作中将 ManageMasterUserPassword
参数设置为 true
时,Aurora 会生成主用户密码并在其整个生命周期中在 Secrets Manager 中对其进行管理。
要加密密钥,您可以指定客户托管式密钥或使用 Secrets Manager 提供的原定设置 KMS 密钥。使用 MasterUserSecretKmsKeyId
参数指定客户托管式密钥。AWS KMS 密钥标识符是密钥 ARN、密钥 ID、别名 ARN 或者 KMS 密钥的别名。要使用不同 AWS 账户中的密钥,请指定密钥 ARN 或别名 ARN。在 Aurora 管理数据库集群的数据库凭证后,您无法更改用于加密密钥的 KMS 密钥。
轮换数据库集群的主用户密码密钥
当 Aurora 轮换主用户密码密钥时,Secrets Manager 会为现有密钥生成一个新的密钥版本。密钥的新版本包含新的主用户密码。Aurora 更改数据库集群的主用户密码,以匹配新密钥版本的密码。
您可以立即轮换密钥,而不必等待计划的轮换。要在 Secrets Manager 中轮换主用户密码密钥,请修改数据库集群。有关修改数据库集群的信息,请参阅 修改 Amazon Aurora 数据库集群。
您可以使用 RDS 控制台、AWS CLI 或 RDS API 立即轮换主用户密码密钥。新密码长度始终为 28 个字母,包含至少一个大写和小写字母、一个数字和一个标点符号。
要使用 RDS 控制台轮换主用户密码密钥,请修改数据库集群并在 Settings(设置)中选择 Rotate secret immediately(立即轮换密钥)。
按照使用控制台、CLI 和 API 修改数据库集群中的说明使用 RDS 控制台修改数据库集群。您必须在确认页面上选择 Apply immediately(立即应用)。
要使用 AWS CLI 轮换主用户密码密钥,请使用 modify-db-cluster 命令并指定 --rotate-master-user-password
选项。轮换主密码时必须指定 --apply-immediately
选项。
此示例轮换主用户密码密钥。
对于 Linux、macOS 或 Unix:
aws rds modify-db-cluster \ --db-cluster-identifier
mydbcluster
\ --rotate-master-user-password \ --apply-immediately
对于 Windows:
aws rds modify-db-cluster ^ --db-cluster-identifier
mydbcluster
^ --rotate-master-user-password ^ --apply-immediately
您可以使用 ModifyDBCluster 操作并将 RotateMasterUserPassword
参数设置为 true
来轮换主用户密码密钥。轮换主密码时,必须将 ApplyImmediately
参数设置为 true
。
查看有关数据库集群的密钥的详细信息
您可以使用控制台(https://console.aws.amazon.com/secretsmanager/
您可以使用 RDS 控制台、AWS CLI 或 RDS API 找到 Aurora 在 Secrets Manager 中管理的密钥的 Amazon 资源名称(ARN)。
查看有关 Aurora 在 Secrets Manager 中管理的密钥的详细信息
登录 AWS Management Console 并通过以下网址打开 Amazon RDS 控制台:https://console.aws.amazon.com/rds/
。 -
在导航窗格中,选择 Databases(数据库)。
-
选择数据库集群的名称以显示其详细信息。
-
选择配置选项卡。
在 Master Credentials ARN(主凭证 ARN)中,您可以查看密钥 ARN。
您可以单击 Manage in Secrets Manager(在 Secrets Manager 中管理)链接,以在 Secrets Manager 控制台中查看和管理密钥。
您可以使用 RDS AWS CLI describe-db-clusters 命令查找有关 Aurora 在 Secrets Manager 中管理的密钥的以下信息:
-
SecretArn
– 密钥的 ARN -
SecretStatus
– 密钥的状态可能的状态值包括:
-
creating
– 密钥正在创建中。 -
active
– 密钥可用于正常使用和轮换。 -
rotating
– 密钥正在轮换。 -
impaired
– 密钥可用于访问数据库凭证,但不能轮换。例如,如果更改权限以使 RDS 无法再访问密钥或密钥的 KMS 密钥,则密钥可能具有此状态。当密钥具有此状态时,您可以更正导致该状态的条件。如果您更正导致状态的条件,则状态会一直保持为
impaired
,直至下一次轮换。或者,您可以修改数据库集群以关闭数据库凭证的自动管理,然后再次修改数据库集群以开启数据库凭证的自动管理。要修改数据库集群,请在 modify-db-cluster 命令中使用--manage-master-user-password
选项。
-
-
KmsKeyId
– 用于加密密钥的 KMS 密钥的 ARN
指定 --db-cluster-identifier
选项可显示特定数据库集群的输出。此示例显示数据库集群使用的密钥的输出。
aws rds describe-db-clusters --db-cluster-identifier
mydbcluster
以下示例显示密钥的输出:
"MasterUserSecret": {
"SecretArn": "arn:aws:secretsmanager:eu-west-1:123456789012:secret:rds!cluster-033d7456-2c96-450d-9d48-f5de3025e51c-xmJRDx",
"SecretStatus": "active",
"KmsKeyId": "arn:aws:kms:eu-west-1:123456789012:key/0987dcba-09fe-87dc-65ba-ab0987654321"
}
当您拥有密钥 ARN 时,您可以使用 get-secret-value Secrets Manager CLI 命令查看有关该密钥的详细信息。
此示例显示先前示例输出中的密钥的详细信息。
对于 Linux、macOS 或 Unix:
aws secretsmanager get-secret-value \ --secret-id '
arn:aws:secretsmanager:eu-west-1:123456789012:secret:rds!cluster-033d7456-2c96-450d-9d48-f5de3025e51c-xmJRDx
'
对于 Windows:
aws secretsmanager get-secret-value ^ --secret-id '
arn:aws:secretsmanager:eu-west-1:123456789012:secret:rds!cluster-033d7456-2c96-450d-9d48-f5de3025e51c-xmJRDx
'
您可以使用 DescribeDBClusters RDS 操作并将 DBClusterIdentifier
参数设置为数据库集群标识符,查看 Aurora 在 Secrets Manager 中管理的密钥的 ARN、状态和 KMS 密钥。输出中包含有关密钥的详细信息。
当您拥有密钥 ARN 时,您可以使用 GetSecretValue Secrets Manager 操作查看有关该密钥的详细信息。