什么是AmazonSecrets Manager 密钥? - Amazon Secrets Manager
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

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

什么是AmazonSecrets Manager 密钥?

过去,在创建自定义应用程序以从数据库中检索信息时,您通常会嵌入凭证(密钥)以直接在应用程序中访问数据库。在需要轮换凭证时,除了创建新的凭证以外,您还必须执行一些其他操作。您必须花一些时间更新应用程序以使用新凭证。然后,您分发更新的应用程序。如果您有多个应用程序具有共享凭证,而您错过更新其中一个,则该应用程序会失败。由于存在这种风险,很多客户选择不定期轮换凭证,这实际上带来了新的风险。

Secrets Manager 允许您将代码中的硬编码凭证(包括密码)替换为对 Secrets Manager 的 API 调用,以便以编程方式检索密钥。这有助于确保密钥不会被检查代码的人员泄露,因为密钥不再位于代码中。此外,您还可以配置 Secrets Manager 以根据指定的计划自动轮换密钥。这样,您就可以将长期密钥替换为短期密钥,从而显著降低泄露风险。

Secrets Manager 入门

有关充分利用 Secrets Manager 所需了解的术语和概念的列表,请参阅。关键术语和概念AmazonSecrets Manager

Secrets Manager 的典型用户可能具有以下一个或多个角色:

  • Secrets Manager 管理员 — 管理 Secrets Manager 服务。向个人授予权限,然后这些人可以执行此处列出的其他角色。

  • 数据库或服务管理员 — 使用存储在 Secrets Manager 中的密钥管理数据库或服务。确定并配置其密钥的轮换和过期设置。

  • 应用程序开发人员 — 创建应用程序,然后将应用程序配置为从 Secrets Manager 请求适当的凭证。

基本 Secrets Manager 方案

下图阐明了最基本的场景。该图显示,您可以在 Secrets Manager 中存储数据库的凭证,然后在应用程序中使用这些凭证以访问数据库。

  1. 数据库管理员在 Personnel 数据库上创建一组凭证,以供名为 MyCustomApp 的应用程序使用。管理员还使用应用程序访问 Personnel 数据库时所需的权限来配置这些凭证。

  2. 数据库管理员将凭证作 Secrets Manager 为MyCustomAppCreds。然后,Secrets Manager 将凭证加密并将凭证存储在密钥中的受保护的机密文本

  3. 在 MyCustomApp 访问数据库时,该应用程序在密钥管理器中查询名为MyCustomAppCreds

  4. Secrets Manager 检索密钥,解密受保护密钥文本,然后通过受保护通道(具有 TLS 的 HTTPS)将密钥返回给客户端应用程序。

  5. 客户端应用程序解析响应中的凭证、连接字符串以及所需的任何其他信息,然后使用这些信息访问数据库服务器。

注意

Secrets Manager 支持多种类型的密钥。但是,Secrets Manager 可以本机轮换凭证支持Amazon数据库而不需要任何额外的编程. 不过,为其他数据库或服务轮换密钥需要创建自定义 Lambda 函数来定义 Secrets Manager 如何与数据库或服务交互。您需要具有一些编程技巧才能创建该函数。有关更多信息,请参阅 旋转您的AmazonSecrets Manager 密钥

Secrets Manager 特点

在运行时以编程方式检索加密的密钥值

Secrets Manager 通过从应用程序的源代码中删除硬编码凭证或者不以任何方式将凭证存储在应用程序中的凭证,从而帮助您提高安全性。如果在应用程序中存储凭证或与其存储在一起,检查您的应用程序或组件的任何人都可能会泄露这些凭证。由于您必须更新应用程序并将更改部署到每个客户端,然后才能弃用旧凭证,因此,该过程使凭证轮换变得非常困难。

Secrets Manager 允许您将存储的凭证替换为对 Secrets Manager Web 服务的运行时调用,因此您可以在需要时动态检索凭证。

在大多数情况下,您的客户端需要访问最新版本的加密密钥值。在查询加密的密钥值时,您可以选择仅提供密钥名称或 Amazon 资源名称 (ARN),而根本不指定任何版本信息。如果这样做,Secrets Manager 自动返回最新版本的密钥值。

