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

使用 Amazon Secrets Manager 管理 Amazon Redshift 管理员密码

Amazon Redshift 可以与 Amazon Secrets Manager 集成,以便使用加密密钥来生成和管理您的管理员凭证。使用 Amazon Secrets Manager,您可以将管理员密码替换为 API 调用,以便在需要时以编程方式检索密钥。使用密钥而不是硬编码凭证可以降低这些凭证被公开或泄漏的风险。有关 Amazon Secrets Manager 的更多信息,请参阅 Amazon Secrets Manager 用户指南

在执行以下操作之一时,您可以使用 Amazon Secrets Manager 来指定由 Amazon Redshift 管理您的管理员密码:

  • 创建预置集群或无服务器命名空间

  • 从快照还原集群或无服务器命名空间

当您在 Amazon Secrets Manager 中指定由 Amazon Redshift 来管理管理员密码时,Amazon Redshift 会生成密码并将其存储在 Secrets Manager 中。您可以直接在 Amazon Secrets Manager 中访问密钥以检索管理员用户的凭证。(可选)如果您需要从其他 Amazon 账户访问密钥,您可以指定客户管理的密钥来加密密钥。您也可以使用 Amazon Secrets Manager 提供的 KMS 密钥。

Amazon Redshift 管理密钥的设置,默认情况下每 30 天轮换一次密钥。您可以随时手动轮换密钥。如果您删除管理 Amazon Secrets Manager 中密钥的预置集群或无服务器命名空间,则该密钥及其关联的元数据也会被删除。

要使用密钥管理的凭证连接到集群或无服务器命名空间,您可以使用 Secrets Manager 控制台或 GetSecretValue Secrets Manager API 调用,从 Amazon Secrets Manager 检索密钥。有关更多信息,请参阅《Amazon Secrets Manager 用户指南》中的从 Amazon Secrets Manager 中检索密钥使用 Amazon Secrets Manager 密钥中的凭证连接到 SQL 数据库

Amazon Secrets Manager 集成所需的权限

用户必须拥有所需的权限才能执行与 Amazon Secrets Manager 集成相关的操作。创建 IAM 策略,以便授予权限对所需的指定资源执行特定的 API 操作。然后,将这些策略附加到需要这些权限的 IAM 权限集或角色。有关更多信息,请参阅 Amazon Redshift 中的 Identity and Access Management

指定 Amazon Redshift 管理 Amazon Secrets Manager 中管理员密码的用户必须具有执行以下操作的权限:

  • secretsmanager:CreateSecret

  • secretsmanager:RotateSecret

  • secretsmanager:DescribeSecret

  • secretsmanager:UpdateSecret

  • secretsmanager:DeleteSecret

  • secretsmanager:GetRandomPassword

  • secretsmanager:TagResource

如果用户想要为预置集群在 MasterPasswordSecretKmsKeyId 参数中传递 KMS 密钥,或者想要为无服务器命名空间在 AdminPasswordSecretKmsKeyId 参数中传递 KMS 密钥,则在上面列出的权限之外,他们还需要以下权限。

  • kms:Decrypt

  • kms:GenerateDataKey

  • kms:CreateGrant

  • kms:RetireGrant

轮换管理员密码密钥

默认情况下,Amazon Redshift 每 30 天自动轮换一次密钥,以确保您的凭证不会长时间保持不变。当 Amazon Redshift 轮换管理员密码密钥时,Amazon Secrets Manager 会更新现有密钥以包含新的管理员密码。Amazon Redshift 更改集群的管理员密码,使其与更新后的密钥中的密码相匹配。

您可以立即轮换密钥,而不必等待使用 Amazon Secrets Manager 的计划轮换。有关轮换密钥的更多信息,请参阅《Amazon Secrets Manager 用户指南》中的轮换 Amazon Secrets Manager 密钥

在 Amazon Redshift 中检索密钥的 Amazon 资源名称(ARN)

您可以使用 Amazon Redshift 控制台,查看由 Amazon Secrets Manager 管理的所有密钥的 Amazon 资源名称(ARN)。在拥有密钥的 ARN 时,您可以使用 Amazon Secrets Manager 查看有关密钥的详细信息以及密钥中的加密数据。有关使用 ARN 检索密钥更多信息,请参阅《Amazon Secrets Manager 用户指南》中的检索密钥

