islamelkadi/terraform-aws-lambda

GitHub: islamelkadi/terraform-aws-lambda

一个生产级 Terraform 模块,用于创建符合多项安全合规框架要求的 AWS Lambda 函数,支持基于环境的自动化安全控制和审计追踪。

Stars: 0 | Forks: 0

# Terraform AWS Lambda 模块 [![Terraform Security](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/468370c6c1004859.svg)](https://github.com/islamelkadi/terraform-aws-lambda/actions/workflows/terraform-security.yaml) [![Terraform Lint & Validation](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/47c8ebbb75004900.svg)](https://github.com/islamelkadi/terraform-aws-lambda/actions/workflows/terraform-lint.yaml) [![Terraform Docs](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/b327fc8213004902.svg)](https://github.com/islamelkadi/terraform-aws-lambda/actions/workflows/terraform-docs.yaml) 一个可复用的 Terraform 模块,用于创建符合 AWS Security Hub 合规性(FSBP、CIS、NIST 800-53、NIST 800-171、PCI DSS)的 AWS Lambda 函数,支持 VPC 集成、KMS 加密和灵活的安全控制覆盖。 ## 前置条件 本模块专为 macOS 设计。您的机器上必须已安装: - Python 3 和 pip - [Kiro](https://kiro.dev) 和 Kiro CLI - [Homebrew](https://brew.sh) 要安装其余开发工具,请运行: ``` make bootstrap ``` 这将安装/升级:tfenv、Terraform(通过 tfenv)、tflint、terraform-docs、checkov 和 pre-commit。 ## 安全性 ### 基于环境的安全控制 安全控制通过 [terraform-aws-metadata](https://github.com/islamelkadi/terraform-aws-metadata?tab=readme-ov-file#security-profiles) 模块的安全配置文件自动应用于不同环境: | 控制项 | Dev | Staging | Prod | |---------|-----|---------|------| | KMS 客户户托管密钥 | 可选 | 必需 | 必需 | | VPC 集成 | 可选 | 必需 | 必需 | | 预留并发 | 可选 | 必需 | 必需 | | 死信队列 | 可选 | 必需 | 必需 | | X-Ray 追踪 | 可选 | 必需 | 必需 | | 日志保留 | 7 天 | 90 天 | 365 天 | 有关安全配置文件以及控制如何随环境变化的完整详细信息,请参阅 [安全配置文件](https://github.com/islamelkadi/terraform-aws-metadata?tab=readme-ov-file#security-profiles) 文档。 ### 安全扫描抑制 本模块抑制了某些 Checkov 安全检查,这些检查要么不适用于示例/演示代码,要么代表可选功能。以下检查在 `.checkov.yaml` 中被抑制: **模块源版本控制 (CKV_TF_1, CKV_TF_2)** - 被抑制是因为我们使用语义版本标签(`?ref=v1.0.0`)而不是提交哈希,以提高可维护性和可读性 - 语义版本控制是稳定版本的有效且广泛接受的版本控制策略 **KMS IAM 策略 (CKV_AWS_111, CKV_AWS_356, CKV_AWS_109)** - 在示例代码中被抑制,因为 KMS 模块使用灵活的 IAM 策略进行演示 - 生产部署应根据特定的安全要求自定义 KMS 策略,并应用最小权限原则 **Lambda 可选功能** - **VPC 公有子网 (CKV_AWS_130)**:公有子网旨在为需要互联网访问的资源自动分配公有 IP;这是有意为之 - **代码签名 (CKV_AWS_272)**:可选的安全功能,会增加复杂性并需要额外的基础设施;请根据安全要求启用 ## 包含的示例 ### 1. 基础 Lambda 函数 使用虚构部署包进行简单任务的最小配置。 **功能特性:** - 无 VPC 集成(公有 Lambda) - 无 KMS 加密(无敏感数据) - 启用 X-Ray 追踪 - 7 天日志保留 - 为简化起见的安全控制覆盖 **使用场景:** - 简单的数据转换 - 计划任务 - 不涉及敏感数据的事件驱动处理 ### 2. 完全合规的生产 Lambda 强制执行所有控制的完全安全合规配置。 **功能特性:** - VPC 集成(私有子网) - 环境变量的 KMS 加密 - 用于错误处理的死信队列 - 预留并发(50) - X-Ray 追踪(Active 模式) - 365 天日志保留 - 自定义 IAM 策略 **使用场景:** - 生产工作负载 - 处理敏感数据 - 从私有子网访问数据库 - 高可用性要求 ### 3. API Lambda(API Gateway 集成) 针对 API Gateway 优化的面向公网的 Lambda。 **功能特性:** - 无 VPC 集成(减少冷启动) - 启用 KMS 加密 - 死信队列 - 预留并发(10) - X-Ray 追踪 - 90 天日志保留 **使用场景:** - REST API 端点 - GraphQL 解析器 - Webhook 处理器 - 面向公网的服务 ## 开始之前 在使用这些示例之前,您需要: 1. **Lambda 部署包** - 创建包含 Lambda 代码的 ZIP 文件 2. **KMS 密钥** - 用于加密环境变量(生产/API 示例) 3. **VPC 资源** - 私有子网和安全组(生产示例) 4. **死信队列** - 用于错误处理的 SQS 队列(生产/API 示例) ## 用法 ### 步骤 1:创建 Lambda 部署包 创建简单的 Lambda 函数用于测试: ``` # 创建 lambda-packages 目录 mkdir -p lambda-packages # Basic Lambda cat > index.py << 'EOF' def handler(event, context): return { 'statusCode': 200, 'body': 'Hello from Basic Lambda!' } EOF zip lambda-packages/basic.zip index.py # Production Lambda cat > index.py << 'EOF' import os def handler(event, context): log_level = os.environ.get('LOG_LEVEL', 'INFO') return { 'statusCode': 200, 'body': f'Production Lambda - Log Level: {log_level}' } EOF zip lambda-packages/processor.zip index.py # API Lambda cat > index.py << 'EOF' import json def handler(event, context): return { 'statusCode': 200, 'headers': {'Content-Type': 'application/json'}, 'body': json.dumps({'message': 'API Lambda response'}) } EOF zip lambda-packages/api.zip index.py # 清理 rm index.py ``` ### 步骤 2:更新变量 编辑 `params/input.tfvars` 并将虚构值替换为您实际的 AWS 资源: ``` namespace = "your-org" environment = "dev" region = "us-east-1" # 替换为您的实际 KMS key ARN kms_key_arn = "arn:aws:kms:us-east-1:YOUR_ACCOUNT:key/YOUR_KEY_ID" # 替换为您的实际 VPC subnet IDs vpc_subnet_ids = [ "subnet-YOUR_SUBNET_1", "subnet-YOUR_SUBNET_2" ] # 替换为您的实际 security group IDs vpc_security_group_ids = [ "sg-YOUR_SECURITY_GROUP" ] # 替换为您的实际 SQS DLQ ARN dlq_arn = "arn:aws:sqs:us-east-1:YOUR_ACCOUNT:YOUR_DLQ_NAME" ``` ### 步骤 3:部署 ``` # 初始化 Terraform terraform init # 查看计划 terraform plan -var-file=params/input.tfvars # 应用配置 terraform apply -var-file=params/input.tfvars ``` ### 步骤 4:测试 Lambda 函数 ``` # 测试 basic Lambda aws lambda invoke \ --function-name example-dev-basic-function \ --region us-east-1 \ response.json && cat response.json # 测试 production Lambda aws lambda invoke \ --function-name example-prod-data-processor \ --region us-east-1 \ response.json && cat response.json # 测试 API Lambda aws lambda invoke \ --function-name example-dev-public-api \ --region us-east-1 \ response.json && cat response.json ``` ## 安全控制覆盖 这些示例演示了安全控制覆盖系统: ### 基础示例 ``` security_control_overrides = { disable_vpc_requirement = true disable_kms_requirement = true justification = "Basic Lambda function with no sensitive data or private resource access." } ``` ### 生产示例 无覆盖 - 强制执行所有安全控制(VPC、KMS、DLQ、预留并发) ### API 示例 ``` security_control_overrides = { disable_vpc_requirement = true justification = "Public-facing Lambda invoked by API Gateway. VPC would add cold start latency." } ``` ## 成本估算 **Lambda 定价(美国东部):** - 请求:$0.20 / 100 万次请求 - 持续时间:$0.0000166667 / GB-秒 - 免费套餐:每月 100 万次请求 + 400,000 GB-秒 **示例月度成本:** - 基础 Lambda(10 万次请求,512MB,平均 1 秒):约 $0.10 - 生产 Lambda(100 万次请求,2GB,平均 5 秒):约 $18.00 - API Lambda(50 万次请求,1GB,平均 0.5 秒):约 $4.50 **额外成本:** - CloudWatch Logs:$0.50 / GB(摄取量) - X-Ray:$5 / 100 万次追踪记录 - KMS:$1/月/密钥 + $0.03 / 10,000 次请求 - VPC:无额外费用(NAT Gateway 另计) ## 常见问题 ### 冷启动延迟 **问题:** 首次调用速度慢 **解决方案:** - 使用预留并发(会增加成本) - 对于面向公网的函数避免使用 VPC - 减小部署包大小 - 使用 ARM64 架构(Graviton2) ### VPC 连接问题 **问题:** Lambda 无法访问互联网或 AWS 服务 **解决方案:** - 确保公有子网中有 NAT Gateway - 为 AWS 服务添加 VPC 端点(S3、DynamoDB 等) - 检查安全组出站规则 - 验证路由表配置 ### 权限错误 **问题:** Lambda 无法访问 AWS 资源 **解决方案:** - 检查 IAM 角色是否具有所需权限 - 验证基于资源的策略(S3、SQS 等) - 检查 KMS 密钥策略以获取加密访问权限 - 查看 CloudWatch Logs 以了解具体错误 ### 部署包过大 **问题:** 部署包超过 50MB(直接上传)或 250MB(解压后) **解决方案:** - 使用 Lambda Layers 存放依赖项 - 通过 S3 部署(支持最大 250MB 压缩包) - 使用容器镜像(最大 10GB) - 从包中移除不必要的文件 ## 清理 ``` # 销毁所有资源 terraform destroy -var-file=params/input.tfvars ``` **注意:** CloudWatch Log Groups 可能会根据保留设置保留。 ## 高级配置 ### 添加自定义 IAM 策略 ``` module "custom_lambda" { source = "github.com/islamelkadi/terraform-aws-lambda" inline_policies = { s3_access = jsonencode({ Version = "2012-10-17" Statement = [{ Effect = "Allow" Action = ["s3:GetObject", "s3:PutObject"] Resource = "arn:aws:s3:::my-bucket/*" }] }) } } ``` ### 使用 Lambda Layers ``` module "lambda_with_layers" { source = "github.com/islamelkadi/terraform-aws-lambda" layers = [ "arn:aws:lambda:us-east-1:123456789012:layer:my-layer:1" ] } ``` ### 容器镜像部署 ``` module "container_lambda" { source = "github.com/islamelkadi/terraform-aws-lambda" package_type = "Image" image_uri = "123456789012.dkr.ecr.us-east-1.amazonaws.com/my-lambda:latest" } ``` ## 参考资料 - [AWS Lambda 文档](https://docs.aws.amazon.com/lambda/) - [Lambda 最佳实践](https://docs.aws.amazon.com/lambda/latest/dg/best-practices.html) - [Lambda 定价](https://aws.amazon.com/lambda/pricing/) - [VPC 集成](https://docs.aws.amazon.com/lambda/latest/dg/configuration-vpc.html) - [X-Ray 追踪](https://docs.aws.amazon.com/lambda/latest/dg/services-xray.html) - Terraform 合规性验证检查 ## 使用示例 ### 基础示例 ``` module "lambda" { source = "github.com/islamelkadi/terraform-aws-lambda" namespace = "example" environment = "prod" name = "event-processor" region = "us-east-1" runtime = "python3.13" handler = "index.handler" filename = "lambda.zip" memory_size = 512 timeout = 30 environment_variables = { LOG_LEVEL = "INFO" } tags = { Project = "CorporateActions" } } ``` ### 带安全控制的生产函数 ``` module "lambda" { source = "github.com/islamelkadi/terraform-aws-lambda" security_controls = module.metadata.security_controls namespace = "example" environment = "prod" name = "event-processor" region = "us-east-1" runtime = "python3.13" handler = "index.handler" filename = "lambda.zip" # VPC configuration (required by security controls) vpc_config = { subnet_ids = module.vpc.private_subnet_ids security_group_ids = [module.lambda_sg.id] } # KMS encryption (required by security controls) kms_key_arn = module.kms.key_arn # Reserved concurrency (required by security controls) reserved_concurrent_executions = 10 # Dead letter queue (required by security controls) dead_letter_config = { target_arn = module.dlq.arn } # CloudWatch Logs with compliance retention log_retention_days = 365 # X-Ray tracing enabled enable_tracing = true memory_size = 1024 timeout = 300 environment_variables = { DB_ENDPOINT = module.rds.endpoint S3_BUCKET = module.s3.bucket_name } } ``` ### 带覆盖的开发函数 ``` module "lambda" { source = "github.com/islamelkadi/terraform-aws-lambda" security_controls = module.metadata.security_controls # Override security controls for development security_control_overrides = { disable_vpc_requirement = true disable_reserved_concurrency = true disable_dead_letter_queue = true justification = "Development function for testing. No VPC access needed. Unpredictable load pattern. Non-critical failures acceptable." } namespace = "example" environment = "dev" name = "test-function" region = "us-east-1" runtime = "python3.13" handler = "index.handler" filename = "lambda.zip" memory_size = 256 timeout = 60 log_retention_days = 7 } ``` ### 公有 API 函数 ``` module "api_lambda" { source = "github.com/islamelkadi/terraform-aws-lambda" security_controls = module.metadata.security_controls # Override VPC requirement for public API security_control_overrides = { disable_vpc_requirement = true justification = "Public API function invoked by API Gateway. No private resource access required. Reviewed and approved by security team." } namespace = "example" environment = "prod" name = "api-handler" region = "us-east-1" runtime = "nodejs20.x" handler = "index.handler" filename = "api-lambda.zip" # Still use KMS encryption for environment variables kms_key_arn = module.kms.key_arn # Reserved concurrency for API stability reserved_concurrent_executions = 100 memory_size = 512 timeout = 30 environment_variables = { API_KEY_SECRET = "arn:aws:secretsmanager:..." } } ``` ## MCP 服务器 本模块包含两个在 `.kiro/settings/mcp.json` 中配置的 [Model Context Protocol (MCP)](https://modelcontextprotocol.io/) 服务器,用于 Kiro: | 服务器 | 包 | 描述 | |--------|---------|-------------| | `aws-docs` | `awslabs.aws-documentation-mcp-server@latest` | 提供对 AWS 文档的访问,用于服务功能、API 参考和最佳实践的上下文查找。 | | `terraform` | `awslabs.terraform-mcp-server@latest` | 支持直接从 IDE 执行 Terraform 操作(init、validate、plan、fmt、tflint),并为常见工作流提供自动批准的命令。 | 这两个服务器都通过 `uvx` 运行,除了 [引导](#prerequisites) 步骤外,无需额外安装。 ## 用法 ``` # Lambda 函数示例 # 演示具有安全控制覆盖的各种 Lambda 配置 # ============================================================================ # 示例 1:Basic Lambda Function # 具有虚构部署包的最小配置 # 覆盖:简单函数不需要 VPC 和 KMS # ============================================================================ module "basic_lambda" { source = "github.com/islamelkadi/terraform-aws-lambda" namespace = var.namespace environment = var.environment name = "basic-function" region = var.region handler = "index.handler" runtime = "python3.13" # Fictitious deployment package - replace with your actual Lambda code # Create a simple Lambda: zip index.py -r lambda.zip filename = "${path.module}/lambda-packages/basic.zip" description = "Basic Lambda function for simple tasks" memory_size = 512 timeout = 60 # Security Control Overrides: Relaxed for basic function security_control_overrides = { disable_vpc_requirement = true disable_kms_requirement = true justification = "Basic Lambda function with no sensitive data or private resource access. VPC and KMS encryption not required." } # Basic monitoring enable_tracing = true log_retention_days = 90 tags = { Example = "basic" } } # ============================================================================ # 示例 2:具有完全合规性的 Production Lambda # 强制执行所有安全控制(VPC, KMS, DLQ, Reserved Concurrency) # ============================================================================ module "production_lambda" { source = "github.com/islamelkadi/terraform-aws-lambda" namespace = var.namespace environment = "prod" name = "data-processor" region = var.region handler = "index.handler" runtime = "python3.13" filename = "${path.module}/lambda-packages/processor.zip" description = "Production Lambda with full security compliance" memory_size = 2048 timeout = 300 # VPC Configuration - replace with your actual VPC resources vpc_config = { subnet_ids = var.vpc_subnet_ids security_group_ids = var.vpc_security_group_ids } # KMS Encryption - replace with your actual KMS key ARN kms_key_arn = var.kms_key_arn # Dead Letter Queue - replace with your actual SQS queue ARN dead_letter_config = { target_arn = var.dlq_arn } # Reserved Concurrency - prevent resource exhaustion reserved_concurrent_executions = 50 # X-Ray Tracing - observability enable_tracing = true tracing_mode = "Active" # CloudWatch Logs - 365-day retention for compliance log_retention_days = 365 create_log_group = true # Environment Variables environment_variables = { LOG_LEVEL = "INFO" STAGE = "production" } tags = { Environment = "Production" Compliance = "FullyCompliant" Example = "production" } } # ============================================================================ # 示例 3:API Lambda(API Gateway 集成) # 覆盖:面向公众的函数不需要 VPC # ============================================================================ module "api_lambda" { source = "github.com/islamelkadi/terraform-aws-lambda" namespace = var.namespace environment = var.environment name = "public-api" region = var.region handler = "index.handler" runtime = "python3.13" filename = "${path.module}/lambda-packages/api.zip" description = "Public-facing Lambda invoked by API Gateway" memory_size = 1024 timeout = 30 # Security Control Override: VPC not required security_control_overrides = { disable_vpc_requirement = true justification = "Public-facing Lambda invoked by API Gateway. VPC integration would add cold start latency without security benefit." } # KMS encryption for environment variables kms_key_arn = var.kms_key_arn # Dead letter queue dead_letter_config = { target_arn = var.dlq_arn } reserved_concurrent_executions = 10 enable_tracing = true log_retention_days = 90 environment_variables = { API_VERSION = "v1" } tags = { UseCase = "PublicAPI" Example = "api-gateway" } } ``` ## 要求 | 名称 | 版本 | |------|---------| | [terraform](#requirement\_terraform) | >= 1.14.3 | | [aws](#requirement\_aws) | >= 6.34 | ## 提供商 | 名称 | 版本 | |------|---------| | [aws](#provider\_aws) | >= 6.34 | ## 模块 | 名称 | 来源 | 版本 | |------|--------|---------| | [metadata](#module\_metadata) | github.com/islamelkadi/terraform-aws-metadata | v1.1.0 | ## 资源 | 名称 | 类型 | |------|------| | [aws_cloudwatch_log_group.this](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/cloudwatch_log_group) | resource | | [aws_iam_role.this](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_role) | resource | | [aws_iam_role_policy.inline_policies](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_role_policy) | resource | | [aws_iam_role_policy_attachment.managed_policies](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_role_policy_attachment) | resource | | [aws_lambda_function.this](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/lambda_function) | resource | | [aws_iam_policy_document.assume_role](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/iam_policy_document) | data source | ## 输入 | 名称 | 描述 | 类型 | 默认值 | 必需 | |------|-------------|------|---------|:--------:| | [architectures](#input\_architectures) | Lambda 函数的指令集架构(x86\_64 或 arm64) | `list(string)` |
[
"x86_64"
]
| 否 | | [assume\_role\_policy](#input\_assume\_role\_policy) | 自定义 assume role 策略 JSON。如果未提供,则使用默认 Lambda assume role 策略 | `string` | `null` | 否 | | [attributes](#input\_attributes) | 用于命名的附加属性 | `list(string)` | `[]` | 否 | | [create\_log\_group](#input\_create\_log\_group) | 是否为 Lambda 函数创建 CloudWatch Log Group | `bool` | `true` | 否 | | [create\_role](#input\_create\_role) | 是否为 Lambda 函数创建 IAM 角色 | `bool` | `true` | 否 | | [dead\_letter\_config](#input\_dead\_letter\_config) | 失败调用的死信队列配置 |
object({
target_arn = string
})
| `null` | 否 | | < name="input_delimiter"> [delimiter](#input\_delimiter) | 名称组件之间使用的分隔符 | `string` | `"-"` | 否 | | [description](#input\_description) | Lambda 函数的描述 | `string` | `""` | 否 | | [enable\_tracing](#input\_enable\_tracing) | 为 Lambda 函数启用 X-Ray 追踪 | `bool` | `true` | 否 | | [environment](#input\_environment) | 环境名称(dev、staging、prod) | `string` | n/a | 是 | | [environment\_variables](#input\_environment\_variables) | Lambda 函数的环境变量映射 | `map(string)` | `{}` | 否 | | [ephemeral\_storage\_size](#input\_ephemeral\_storage\_size) | /tmp 目录的大小(MB) | `number` | `512` | 否 | | [filename](#input\_filename) | Lambda 部署包的路径(Zip) | `string` | `null` | 否 | | [handler](#input\_handler) | 代码中的函数入口点 | `string` | `null` | 否 | | [image\_uri](#input\_image\_uri) | 基于容器的 Lambda 的 ECR 镜像 URI(Image 包类型) | `string` | `null` | 否 | | [inline\_policies](#input\_inline\_policies) | 要附加到 Lambda 角色的内联 IAM 策略映射(名称 => 策略 JSON) | `map(string)` | `{}` | 否 | | [kms\_key\_arn](#input\_kms\_key\_arn) | 用于加密环境变量和日志组的 KMS 密钥 ARN | `string` | `null` | 否 | | [layers](#input\_layers) | 要附加的 Lambda 层 ARN 列表 | `list(string)` | `[]` | 否 | | [log\_retention\_days](#input\_log\_retention\_days) | CloudWatch Logs 保留期(天) | `number` | `365` | 否 | | [managed\_policy\_arns](#input\_managed\_policy\_arns) | 要附加到 Lambda 角色的 IAM 托管策略 ARN 列表 | `list(string)` | `[]` | 否 | | [memory\_size](#input\_memory\_size) | 分配给 Lambda 函数的内存量(MB) | `number` | `128` | 否 | | [name](#input\_name) | Lambda 函数的名称 | `string` | n/a | 是 | | [namespace](#input\_namespace) | 命名空间(组织/团队名称) | `string` | n/a | 是 | | [package\_type](#input\_package\_type) | Lambda 部署包类型(Zip 或 Image) | `string` | `"Zip"` | 否 | | [region](#input\_region) | 将创建资源的 AWS 区域 | `string` | n/a | 是 | | [reserved\_concurrent\_executions](#input\_reserved\_concurrent\_executions) | 预留并发执行的数量。设为 -1 表示无预留 | `number` | `-1` | 否 | | [role\_arn](#input\_role\_arn) | 要使用的现有 IAM 角色的 ARN。如果 create\_role 为 false 则必需 | `string` | `null` | 否 | | [runtime](#input\_runtime) | Lambda 函数的运行时环境 | `string` | `null` | 否 | | [s3\_bucket](#input\_s3\_bucket) | 包含 Lambda 部署包的 S3 存储桶 | `string` | `null` | 否 | | [s3\_key](#input\_s3\_key) | Lambda 部署包的 S3 键 | `string` | `null` | 否 | | [s3\_object\_version](#input\_s3\_object\_version) | Lambda 部署包的 S3 对象版本 | `string` | `null` | 否 | | [security\_control\_overrides](#input\_security\_control\_overrides) | 覆盖此 Lambda 函数的特定安全控制。
仅在有书面业务理由时使用。

示例用例:
- disable\_vpc\_requirement:公有 API 函数(API Gateway 集成,无私有资源访问)
- disable\_kms\_requirement:无环境变量或仅包含公有配置
- disable\_reserved\_concurrency:具有可变负载的开发/测试函数
- disable\_dead\_letter\_queue:仅同步调用且调用方进行错误处理

重要提示:出于审计目的,请在 'justification' 字段中记录原因。 |
object({
disable_vpc_requirement = optional(bool, false)
disable_kms_requirement = optional(bool, false)
disable_cloudwatch_logs = optional(bool, false)
disable_xray_tracing = optional(bool, false)
disable_reserved_concurrency = optional(bool, false)
disable_dead_letter_queue = optional(bool, false)
disable_log_retention_validation = optional(bool, false)

# Audit trail - document why controls are disabled
justification = optional(string, "")
})
|
{
"disable_cloudwatch_logs": false,
"disable_dead_letter_queue": false,
"disable_kms_requirement": false,
"disable_log_retention_validation": false,
"disable_reserved_concurrency": false,
"disable_vpc_requirement": false,
"disable_xray_tracing": false,
"justification": ""
}
| 否 | | [security\_controls](#input\_security\_controls) | 来自 metadata 模块的安全控制配置。用于强制执行安全标准 |
object({
encryption = object({
require_kms_customer_managed = bool
require_encryption_at_rest = bool
require_encryption_in_transit = bool
enable_kms_key_rotation = bool
})
logging = object({
require_cloudwatch_logs = bool
min_log_retention_days = number
require_access_logging = bool
require_flow_logs = bool
})
monitoring = object({
enable_xray_tracing = bool
enable_enhanced_monitoring = bool
enable_performance_insights = bool
require_cloudtrail = bool
})
network = object({
require_private_subnets = bool
require_vpc_endpoints = bool
block_public_ingress = bool
require_imdsv2 = bool
})
compliance = object({
enable_point_in_time_recovery = bool
require_reserved_concurrency = bool
enable_deletion_protection = bool
})
})
| `null` | 否 | | [tags](#input\_tags) | 应用于资源的附加标签 | `map(string)` | `{}` | 否 | | [timeout](#input\_timeout) | 最大执行时间(秒) | `number` | `3` | 否 | | [tracing\_mode](#input\_tracing\_mode) | X-Ray 追踪模式(Active 或 PassThrough) | `string` | `"Active"` | 否 | | [vpc\_config](#input\_vpc\_config) | Lambda 的 VPC 配置(subnet\_ids 和 security\_group\_ids) |
object({
subnet_ids = list(string)
security_group_ids = list(string)
})
| `null` | 否 | ## 输出 | 名称 | 描述 | |------|-------------| | [function\_arn](#output\_function\_arn) | Lambda 函数的 ARN | | [function\_invoke\_arn](#output\_function\_invoke\_arn) | 用于从 API Gateway 调用 Lambda 函数的 ARN | | [function\_name](#output\_function\_name) | Lambda 函数的名称 | | [function\_qualified\_arn](#output\_function\_qualified\_arn) | Lambda 函数的限定 ARN(包含版本) | | [function\_version](#output\_function\_version) | Lambda 函数的最新发布版本 | | [log\_group\_arn](#output\_log\_group\_arn) | CloudWatch Log Group 的 ARN | | [log\_group\_name](#output\_log\_group\_name) | CloudWatch Log Group 的名称 | | [role\_arn](#output\_role\_arn) | Lambda 函数使用的 IAM 角色 ARN | | [role\_name](#output\_role\_name) | Lambda 函数使用的 IAM 角色名称 | | [tags](#output\_tags) | 应用于 Lambda 函数的标签 | ## 示例 有关包含所有功能的完整工作示例,请参阅 [example/](example/)。
标签:AWS Lambda, AWS Security Hub, CIS, CSP, EC2, ECS, IaC, Kiro, KMS 加密, NIST, PCI DSS, PE 加载器, Python, Terraform, Tflint, VPC 集成, X-Ray, 人工智能安全, 企业级, 合规性, 安全标准, 并发控制, 无后门, 无服务器, 日志留存, 模块, 死信队列, 特权提升, 生产就绪, 自动化部署, 逆向工具