不过,可能会同时存在其他版本。大多数系统支持比简单密码更复杂的密钥,例如,一套包括连接详细信息、用户 ID 和密码的完整凭证。Secrets Manager 允许您将多套此类凭证同时存储。密钥管理器将每一套凭证都存储在该密钥的一个不同版本中。在密钥轮换过程中,Secrets Manager 跟踪旧凭证以及要开始使用的新凭证,直到轮换完成时为止。它使用暂存标签 跟踪这些不同的版本。

存储不同类型的秘密

Secrets Manager 允许您将文本存储在密钥的加密密密钥数据部分的文本。这通常包括数据库或服务的连接详细信息。这些详细信息可以包括服务器名称、IP 地址和端口号,以及用于登录服务的用户名和密码。有关密钥的详细信息,请参阅最大值和最小值。受保护的文本不包含:

  • 密钥名称和描述

  • 轮换或过期设置

  • 与密钥关联的 Amazon KMS 客户主密钥 (CMK) 的 ARN

  • 任何附加的 Amazon 标签

加密您的秘密数据

Secrets Manager 加密密密密密钥的受保护文本通过使用Amazon Key Management Service(Amazon KMS)。很多Amazon服务使用Amazon KMS用于密钥存储和加密。Amazon KMS确保在静态时对您的秘密进行安全加密。Secrets Manager 将每个密钥与Amazon KMSCMK。它可以是账户用于 Secrets Manager 的默认 CMK,也可以是客户创建的 CMK。

每当密钥管理器加密受保护密钥数据的新版本,Secrets Manager 请求Amazon KMS从指定的 CMK 生成新的数据密钥。Secrets Manager 将此数据密钥用于信封加密。Secrets Manager 将加密的数据密钥与受保护的密钥数据一起存储。每当秘密需要解密时,Secrets Manager 会请求Amazon KMS来解密数据密钥,然后 Secrets Manager 使用该数据密钥来解密受保护的密钥数据。Secrets Manager 从不以未加密的形式存储数据密钥,并且总是在使用后立即处理数据密钥。

此外,默认情况下,Secrets Manager 仅接受来自使用开放标准的主机的请求。传输层安全性 (TLS)完美的向发保密钥。Secrets Manager 可确保加密您的秘密,同时在Amazon和用于检索密钥的计算机。

自动旋转您的秘密

您可以将 Secrets Manager 配置为自动轮换密钥,而无需进行用户干预和按照指定的计划进行轮换。

您可以使用 Amazon Lambda 函数定义和实施轮换。此函数定义如何 Secrets Manager 执行以下任务:

  • 创建密钥的新版本。

  • 将密钥存储在 Secrets Manager 密钥管理器

  • 将受保护服务配置为使用新版本。

  • 验证新版本。

  • 将新版本标记为生产就绪。

暂存标签可以帮助您跟踪不同版本的密钥。每个版本可以附加多个暂存标签,但每个暂存标签只能附加到一个版本。例如,Secrets Manager 将当前处于活动状态的正在使用的密钥版本标记为AWSCURRENT。您应该将应用程序配置为始终查询密钥的最新版本。在轮换过程创建密钥的新版本时,Secrets Manager 自动添加暂存标签AWSPENDING添加到新版本,直到测试和验证完成。只有这样,Secrets Manager 才会添加AWSCURRENT暂存标签到该新版本中。您的应用程序在下次查询标记有 AWSCURRENT 的版本时,会立即开始使用新密钥。

具有完全配置和随时可用轮换支持的数据库

在选择启用轮换时,Secrets Manager 支持以下 Amazon 关系数据库服务 (Amazon Relational RDS) 数据库,其中包含Amazon编写和测试的 Lambda 轮换函数模板,并且可以完全配置轮换过程:

  • Amazon RDS 上的 Amazon Aurora

  • Amazon RDS 上的 MySQL

  • Amazon RDS 上的 PostgreSQL

  • Amazon RDS 上的 Oracle

  • Amazon RDS 上的 MariaDB

  • Amazon RDS 上的 Microsoft SQL Server

具有完全配置的直接可用轮换支持的其他服务