查看有关 Amazon Redshift 预置集群的密钥的详细信息

使用 Amazon Redshift 控制台查看集群的密钥的 Amazon 资源名称(ARN),步骤如下:

  1. 登录 Amazon Web Services Management Console 并打开 Amazon Redshift 控制台。

  2. 集群概览窗格中,选择要查看其密钥的集群。

  3. 选择属性选项卡。

  4. 查看管理员凭证 ARN 下密钥的 ARN。此 ARN 是密钥的标识符,您可以在 Amazon Secrets Manager 中用它来查看密钥的详细信息。

查看有关 Amazon Redshift Serverless 命名空间的密钥的详细信息

使用 Amazon Redshift 控制台查看无服务器命名空间的密钥的 Amazon 资源名称(ARN),步骤如下:

  1. 登录 Amazon Web Services Management Console 并打开 Amazon Redshift 控制台。

  2. 预置集群控制面板中,选择页面右上角的转到无服务器

  3. 无服务器控制面板中,滚动到命名空间/工作组窗格,然后选择要查看其密钥的命名空间。

  4. 一般信息窗格中,在管理员凭证 ARN 下查看密钥的 ARN。此 ARN 是密钥的标识符,您可以在 Amazon Secrets Manager 中用它来查看密钥的详细信息。

为数据库连接凭证创建密钥

您可以创建 Secrets Manager 密钥来存储用于连接到 Amazon Redshift 预置集群或 Redshift Serverless 命名空间和工作组的凭证。在 Amazon Redshift 查询编辑器 v2 中计划查询时,也可以使用该密钥。

