【问题标题】:How to manage AWS Secret Keys for local development如何管理用于本地开发的 AWS 密钥
【发布时间】:2020-06-13 12:28:21
【问题描述】:

我正在 Python 3.8 中编写一个 lambda 函数。该函数使用 boto3 与 dynamodb 连接:

db = boto3.resource('dynamodb', region_name='foo', aws_access_key_id='foo', aws_secret_access_key='foo')

这就是我在本地机器上开发并需要测试功能时所拥有的。但是,当我将它部署到 lambda 时,我可以删除凭据,我的函数将连接到 dynamodb if I have the proper IAM roles and policies setup in place。例如,此代码在部署到 lambda 时可以正常工作:

db = boto3.resource('dynamodb', region_name='foo')

问题是,在将代码推送到 lambda 方面,我该如何管理?我正在使用 AWS SAM 部署到 AWS。现在我所做的是,一旦我完成了我的功能开发,我手动删除了 aws_access_key_id='foo'aws_secret_access_key='foo' 部分,然后使用 SAM 部署这些功能。

一定有更好的方法来做到这一点?我可以将这些嵌入到我的 IDE 中吗?我正在使用 PyCharm。那会是更好的方法吗?如果没有,还有什么?

【问题讨论】:

    标签: amazon-web-services aws-lambda aws-sam


    【解决方案1】:

    您应该永远不要这样在代码中放入凭据。

    在本地运行代码时,使用 AWS CLI aws configure 命令将本地凭证存储在 ~/.aws/config 文件中。 AWS 开发工具包将自动查看该文件以获取凭证。

    【讨论】:

      【解决方案2】:

      在 sam 中,您可以使用 sam local invokesam local start-lambda 在本地调用您的函数。

      两者都取--profile参数:

      要使用的 AWS 凭证配置文件

      这将确保您的本地 lambda 环境使用正确的凭据执行,而无需在您的代码中硬编码它们。随后,您无需修改​​即可测试您的代码,否则在硬编码密钥 ID 和密钥时需要修改。

      【讨论】:

        【解决方案3】:

        您可以使用环境变量。

        环境变量既可以在in pycharm 中配置,也可以在AWS LambdaAWS SAM 中配置。

        正如Lambda best practices 中所述:“使用环境变量将操作参数传递给您的函数。例如,如果您正在写入 Amazon S3 存储桶,而不是硬编码您正在写入的存储桶名称,请配置存储桶名称作为环境变量。”

        您还可以使用环境变量来指定正在使用的环境,然后可以使用它来明确确定是否需要凭据。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-11-23
          • 1970-01-01
          • 2019-05-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-02-15
          相关资源
          最近更新 更多