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

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

Amazon Secrets Manager 概念

以下概念对了解 Secrets Manager 的工作原理来说很重要。

密钥

在 Secrets Manager 中,密钥由密钥信息、密钥值和密钥元数据组成。密钥值可以是字符串或二进制值。为了将多个字符串值存储在一个密钥中,我们建议您使用带有键/值对的 JSON 文本字符串,例如:

{ "host" : "ProdServer-01.databases.example.com", "port" : "8888", "username" : "administrator", "password" : "EXAMPLE-PASSWORD", "dbname" : "MyDatabase", "engine" : "mysql" }

密钥元数据包括:

  • 具有以下格式的 Amazon Resource Name (ARN)。

    arn:aws:secretsmanager:<Region>:<AccountId>:secret:SecretName-6RandomCharacters

    Secrets Manager 会在密钥名称末尾添加六个随机字符,以帮助确保密钥 ARN 的唯一性。如果删除了原始密钥,然后使用相同的名称创建了新密钥,则由于这些字符的原因,这两个密钥具有不同的 ARN。由于 ARN 不同,有权访问旧密钥的用户不会自动获得新密钥的访问权限。

  • 密钥的名称、说明、资源策略和标签。

  • 加密密钥的 ARN,一个 Secrets Manager 用来加密和解密密钥值的 Amazon KMS key。Secrets Manager 始终以加密形式存储密钥文本,并在传输过程中加密密钥。请参阅中的秘密加密和解密 Amazon Secrets Manager

  • 如果设置了轮转,有关如何轮转密钥的信息。请参阅轮换

Secrets Manager 使用 IAM 权限策略来确保只有授权用户可以访问或修改密钥。请参阅Amazon Secrets Manager 的身份验证和访问控制

密钥有包含加密密钥值副本的版本。更改密钥值或轮换密钥时,Secrets Manager 会创建一个新版本。请参阅Version

您可以通过复制在多个 Amazon Web Services 区域 上使用一个密钥。复制密钥时,您可以创建原始或主密钥称为副本密钥。副本密钥保持链接到主密钥上。请参阅将 Amazon Secrets Manager 密钥复制到其他 Amazon Web Services 区域

请参阅 用 Amazon Secrets Manager 创建和管理密钥

Version

密钥有包含加密密钥值副本的版本。更改密钥值或轮换密钥时,Secrets Manager 会创建一个新版本。

Secrets Manager 不会存储带有版本的线性密钥历史记录。而是通过标签来跟踪这三个特定版本:

  • 当前版本 – AWSCURRENT

  • 先前版本 – AWSPREVIOUS

  • 待处理版本(轮换期间)– AWSPENDING

密钥始终有一个标记为 AWSCURRENT 的版本,Secrets Manager 会在您检索密钥值时默认返回该版本。

您还可以通过在 Amazon CLI 中调用 update-secret-version-stage 来使用自定义标签标记版本。您最多可以为一个密钥附加 20 个版本标签。密钥的两个版本不能具有相同的暂存标注。版本可以有多个标签。

Secrets Manager 从不移除带标签的版本,但未标记的版本将被视为已弃用。如果版本超过 100 个,Secrets Manager 会移除已弃用的版本。Secrets Manager 不会移除 24 小时前创建的版本。

下图演示了拥有 Amazon 标记版本和客户标记版本的密钥。无标签的版本将被视为已弃用,Secrets Manager 将在某个未来的时间将其移除。

轮换

轮换是指您定期升级密钥以使攻击者更难访问凭据的过程。在 Secrets Manager 中,您可以为密钥设置自动轮换。当 Secrets Manager 轮换密钥时,会同时更新密钥和数据库或服务中的凭据。请参阅轮换 Amazon Secrets Manager 密钥

提示

对于某些 由其他服务管理的密钥,可使用托管轮换。要使用 托管轮换,请首先通过管理服务来创建密钥。

轮换策略

Secrets Manager 提供了两种轮换策略:

轮换策略:单用户

此策略在一个密钥中更新一个用户的凭证。对于 Amazon RDS Db2 实例,由于用户无法更改自己的密码,因此您必须在单独的秘密中提供管理员凭证。这是最简单的轮换策略,适用于大多数使用场景。具体而言,建议您为一次性(临时)用户或交互式用户的凭证使用此策略。

轮换密钥时,不会删除打开的数据库连接。在进行轮换时,在数据库中的密码更改后一小段时间,相应的密码才会更新。在此期间,数据库有较低的风险拒绝使用轮换凭证的调用。您可以使用适当的重试策略来降低风险。轮换后,新连接将使用新凭证。

轮换策略:交替用户

此策略在一个密钥中更新两个用户的凭证。您创建第一个用户,然后在第一次轮换期间,轮换函数将进行克隆以创建第二个用户。每次轮换密钥时,轮换函数都会交替更新其更新的用户密码。由于大多数用户无权克隆自己,因此您必须在另一个密钥中为 superuser 提供凭证。如果数据库中的克隆用户与原始用户具有的权限不同,或者涉及一次性(临时)用户或交互式用户的凭证,我们建议使用单用户轮换策略。

此策略适用于具有权限模型的数据库,其中一个角色拥有数据库表,而另一个角色具有访问数据库表的权限。其也适用于需要高可用性的应用程序。如果应用程序在轮换期间检索密钥,则该应用程序仍会获得一组有效的凭证。轮换后,useruser_clone 凭证均有效。在这种类型的轮换期间,应用程序获得拒绝的可能性甚至比单用户轮换获得拒绝的可能性更小。如果数据库托管在服务器场中,密码更改需要时间传播到所有服务器,则存在数据库拒绝使用新凭证的调用的风险。您可以使用适当的重试策略来降低风险。

Secrets Manager 将创建权限与原始用户相同的克隆用户。如果您在创建克隆用户后更改了原始用户的权限,则还必须更改克隆用户的权限。

例如,假设您使用某个数据库用户的凭证创建了一个密钥,则该密钥包含一个带有这些凭证的版本。

第一次轮换 – 轮换函数使用生成的密码创建克隆用户,这些凭证将成为当前的密钥版本。

第二次轮换 – 轮换函数更新原始用户的密码。

第三次轮换 – 轮换函数更新克隆用户的密码。