使用 Secrets Manager 控制台为 Amazon Redshift 预调配集群中的数据库创建密钥
  1. 打开 Secrets Manager 控制台(https://console.aws.amazon.com/secretsmanager/)。

  2. 导航到密钥列表,然后选择存储新密钥

  3. 选择 Amazon Redshift 数据仓库的凭证。在创建密钥的步骤中输入您的信息,如下所示:

    • 用户名凭证中,输入数据仓库管理用户的名称。

    • 密码凭证中,输入用户名的密码。

    • 对于加密密钥,请选择您的加密密钥。

    • 对于数据仓库,请选择包含您的数据的 Amazon Redshift 预调配集群。

    • 对于密钥名称,输入密钥的名称。

    • 对于描述,请输入密钥的描述。

    • 对于标签,输入带有字词 Redshift标签键。当您尝试使用 Amazon Redshift 查询编辑器 v2 连接到数据仓库时,需要使用此标签键来列出密钥。

  4. 继续通过多个步骤输入有关密钥的信息,直到您在审核步骤中存储您所做的更改。

    您的凭证、引擎、主机、端口和集群标识符的特定值存储在密钥中。此外,该密钥还使用标签键 Redshift 进行标记。

使用 Redshift Serverless 控制台为 Redshift Serverless 命名空间中的数据库创建密钥
  1. 登录 Amazon Web Services Management Console,然后通过以下网址打开 Amazon Redshift 控制台:https://console.aws.amazon.com/redshiftv2/

  2. 选择 Redshift Serverless 并导航到命名空间配置

  3. 选择要为其创建密钥凭证的命名空间。

  4. 打开操作编辑管理员凭证

  5. 对于管理员密码,请选择在 Amazon Secrets Manager 中管理管理员凭证

  6. 选择保存更改以保存您的更改。

确认出现一条消息,说明已成功更改密码。您也可以在 Secrets Manager 控制台中查看密钥。您可以使用该密钥,在 Redshift Serverless 控制台和 Amazon Redshift 查询编辑器 v2 中通过 Amazon Secrets Manager 连接方法连接到工作组中的数据库。该密钥的标签键必须以字符串“Redshift”开头,才能在查询编辑器 v2 Web 应用程序中列出该密钥。

使用 Secrets Manager 控制台为 Redshift Serverless 命名空间中的数据库创建密钥
  1. 打开 Secrets Manager 控制台(https://console.aws.amazon.com/secretsmanager/)。

  2. 导航到密钥列表,然后选择存储新密钥

  3. 选择 Amazon Redshift 数据仓库的凭证。在创建密钥的步骤中输入您的信息,如下所示:

    • 用户名凭证中,输入数据仓库管理用户的名称。

    • 密码凭证中,输入用户名的密码。

    • 对于加密密钥,请选择您的加密密钥。

    • 对于数据仓库,请选择包含您的数据的 Redshift Serverless 命名空间。

    • 对于密钥名称,输入密钥的名称。

    • 对于描述,请输入密钥的描述。

    • 对于标签,输入带有字词 Redshift标签键。当您尝试使用 Amazon Redshift 查询编辑器 v2 连接到数据仓库时,需要使用此标签键来列出密钥。

  4. 继续通过多个步骤输入有关密钥的信息,直到您在审核步骤中存储您所做的更改。

    您的凭证、数据库名称、主机、端口、命名空间和引擎的特定值存储在密钥中。此外,该密钥还使用标签键 Redshift 进行标记。

使用 Amazon CLI 为 Redshift Serverless 命名空间中的数据库创建密钥

您可以使用 Amazon CLI 创建密钥。一种方法是使用 Amazon CloudShell 来运行 Secrets Manager Amazon CLI 命令,如下所示。您必须具有适当的权限才能运行 Amazon CLI 命令,如以下过程所示。

  1. 在 Amazon 控制台上,打开 Amazon CloudShell 命令提示符。有关 Amazon CloudShell 的更多信息,请参阅《Amazon CloudShell User Guide》中的What is Amazon CloudShell

  2. 例如,对于密钥 MyTestSecret,输入一条 Secrets Manager 命令,来存储用于连接数据库或计划 Amazon Redshift 查询编辑器 v2 查询的密钥。将命令中的以下值替换为环境的值:

    • admin 是数据仓库的管理员用户名。

    • passw0rd 是管理员的密码。

    • dev 是数据仓库中的初始数据库名称。

    • region 是包含数据仓库的 Amazon Web Services 区域。例如 us-east-1

    • 123456789012 为 Amazon Web Services 账户。

    • namespace-id 是类似于 c3928f0e-c889-4d2b-97a5-5738324d5d3e 的命名空间标识符。您可以在 Amazon Redshift 控制台中的无服务器命名空间详细信息页面上找到该标识符。

    aws secretsmanager create-secret \ --name MyTestSecret \ --description "My test secret created with the CLI." \ --secret-string "{\"username\":\"admin\",\"password\":\"passw0rd\",\"dbname\":\"dev\",\"engine\":\"redshift\"}" \ --tags "[{\"Key\":\"redshift-serverless:namespaceArn\",\"Value\":\"arn:aws:redshift-serverless:region:123456789012:namespace/namespace-id\"}]"

将 Amazon Secrets Manager 与 Amazon Redshift 配合使用时的注意事项

使用 Amazon Secrets Manager 管理您的预置集群或无服务器命名空间的管理员凭证时,请注意以下几点:

  • 当您暂停某个集群而集群的管理员凭证由 Amazon Secrets Manager 管理时,您集群的密钥不会被删除,并且系统将继续向您收取该密钥的费用。只有在您删除集群时才会删除密钥。

  • 如果您的集群在 Amazon Redshift 尝试轮换其上附加的密钥时处于暂停状态,则轮换将失败。在这种情况下,Amazon Redshift 会停止自动轮换,即使在您恢复集群后也不会尝试再次轮换。您必须使用 secretsmanager:RotateSecret API 调用重新启动自动轮换计划,才能让 Amazon Secrets Manager 继续自动轮换您的密钥。

  • 如果在 Amazon Redshift 尝试轮换其上附加的密钥时,您的无服务器命名空间没有关联工作组,则轮换将失败并且不会尝试再次轮换,即使您关联了工作组也是如此。您必须使用 secretsmanager:RotateSecret API 调用重新启动自动轮换计划,才能让 Amazon Secrets Manager 继续自动轮换您的密钥。