亚马逊AWS官方博客

AWS Secrets Manager:安全地存储、分发和轮换凭证

今天我们发布了 AWS Secrets Manager,它让您能够通过 API 或 AWS 命令行界面 (CLI) 轻松地存储和检索自己的密钥,并通过内置或定制 AWS Lambda 函数轮换自己的凭证。当您在本地使用单一机器和单一应用程序时,可以轻松地管理应用程序密钥,例如数据库凭证、密码或 API 密钥。随着您的发展,当规模扩大到拥有多种分布式微服务时,安全地存储、分发、轮换和占用密钥将成为一项艰巨的任务。以前,客户需要单独为密钥管理功能配备和维护额外的基础设施,这可能会产生成本并使系统不必要地复杂化。

AWS Secrets Manager

想像一下,我的应用程序接收 Twitter 发出的推文,并将其存储在 Amazon Aurora 数据库中。以前,我必须向数据库管理员请求用户名和密码,并将这些凭证嵌入到环境变量中,在竞争性生产环境中甚至需要将其嵌入到应用程序本身。我还需要让我们的社交媒体管理员创建 Twitter API 凭证并设计存储这些凭证的方法。这是一个完全手工的流程,涉及多人,每次我想要轮换这些凭证时都需要重新开始。借助 Secrets Manager,我的数据库管理员可在 Secrets Manager 中提供一次凭证,随后依赖 Secrets Manager 提供的 lambda 函数自动更新并轮换这些凭证。我的社交媒体管理员可将 Twitter API 密钥输入 Secrets Manager,随后我可以通过简单的 API 调用访问它们,我甚至还可以通过调用到 Twitter API 的定制 lambda 函数以编程方式轮换这些凭证。我的密钥通过我在账户中选择的 KMS 密钥进行加密,每位管理员都可以通过针对单个角色或用户的精细 IAM 策略明确地授予访问这些密钥的权限。

让我们来了解我如何使用 AWS Secrets Manager 控制台存储密钥。首先,我将单击“存储新密钥”进入新密钥向导。对于我的 RDS Aurora 实例,直接选择实例并提供初始用户名和密码即可连接到数据库。

接下来,我将填充快速描述以及用于访问我的密钥的名称。在此您可以使用自己希望的任何命名方案。

接下来,我们将配置轮换以使用 Secrets Manager 提供的 lambda 函数每 10 天轮换一次密码。

最后,我们将审核所有详细信息,并查验我们用于存储和检索密钥的示例代码。

最后,我可以在控制台中审核密钥。

现在,如果我需要访问这些密钥,只需调用 API 即可。

import json
import boto3
secrets = boto3.client("secretsmanager")
rds = json(sm.get_secrets_value("prod/TwitterApp/Database")['SecretString'])
print(rds)

它将给我提供下列值:


{'engine': 'mysql',
 'host': 'twitterapp2.abcdefg.us-east-1.rds.amazonaws.com',
 'password': '-)Kw>THISISAFAKEPASSWORD:lg{&sad+Canr',
 'port': 3306,
 'username': 'ranman'}

不只是密码

AWS Secrets Manager 适用的对象不仅仅是密码。我可以存储 OAuth 凭证、二进制数据以及更多。让我们来了解如何存储我的 Twitter OAuth 应用程序密钥。

现在,我可以定义使用定制 AWS Lambda 函数轮换这些第三方 OAuth 凭证的功能,只要我们需要就可以可调用到 Twitter 轮换这些凭证。

定制轮换

AWS Secrets Manager 最出色的功能之一是用于凭证轮换的定制 AWS Lambda 函数。这允许您为凭证定义完全定制的工作流程。Secrets Manager 将可调用您的 lambda 函数,负载包括 Step ,指定您在轮换的哪一步; SecretId ,指定轮换用于哪种密钥;最重要的是 ClientRequestToken ,用于确保潜在密钥发生任何变化时的幂等性。

当您轮换密钥时,需要经过几个不同的步骤:

  1. createSecret
  2. setSecret
  3. testSecret
  4. finishSecret

这些步骤的优点是您可以为轮换的每个阶段添加自己需要的任何批准步骤。如需关于定制轮换的更多详细信息,请查阅相关文档。

现已推出
AWS Secrets Manager 如今已在美国东部(弗吉尼亚北部)、美国东部(俄亥俄)、美国西部(加利福尼亚北部)、美国西部(俄勒冈)、亚太地区(孟买)、亚太地区(首尔)、亚太地区(新加坡)、亚太地区(悉尼)、亚太地区(东京)、加拿大(中部)、欧洲(法兰克福)、欧洲(爱尔兰)、欧洲(伦敦)和南美洲(圣保罗)推出。Secrets 定价为每月每个密钥 0.40 美元,每 10,000 次 API 调用 0.05 美元。我期待看到更多用户采用轮换凭证确保应用程序安全!

Randall