【问题标题】:How to suppress aws lambda cli output如何抑制 aws lambda cli 输出
【发布时间】:2019-06-15 21:48:46
【问题描述】:

我想使用aws lambda update-function-code 命令来部署我的函数的代码。这里的问题是 aws CLI 总是在部署后打印出一些信息。该信息包含敏感信息,例如环境变量及其值。这是不可接受的,因为我将使用公共 CI 服务,并且我不希望任何人都可以使用该信息。同时,我不想通过将 AWS 命令​​中的所有内容定向到 /dev/null 来解决此问题,例如,在这种情况下,我将丢失有关错误和异常的信息,如果出现问题,这将使调试变得更加困难。我可以在这里做什么?

附言SAM 不是一个选项,因为它会迫使我切换到另一个框架并完全改变我正在使用的工作流程。

【问题讨论】:

  • 我很困惑。你说你不想表现出来,但你说你不想失去它。您可以将其直接指向日志文件吗?或者,如何重定向正常输出但在屏幕上显示stderr?见How to redirect stderr to a filebash - How to pipe stderr, and not stdout? - Stack Overflow
  • @JohnRotenstein 据我记得aws cli lambda 不会将错误发送到标准错误,它只是将带有属性错误的 json 返回到标准输出
  • 这能回答你的问题吗? Bash print stderr only, not stdout
  • 我也遇到了这个问题。在我眼中存在巨大的安全风险。似乎 S3 命令有 --only-show-errors 但似乎 lambda 不存在类似的命令。我现在使用> /dev/null

标签: aws-lambda aws-cli


【解决方案1】:

您可以通过将这些值替换为 jq 来定位您想要抑制的输出

例如,如果您有 cli 命令的输出,如下所示:

{
  "FunctionName": "my-function",
  "LastModified": "2019-09-26T20:28:40.438+0000",
  "RevisionId": "e52502d4-9320-4688-9cd6-152a6ab7490d",
  "MemorySize": 256,
  "Version": "$LATEST",
  "Role": "arn:aws:iam::123456789012:role/service-role/my-function-role-uy3l9qyq",
  "Timeout": 3,
  "Runtime": "nodejs10.x",
  "TracingConfig": {
      "Mode": "PassThrough"
  },
  "CodeSha256": "5tT2qgzYUHaqwR716pZ2dpkn/0J1FrzJmlKidWoaCgk=",
  "Description": "",
  "VpcConfig": {
      "SubnetIds": [],
      "VpcId": "",
      "SecurityGroupIds": []
  },
  "CodeSize": 304,
  "FunctionArn": "arn:aws:lambda:us-west-2:123456789012:function:my-function",
  "Handler": "index.handler",
  "Environment": {
    "Variables": {
      "SomeSensitiveVar": "value",
      "SomeOtherSensitiveVar": "password"
    }
  }
}

您可以将其通过管道传输到 jq 并仅在键存在时替换值:

aws lambda update-function-code <args> | jq '
  if .Environment.Variables.SomeSensitiveVar? then .Environment.Variables.SomeSensitiveVar = "REDACTED" else . end |
  if .Environment.Variables.SomeRandomSensitiveVar? then .Environment.Variables.SomeOtherSensitiveVar = "REDACTED" else . end'

您知道哪些数据是敏感数据,并且需要进行适当的设置。您可以在cli docsAPI docs 中看到返回什么数据的示例,也有助于了解结构的外观。

【讨论】:

    【解决方案2】:

    Lambda 环境变量无处不在,不能被视为私有的。 如果您的环境变量很敏感,您可以考虑使用aws secret manager

    简而言之:

    • 在秘密存储中创建一个秘密。它有一个名称(公共)和一个值(秘密、加密、具有适当的用户访问控制)
    • 允许您的 lambda 访问秘密存储
    • 在您的 lambda 环境中,存储您的秘密的名称,并告诉您的 lambda 在运行时获取相应的值
    • 奖励:密码轮换变得超级简单,因为您甚至不必再更新 lambda 配置了

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-19
      • 1970-01-01
      • 2014-10-17
      • 2018-08-14
      • 1970-01-01
      • 2021-12-17
      • 2018-09-22
      • 2021-10-08
      相关资源
      最近更新 更多