Mysql 安全地向AWS Lambda函数提供AWS RDS凭据的最佳方法是什么?

Mysql 安全地向AWS Lambda函数提供AWS RDS凭据的最佳方法是什么?,mysql,database,amazon-web-services,aws-lambda,amazon-rds,Mysql,Database,Amazon Web Services,Aws Lambda,Amazon Rds,我正在使用AWS codepipeline创建一个CI/CD管道,以部署几个lambda函数。目前,我正在手动上载lambdas函数的.zip文件,其中包括一个configuration.json文件,该文件具有访问RDS数据库的凭据 我已经创建了一个SAM模板,用于通过codepipeline部署lambda函数,但是,我想不出一个向lambda函数提供RDS数据库凭据的解决方案,因为在代码存储库中提交configuration.json文件不是一个选项 AWS secrets manager

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

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


AWS secrets manager不是我的选择,因为它会非常昂贵,因为数以百万计的API调用会命中lambda函数。

您可以在一些蓝图上使用AWS给出的建议之一。我从slack echo notification中获取了这个示例,并在我的一些lambda函数中使用了它。 要加密您的机密,请使用以下步骤:

  • 创建或使用现有KMS密钥-

  • 单击“启用加密帮助程序”复选框

  • 粘贴到kmsEncryptedToken环境变量中,然后单击加密

  • 按照以下步骤完成命令API端点的配置

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

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

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

    进口boto3 导入json 导入日志记录 导入操作系统 从base64导入B64解码 从URL解析导入解析 加密的\u预期\u令牌=os.environ['kmsEncryptedToken'] kms=boto3.client('kms') 预期的\u令牌=kms.decrypt(CiphertextBlob=B64解码(加密的\u预期的\u令牌))['Plaintext'] logger=logging.getLogger() logger.setLevel(logging.INFO)
    希望这对您有所帮助,您可以在一些蓝图上使用AWS提供的建议之一。我从slack echo notification中获取了这个示例,并在我的一些lambda函数中使用了它。 要加密您的机密,请使用以下步骤:

  • 创建或使用现有KMS密钥-

  • 单击“启用加密帮助程序”复选框

  • 粘贴到kmsEncryptedToken环境变量中,然后单击加密

  • 按照以下步骤完成命令API端点的配置

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

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

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

    进口boto3 导入json 导入日志记录 导入操作系统 从base64导入B64解码 从URL解析导入解析 加密的\u预期\u令牌=os.environ['kmsEncryptedToken'] kms=boto3.client('kms') 预期的\u令牌=kms.decrypt(CiphertextBlob=B64解码(加密的\u预期的\u令牌))['Plaintext'] logger=logging.getLogger() logger.setLevel(logging.INFO)
    希望这有助于

    使用KMSSecrets Manager的Parameter Store与Parameter Store相比还有一个额外的优势,即它提供了与MySQL RDS.IAM数据库身份验证兼容的凭据轮换功能?1)您不必为每个请求调用Secrets Manager,只在需要建立连接时才调用它(如果你为每一个请求建立新的连接,你会很快发现你有更糟糕的问题。)2)给secrets manager打1000000个电话需要5美元。如果这真的是一个财务问题,那么你可能会被AWS惊醒。KMSSecrets Manager的参数存储比参数存储有一个额外的优势,即它提供了与MySQL RDS.IAM数据库身份验证兼容的凭据旋转功能?1)你不会为每个请求调用Secrets Manager,你只在需要建立连接时才调用它(如果你为每个请求建立新连接,你会很快发现你有更严重的问题)。2)1000000次呼叫secrets manager需要花费5美元。如果这真的是一个财务问题,那么你可能会被AWS惊醒。 import boto3 import json import logging import os from base64 import b64decode from urlparse import parse_qs ENCRYPTED_EXPECTED_TOKEN = os.environ['kmsEncryptedToken'] kms = boto3.client('kms') expected_token = kms.decrypt(CiphertextBlob=b64decode(ENCRYPTED_EXPECTED_TOKEN))['Plaintext'] logger = logging.getLogger() logger.setLevel(logging.INFO)