使用 Amazon Aurora 和 Amazon Secrets Manager 管理密码 - Amazon Aurora
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

使用 Amazon Aurora 和 Amazon Secrets Manager 管理密码

Amazon Aurora 集成了 Secrets Manager,以管理您的数据库集群的主用户密码。

区域和版本可用性

功能可用性和支持因每个数据库引擎的特定版本以及 Amazon Web Services 区域而异。有关 Secrets Manager 与 Amazon Aurora 集成的版本和区域可用性的更多信息,请参阅 Secrets Manager 集成

Secrets Manager 与 Amazon Aurora 集成的限制

以下功能不支持使用 Secrets Manager 管理主用户密码:

  • Amazon RDS 蓝绿部署

  • 属于 Aurora Global Database 的数据库集群

  • Aurora Serverless v1 数据库集群

  • Aurora MySQL 跨区域只读副本

  • 使用 Secrets Manager 管理只读副本的主用户密码

使用 Amazon Secrets Manager 管理主用户密码的概述

借助 Amazon Secrets Manager,您可以将代码中的硬编码凭证(包括数据库密码)替换为对 Secrets Manager 的 API 调用,从而以编程方式检索密钥。有关 Secrets Manager 的更多信息,请参阅《Amazon Secrets Manager 用户指南》https://docs.amazonaws.cn/secretsmanager/latest/userguide/。有关定价信息,请参阅 Amazon 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 检索密钥。有关更多信息,请参阅《Amazon Secrets Manager 用户指南》中的从 Amazon Secrets Manager 中检索密钥使用 Amazon Secrets Manager 密钥中的凭证连接到 SQL 数据库

使用 Secrets Manager 管理主用户密码的优势

使用 Secrets Manager 管理 Aurora 主用户密码具有以下优势:

  • Aurora 会自动生成数据库凭证。

  • Aurora 会自动在 Amazon Secrets Manager 中存储和管理数据库凭证。

  • Aurora 定期轮换数据库凭证,而无需更改应用程序。

  • Secrets Manager 保护数据库凭证免受人员访问和纯文本视图的影响。

  • Secrets Manager 允许在密钥中检索数据库凭证以进行数据库连接。

  • Secrets Manager 允许使用 IAM 细粒度控制对密钥中的数据库凭证的访问权限。

  • 您可以选择使用不同的 KMS 密钥将数据库加密与凭证加密分开。

  • 您可以省去手动管理和轮换数据库凭证。

  • 您可以使用 Amazon CloudTrail 和 Amazon CloudWatch 轻松监控数据库凭证。

有关 Secrets Manager 的优势的更多信息,请参阅《Amazon Secrets Manager 用户指南》https://docs.amazonaws.cn/secretsmanager/latest/userguide/

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 在 Amazon Secrets Manager 中管理主用户密码

您可以使用 IAM 条件密钥强制 Aurora 在 Amazon 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 } } } ] }
注意

此策略在创建时在 Amazon Secrets Manager 中强制执行密码管理。但是,您仍然可以禁用 Secrets Manager 集成,并通过修改集群手动设置主密码。

为防止这种情况,请在策略的 Action(操作)块中包括 rds:ModifyDBInstancerds:ModifyDBCluster。请注意,这可以防止用户对未启用 Secrets Manager 集成的现有集群进行任何进一步修改。

有关在 IAM policy 中使用条件密钥的更多信息,请参阅 Aurora 的策略条件键示例策略:使用条件键

使用 Secrets Manager 管理数据库集群的主用户密码

执行以下操作时,可以配置 Aurora 在 Secrets Manager 中管理主用户密码:

您可以使用 RDS 控制台、Amazon CLI 或 RDS API 来执行这些操作。

按照说明使用 RDS 控制台创建或修改数据库集群:

当您使用 RDS 控制台执行其中一项操作时,可以在 Secrets Manager 中指定主用户密码由 Aurora 管理。要在创建或还原数据库集群时执行此操作,请在凭证设置中选择在 Amazon Secrets Manager 中管理主凭证。修改数据库集群时,请在设置中选择在 Amazon Secrets Manager 中管理主凭证