此外,您还可以选择在以下服务(使用Amazon编写和测试的 Lambda 轮换函数模板,并且可以完全配置轮换过程:

  • Amazon DocumentDB

  • Amazon Redshift

您也可以存储几乎任何其他类型的数据库或服务的密钥。不过,要自动轮换密钥,您需要创建和配置自定义 Lambda 轮换函数。有关为数据库或服务编写自定义 Lambda 函数的更多信息,请参阅。Lambda 轮换函数概述

控制对密钥的访问

您可以将 AWS Identity and Access Management (IAM) 权限策略附加到用户、组和角色,以授予或拒绝访问特定密钥的权限以及限制对这些密钥的管理。例如,您可能将一个策略附加到其成员需要能够完全管理和配置您的密钥的组。另一个附加到应用程序所使用角色的策略可能仅授予对应用程序运行所需的一个密钥的读取权限。

或者,您也可以将基于资源的策略直接附加到密钥,以便授予权限以指定可以读取或修改密钥和版本的用户。与自动应用于用户、组或角色的基于身份的策略不同,附加到密钥的基于资源的策略使用 Principal 元素指定策略的目标。Principal 元素可以包含同一账户中的用户和角色作为密钥,或者包含其他账户中的委托人。

访问 Secrets Manager

您可以通过以下 Secrets Manager 何方式使用:

Amazon Web Services Management Console

您可以使用基于浏览器的Secrets Manager 控制台并使用控制台执行与密钥相关的任何任务。

目前,您无法在控制台中执行以下任务:

  • 在密钥中存储二进制数据。 控制台当前仅在密钥的 SecretString 字段中存储数据,而不使用 SecureBinary 字段。要存储二进制数据,您当前必须使用AmazonCLI 或其中一个Amazon开发工具包。

Amazon 命令行工具

这些区域有:Amazon命令行工具使您可以在系统命令行中发出命令,以执行 Secrets Manager 和其他Amazon任务。与使用控制台相比,此方法更快、更方便。如果要构建执行Amazon任务。

Amazon提供两组命令行工具:Amazon命令行界面(AmazonCLI)和Amazon适用于 Windows PowerShell 的 工具。有关安装和使用AmazonCLI,请参阅Amazon命令行界面用户指南。有关安装和使用适用于 Windows 的工具的更多信息,请参阅Amazon适用于 Windows PowerShell 的工具用户指南

Amazon 软件开发工具包

这些区域有:Amazon开发工具包包含各种编程语言和平台的库和示例代码,例如,JavaPythonRuby.NETiOS 和 Android, 和others。开发工具包包括多个任务,例如以加密方式对请求进行签名、管理错误以及自动重试请求。有关 Amazon 开发工具包的更多信息(包括如何下载和安装这些工具包),请参阅适用于 Amazon Web Services 的工具

Secrets Manager HTTPS 查询 API

Secrets Manager HTTPS 查询 API 使您能够以编程方式访问 Secrets Manager 和 AWS。HTTPS 查询 API 允许您直接向服务发出 HTTPS 请求。使用 HTTPS API 时,必须添加代码,才能使用您的凭证对请求进行数字化签名。有关更多信息,请参阅 。通过提出 HTTP 查询请求来调用 APIAmazonSecrets Manager API 参考

注意

我们建议使用所需的编程语言特定的开发工具包,而不是使用 HTTPS 查询 API。开发工具包执行很多您手动执行的有用任务。开发工具包自动对请求进行签名,并将响应转换为在语法上适合您的语言的结构。只有在软件开发工具包不可用时,才应使用 HTTPS 查询 API。

Secrets Manager 定价

在使用 Secrets Manager 时,仅按实际使用量收费,无最低费用或设置费用。有关当前完整定价列表,请参阅AmazonSecrets Manager 定价

Amazon KMS— 自定义加密密密密钥

如果您使用 Amazon KMS 对密钥进行加密以创建自己的客户主密钥,Amazon 将按当前 Amazon KMS 费率对您收费。不过,您可以使用由AmazonSecrets Manager 为您的帐户是免费的。有关客户创建的 Amazon KMS 密钥的费用的更多信息,请参阅 Amazon Key Management Service 定价

Amazon CloudTrail日志记录 — 存储和通知

如果您启用Amazon CloudTrail在您的账户上,您可以获取 API 调用的日志AmazonSecrets Manager 发出。Secrets Manager 将所有事件记录为管理事件。没有数据事件。捕获 Amazon CloudTrail 中的单个跟踪以捕获管理事件时,无需额外费用。Amazon CloudTrail 免费存储所有管理事件的第一个副本。不过,用于日志存储的 Amazon S3 和启用通知后的 Amazon SNS 会产生费用。此外,如果您设置了其他跟踪,管理事件的其他副本可能会产生费用。有关更多信息,请参阅 Amazon CloudTrail 定价页。