#cloud-formation #lambda #rules #aws-lambda #compliance #ruleset #guard

app cfn-guard-rulegen-lambda

Lambda 版本的 cfn-guard-rulegen。接受一个 CloudFormation 模板并自动生成一组与资源属性匹配的 cfn-guard 规则。这是一种开始编写规则或从已知良好的模板创建可立即使用的规则集的有用方式。

1 个稳定版本

1.0.0 2020 年 10 月 1 日
0.0.0 2020 年 9 月 18 日

#6 in #ruleset

Apache-2.0

20KB
162

作为 Lambda 的 CloudFormation Guard Rulegen

目录

安装

依赖项

  • AWS CLI 配置具有部署和调用 Lambda 的权限
  • IAM 中的 AWS Lambda 执行角色
  • 将名为 CFN_GUARD_LAMBDA_ROLE_ARN 的 shell 环境变量设置为该角色的 ARN
  • Rust(请参阅顶层 README 中的安装说明
  • 如果在 Mac 上构建,您将需要 Homebrew
  • 如果在 Ubuntu 上构建,如果您还没有运行以下命令,请运行它:sudo apt-get update; sudo apt install build-essential

Mac/Ubuntu

  1. 安装和配置 依赖项
  2. 如果您使用的是 Mac,请将以下内容添加到 ~/.cargo/config
    [target.x86_64-unknown-linux-musl]
    linker = "x86_64-linux-musl-gcc"
    
  3. 确保您位于 cfn-guard-lambda 目录中
  4. 运行 make pre-reqs
  5. 运行 make install

安装后构建和运行

在编辑源代码后构建、部署和测试函数,请运行 make test

只需调用函数,运行make invoke。用于调用Makefile中的变量的操作可以修改,以提供不同的有效负载。

本项目采用Apache-2.0许可协议。

我们将努力提高lambda消息的质量,但一般来说,cfn-guard-rulegen-lambda只是cfn-guard-rulegen代码的包装,每个都可以用来测试另一个。

调用 Lambda 函数

请求结构

cfn-guard-rulegen-lambda的请求需要以下字段

  • template - YAML或JSON CloudFormation模板的字符串版本

示例

示例有效负载在Makefile中。这是我们用来测试不应通过规则集的一个例子。

request_payload = '{ "template": "{\n    \"Resources\": {\n        \"NewVolume\" : {\n            \"Type\" : \"AWS::EC2::Volume\",\n            \"Properties\" : {\n                \"Size\" : 100,\n                \"Encrypted\": true,\n                \"AvailabilityZone\" : \"us-east-1b\"\n            }\n        },\n        \"NewVolume2\" : {\n            \"Type\" : \"AWS::EC2::Volume\",\n            \"Properties\" : {\n                \"Size\" : 99,\n                \"Encrypted\": true,\n                \"AvailabilityZone\" : \"us-east-1b\"\n            }\n        } }\n}"}'
 
 #======================================================================
 # Request Payload
 #======================================================================
 # Template
 # {"Resources": {
 #  "NewVolume" : {
 #    "Type" : "AWS::EC2::Volume",
 #    "Properties" : {
 #    "Size" : 100,
 #    "Encrypted": true,
 #    "AvailabilityZone" : "us-east-1b"
 #    }
 #  },
 #  "NewVolume2" : {
 #    "Type" : "AWS::EC2::Volume",
 #    "Properties" : {
 #      "Size" : 99,
 #      "Encrypted": true,
 #      "AvailabilityZone" : "us-east-1b"
 #    }
 #  }
 #}
 #======================================================================

常见问题解答

  • 问:如何调试返回模糊错误信息的lambda调用?

     {"errorType": "Runtime.ExitError", "errorMessage": "RequestId: 1c0c0620-0f83-40bc-8eca-3cf2cf24820f Error: Runtime exited with error: exit status 101"}
    
  • 答:使用cfn-guard-rulegen在本地运行相同的模板以获取更好的信息。

     thread 'main' panicked at 'Bad Rule Operator: REQUIRE', src/rule_proc.rs:344:2
    

    我们将努力提高lambda消息的质量,但一般来说,cfn-guard-rulegen-lambda只是cfn-guard-rulegen代码的包装,每个都可以用来测试另一个。

依赖项

~16MB
~278K SLoC