【问题标题】:What is the best way to securely provide AWS RDS credentials to AWS Lambda functions?向 AWS Lambda 函数安全地提供 AWS RDS 凭证的最佳方式是什么?
【发布时间】:2020-10-16 11:42:51
【问题描述】:

我正在使用 AWS 代码管道创建一个 CI/CD 管道来部署多个 lambda 函数。目前,我正在为 lambdas 函数手动上传 .zip 文件,其中包括一个 configuration.json 文件,该文件具有访问 RDS 数据库的凭据。

我已经创建了一个 SAM 模板来通过 codepipeline 部署 lambda 函数,但是,我无法想出一种解决方案来为 lambda 函数提供 RDS 数据库凭据,因为在代码存储库中提交 configuration.json 文件不是一个选项。

AWS 机密管理器对我来说不是一个选择,因为数百万的 API 调用会影响 lambda 函数,因此成本会非常高。

【问题讨论】:

  • 带 KMS 的参数存储
  • Secrets Manager 比 Parameter Store 有一个额外的优势,那就是它提供了与 MySQL RDS 兼容的凭证轮换功能。
  • IAM 数据库认证?
  • 1) 您不会为每个请求调用 Secrets Manager,仅在需要建立连接时调用它(如果您为每个请求建立新连接,您会很快找到你有更严重的问题)。
  • 2) 1,000,000 次调用 Secrets Manager 的费用为 5 美元。如果这确实是一个财务问题,那么您可能会对 AWS 大发雷霆。

标签: mysql database amazon-web-services aws-lambda amazon-rds


【解决方案1】:

您可以在某些蓝图上使用 AWS 给出的建议之一。这个例子我取自 slack echo 通知,并在我的一些 lambda 函数中使用它。 要加密您的秘密,请使用以下步骤:

  1. 创建或使用现有的 KMS 密钥 - http://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html

  2. 点击“启用加密助手”复选框

  3. 粘贴到 kmsEncryptedToken 环境变量中,然后点击加密

按照这些步骤完成命令 API 端点的配置

  1. 完成蓝图配置后,选择“打开”以确保安全 在“配置触发器”页面上。

  2. 在“角色名称”字段中输入您的执行角色的名称。 您的函数的执行角色需要 kms:Decrypt 权限。我们有 预选“KMS 解密权限”策略模板,将 自动添加这些权限。

让我展示一个用 python 编写的简单 lambda 函数:

Check out this example registration screenshot

导入boto3
导入json
导入日志
导入操作系统

从 base64 导入 b64decode
从 urlparse 导入 parse_qs


ENCRYPTED_EXPECTED_TOKEN = os.environ['kmsEncryptedToken']

kms = boto3.client('kms')
expected_token = kms.decrypt(CiphertextBlob=b64decode(ENCRYPTED_EXPECTED_TOKEN))['明文']

记录器 = logging.getLogger()
logger.setLevel(logging.INFO)

希望对你有帮助

【讨论】:

    猜你喜欢
    • 2019-09-18
    • 1970-01-01
    • 2016-01-19
    • 2016-07-21
    • 1970-01-01
    • 2021-06-02
    • 1970-01-01
    • 2021-01-23
    相关资源
    最近更新 更多