如何在无服务器框架中管理不同环境的秘密

问题描述 投票:0回答:2

我正在尝试弄清楚如何在创建无服务器应用程序时管理不同环境的秘密

我的 serverless.yml 文件看起来像这样:

provider:
  name: aws
  runtime: nodejs6.10
  stage: ${opt:stage}
  region: us-east-1
  environment:
    NODE_ENV: ${opt:stage}
    SOME_API_KEY: // this is different depending upon dev or prod

functions:
  ....

部署时我使用以下命令

serverless deploy --stage prod

我希望从 AWS 参数存储中获取配置信息,如下所述: https://serverless.com/blog/serverless-secrets-api-keys/

但是我没有看到为开发或生产环境提供不同密钥的方法。

有什么建议吗?

serverless-framework
2个回答
1
投票

我在参数存储变量中添加了前缀。

例如

common/SLACK_WEBHOOK
development/MYSQL_PASSWORD
production/MYSQL_PASSWORD

然后,在我的

serverless.yml
中,我可以做...

...
environment:
    SLACK_WEBHOOK: ${ssm:common/SLACK_WEBHOOK}
    MYSQL_PASSWORD: ${ssm:${opt:stage}/MYSQL_PASSWORD}

你应该能够做类似的事情。


0
投票

我为此创建了一个无服务器插件,因为我面临着同样的问题并且没有找到适合它的插件。您可以在此处查看该插件:https://github.com/robin-thomas/serverless-aws-secrets

这个想法是,您应该拥有已由无服务器框架加载的环境变量(即秘密,因此具有虚拟值),并将由插件替换为 AWS Secrets Manager 中的秘密值。

这样我就不必在 GitHub 存储库中保守秘密,并且在我的无服务器部署中仍然可以获得秘密支持。


运行以下命令来安装插件:

$ npm install --save-dev serverless-aws-secrets

将插件添加到serverless.yml:

plugins:
  - serverless-aws-secrets

现在,如果您有如下所示的环境变量:

MYSQL_USERNAME=SECRET:MYSQL_USERNAME
MYSQL_PASSWORD=SECRET:MYSQL_PASSWORD

插件应搜索秘密

MYSQL_USERNAME
MYSQL_PASSWORD
(您可以配置插件),然后在部署包中替换它。

© www.soinside.com 2019 - 2024. All rights reserved.