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

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

Amazon Secrets Manager 旋转函数模板

若要使用模板,请参阅:

这些模板支持 Python 3.9。

要编写自己的旋转函数,请参阅编写旋转函数

Amazon RDS 和 Amazon Aurora

Amazon RDS Db2 单用户

Amazon RDS Db2 交替用户

Amazon RDS MariaDB 单用户

Amazon RDS MariaDB 交替用户

Amazon RDS 和 Amazon Aurora MySQL 单用户

Amazon RDS 和 Amazon Aurora MySQL 交替用户

Amazon RDS Oracle 单用户

Amazon RDS Oracle 交替用户

Amazon RDS 和 Amazon Aurora PostgreSQL 单用户

Amazon RDS 和 Amazon Aurora PostgreSQL 交替用户

Amazon RDS Microsoft SQLServer 单用户

Amazon RDS Microsoft SQLServer 交替用户

Amazon DocumentDB(与 MongoDB 兼容)

Amazon DocumentDB 单个用户

Amazon DocumentDB 交替用户

Amazon Redshift

Amazon Redshift 单用户

Amazon Redshift 交替用户

Amazon ElastiCache

要使用此模板,请参阅 Amazon 用户指南中的自动轮换 ElastiCache 用户密码

其他密钥类型

Secrets Manager 提供此模板作为您为任何类型密钥创建轮换函数的起点。

编写函数时,请谨慎包括调试或日志记录语句。这些语句可能会导致您的函数中的信息被写入 Amazon CloudWatch,因此您需要确保日志中不包含开发过程中收集的任何敏感信息。

出于安全考虑,Secrets Manager 仅允许 Lambda 轮换函数直接轮换密钥。轮换函数无法调用第二个 Lambda 函数来轮换密钥。

有关日志语句的示例,请参阅 Amazon Secrets Manager 旋转函数模板 源代码。

例如,如果您使用外部二进制文件和库来连接资源,则需要管理修补和保留它们。 up-to-date

有关调试建议,请参阅测试和调试无服务器应用程序

轮换密钥包含四个步骤,分别对应 Lambda 轮换函数的以下四种方法。

create_secret

create_secret 中,请首先通过传入的 ClientRequestToken 调用 get_secret_value 来检查是否存在密钥。如果没有密钥,请使用 create_secret 创建一个新密钥,并将令牌作为 VersionId。然后您可以使用 get_random_password 生成新的密钥值。您必须确保新的密钥值仅包含对数据库或服务有效的字符。使用 ExcludeCharacters 参数排除字符。调用 put_secret_value 以将其与暂存标签 AWSPENDING 一起存储。将新的密钥值存储在 AWSPENDING 中有助于确保幂等性。如果由于任何原因轮换失败,您可以在后续调用中引用该密钥值。请参阅如何使我的 Lambda 函数具有幂等性

在测试函数时,使用查看版本阶段:调用describe-secret并查看VersionIdsToStages。 Amazon CLI

set_secret

set_secret 中,更改数据库或服务中的凭证,以匹配密钥 AWSPENDING 版本中的新密钥值。

如果将语句传递给数据库等语句解读服务,请使用查询参数化。有关更多信息,请参阅 OWASP 网站上的查询参数化备忘单

轮换函数作为特权代理,有权访问和修改 Secrets Manager 密钥和目标资源中的客户凭证。为防范潜在的混淆代理攻击,您需要确保攻击者无法使用该函数访问其他资源。在更新凭证之前:

  • 检查密钥 AWSCURRENT 版本中的凭证是否有效。如果 AWSCURRENT 凭证无效,请放弃轮换尝试。

  • 检查 AWSCURRENTAWSPENDING 密钥值是否适用于同一资源。对于用户名和密码,检查 AWSCURRENTAWSPENDING 用户名是否相同。

  • 检查目标服务资源是否相同。对于数据库,检查 AWSCURRENTAWSPENDING 主机名是否相同。

test_secret

test_secret 中,通过使用密钥的 AWSPENDING 版本访问数据库或服务,以对其进行测试。

finish_secret

finish_secret 中,使用 update_secret_version_stage 将暂存标签 AWSCURRENT 从早期密钥版本移动到新的密钥版本。Secrets Manager 会将 AWSPREVIOUS 暂存标签自动添加到早期版本,以便您保留上次已知良好的密钥版本。