下图是在创建或还原数据库集群时在 Amazon Secrets Manager 中管理主凭证的示例。


						在 Amazon Secrets Manager 中管理主凭证

当您选择此选项时,Aurora 会生成主用户密码并在其整个生命周期中在 Secrets Manager 中对其进行管理。


						在所选的 Amazon 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 选项指定客户托管式密钥。Amazon KMS 密钥标识符是密钥 ARN、密钥 ID、别名 ARN 或者 KMS 密钥的别名。要使用不同 Amazon Web Services 账户中的密钥,请指定密钥 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 \ --engine aurora-mysql \ --engine-version 8.0 \ --db-instance-class db.r5.large \ --manage-master-user-password

对于 Windows:

aws rds create-db-cluster ^ --db-cluster-identifier sample-cluster ^ --engine aurora-mysql ^ --engine-version 8.0 ^ --db-instance-class db.r5.large ^ --manage-master-user-password

要指定 Aurora 在 Secrets Manager 中管理主用户密码,请在以下操作之一中将 ManageMasterUserPassword 参数设置为 true

当您在其中一个操作中将 ManageMasterUserPassword 参数设置为 true 时,Aurora 会生成主用户密码并在其整个生命周期中在 Secrets Manager 中对其进行管理。

要加密密钥,您可以指定客户托管式密钥或使用 Secrets Manager 提供的原定设置 KMS 密钥。使用 MasterUserSecretKmsKeyId 参数指定客户托管式密钥。Amazon KMS 密钥标识符是密钥 ARN、密钥 ID、别名 ARN 或者 KMS 密钥的别名。要使用不同 Amazon Web Services 账户中的密钥,请指定密钥 ARN 或别名 ARN。在 Aurora 管理数据库集群的数据库凭证后,您无法更改用于加密密钥的 KMS 密钥。

轮换数据库集群的主用户密码密钥

Aurora 轮换主用户密码密钥时,Secrets Manager 会为现有密钥生成一个新的密钥版本。密钥的新版本包含新的主用户密码。Amazon Aurora 更改数据库集群的主用户密码,以匹配新密钥版本的密码。

您可以立即轮换密钥,而不必等待计划的轮换。要在 Secrets Manager 中轮换主用户密码密钥,请修改数据库集群。有关修改数据库集群的信息,请参阅 修改 Amazon Aurora 数据库集群

您可以使用 RDS 控制台、Amazon CLI 或 RDS API 立即轮换主用户密码密钥。

要使用 RDS 控制台轮换主用户密码密钥,请修改数据库集群并在 Settings(设置)中选择 Rotate secret immediately(立即轮换密钥)。


						立即轮换主用户密码密钥

按照使用控制台、CLI 和 API 修改数据库集群中的说明使用 RDS 控制台修改数据库集群。您必须在确认页面上选择 Apply immediately(立即应用)。

要使用 Amazon 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/)或 Amazon CLI(get-secret-value Secrets Manager 命令)检索您的密钥。

您可以使用 RDS 控制台、Amazon CLI 或 RDS API 找到 Aurora 在 Secrets Manager 中管理的密钥的 Amazon 资源名称(ARN)。

查看有关 Aurora 在 Secrets Manager 中管理的密钥的详细信息
  1. 登录 Amazon Web Services Management Console 并通过以下网址打开 Amazon RDS 控制台:https://console.aws.amazon.com/rds/

  2. 在导航窗格中,选择 Databases (数据库)

  3. 选择数据库集群的名称以显示其详细信息。

  4. 选择 Configuration 选项卡。

    Master Credentials ARN(主凭证 ARN)中,您可以查看密钥 ARN。

    
								查看有关 Aurora 在 Secrets Manager 中管理的密钥的详细信息

    您可以单击 Manage in Secrets Manager(在 Secrets Manager 中管理)链接,以在 Secrets Manager 控制台中查看和管理密钥。

您可以使用 RDS Amazon 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 操作查看有关该密钥的详细信息。