【问题标题】:How to add environment variables in template.yaml in a secured way?如何以安全的方式在 template.yaml 中添加环境变量?
【发布时间】:2021-06-09 06:18:36
【问题描述】:

通过 SAM CLI 使用 template.yaml 创建 Lambda 函数时,我必须传递一些环境变量,它们不应该暴露在 GitHub 上。有什么办法可以通过.env文件引用template.yaml中的环境变量?

我没有找到任何相同的来源。

来自 template.yaml 的示例代码 sn-p:

Properties:
  CodeUri: student /
  FunctionName: list
  Handler: index.listHandler
  Runtime: nodejs14.x
  Environment: 
    Variables:
      MONGODB_URI: mongodb://username:pwd

【问题讨论】:

    标签: aws-lambda amazon-cloudformation aws-sam-cli sam


    【解决方案1】:

    这里的选项很少。

    1. 将它们添加到模板的Parameters 部分(务必添加NoEcho 选项)并在部署时传递它们。
    2. 更好的选择是使用Secrets Manager 来存储值,然后在模板中使用dynamic references。 CloudFormation 会在您部署时为您从 Secrets Manager 中检索值。
    3. 更好的选择是根本不将它们作为环境变量传递(因为任何有权查看该函数的人都可以看到该值)。相反,使用 Secrets Manager 存储值并在代码中查找值。如果您决定使用这种方法,请务必缓存该值,以便您至少可以在 lambda 的热启动之间重用它。
    4. 另一种选择是使用 KMS 加密值,并将加密(Base64 编码)值传递给函数。您需要调用 KMS 解密来获取解密后的值。此操作非常快,并且不太可能受到限制。我仍然会缓存该值以帮助加快热启动之间的速度。

    【讨论】:

      【解决方案2】:

      通过@Jason 的回答 2 的扩展。这里是一个完整的工作示例:

      模板.yaml

      AWSTemplateFormatVersion: "2010-09-09"
      Transform: AWS::Serverless-2016-10-31
      Description: My test secrets manager dynamic reference SAM template/ Cloudformation stack
      
      Resources:
        # lambdas
        myLambda:
          Type: AWS::Serverless::Function
          Properties:
            FunctionName: !Sub ${AWS::StackName}-myLambda
            Runtime: nodejs12.x
            Handler: index.handler
            CodeUri: ./src/handlers/myLambda
            MemorySize: 128
            Timeout: 10
            Environment:
              Variables:
                someSecret: '{{resolve:secretsmanager:somePreviouslyStoredSecret}}'
      

      src/handlers/myLambda/index.js

      const { someSecret } = process.env;
      
      exports.handler = (event, context, callback) => {
          if (someSecret) callback(null, `secret: ${someSecret}`);
          callback(`Unexpected error, secret: ${someSecret}`);
      };
      

      【讨论】:

        猜你喜欢
        • 2014-09-29
        • 2011-07-11
        • 2022-07-11
        • 2018-08-02
        • 2021-03-24
        • 1970-01-01
        • 2018-06-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多