zainasr/EKS-Security-FinOps-Platform

GitHub: zainasr/EKS-Security-FinOps-Platform

基于 AWS EKS 的生产级 Kubernetes 安全与 FinOps 治理平台,整合 Karpenter、Cilium、Gatekeeper、Falco 和 Kubecost 实现纵深防御与实时成本归属。

Stars: 0 | Forks: 0

# EKS Security + FinOps 平台 基于 AWS EKS 的生产级 Kubernetes 成本与安全治理平台。仅使用开源 CNCF 工具,实现深度防御安全与实时成本归属。 ## 技术栈 | 组件 | 版本 | 角色 | |-----------|---------|------| | EKS | 1.31 | 托管 Kubernetes 控制平面 | | Karpenter | 1.1.0 | 节点自动扩缩容与成本优化 | | Cilium | 1.18.6 | eBPF CNI、网络策略、Hubble 可观测性 | | OPA/Gatekeeper | 3.18.0 | 准入控制、策略执行 | | Falco | 0.42.1 | 运行时安全、系统调用监控 | | Kubecost | 2.8.6 | 按命名空间、团队、工作负载进行成本分配 | | Terraform | 1.14+ | 基础设施即代码 | ## 架构 ``` ┌─────────────────────────────────────────────────────────┐ │ AWS Account (us-east-1) │ │ │ │ VPC 10.0.0.0/16 │ │ ├── Public subnets (2 AZs) ← NAT Gateway, ALB │ │ └── Private subnets (2 AZs) ← All EKS nodes │ │ │ │ EKS Cluster (1.31) │ │ ├── Bootstrap nodes (2x t3.medium, fixed) │ │ │ ├── Karpenter controller │ │ │ ├── Gatekeeper (OPA) │ │ │ ├── Kubecost │ │ │ └── Falco (DaemonSet, all nodes) │ │ │ │ │ └── Karpenter nodes (dynamic, on-demand t3.medium/large)│ │ ├── team-frontend namespace │ │ ├── team-backend namespace │ │ └── team-data namespace │ │ │ │ VPC Endpoints: S3, STS, EC2 (no NAT for AWS APIs) │ └─────────────────────────────────────────────────────────┘ ``` ## 安全层 | 层级 | 工具 | 捕获内容 | |-------|------|----------------| | 准入 | Gatekeeper | 无资源限制、latest 镜像标签、特权容器、缺少标签 | | 网络 | Cilium | L7 感知网络策略、东西向流量控制 | | 运行时 | Falco | 容器内启动 Shell、凭据窃取、加密货币挖矿、可疑系统调用 | | 基础设施 | Terraform + IAM | 最小权限 IRSA、KMS 加密、私有端点 | ## FinOps Kubecost 通过命名空间标签(`team`、`cost-center`)提供按命名空间的成本分配。三个团队命名空间(`team-frontend`、`team-backend`、`team-data`)演示了多租户成本归属,并通过每个命名空间的 `ResourceQuota` 和 `LimitRange` 进行强制限制。 ## 前置条件 - 已配置 IAM 用户(最小权限策略)的 AWS CLI - 用于凭证管理的 aws-vault - Terraform 1.10+ - kubectl、helm 3.9+ ## 部署 ``` # Clone git clone https://github.com//eks-security-finops-lab cd eks-security-finops-lab # Bootstrap S3 后端(一次性) aws s3api create-bucket --bucket --region us-east-1 # 部署基础设施 cd terraform/environments/lab terraform init aws-vault exec --no-session -- terraform apply # 配置 kubectl aws eks update-kubeconfig --name eks-security-lab --region us-east-1 # 安装平台组件(按顺序) helm upgrade --install karpenter oci://public.ecr.aws/karpenter/karpenter \ --namespace karpenter --create-namespace \ --version 1.1.0 \ --set settings.clusterName=eks-security-lab \ --set settings.interruptionQueue=eks-security-lab-karpenter helm upgrade --install cilium cilium/cilium \ --namespace kube-system \ --version 1.18.6 helm upgrade --install gatekeeper gatekeeper/gatekeeper \ --namespace gatekeeper-system --create-namespace \ --version 3.18.0 \ --set hostNetwork=true helm upgrade --install falco falcosecurity/falco \ --namespace falco --create-namespace \ --version 0.42.1 helm upgrade --install kubecost oci://public.ecr.aws/kubecost/cost-analyzer \ --namespace kubecost --create-namespace \ --version 2.8.6 # 应用策略和工作负载 kubectl apply -f manifests/namespaces/ kubectl apply -f manifests/gatekeeper/templates/ kubectl apply -f manifests/gatekeeper/constraints/ kubectl apply -f manifests/team-frontend/ kubectl apply -f manifests/team-backend/ kubectl apply -f manifests/team-data/ ``` ## 仓库结构 ``` . ├── terraform/ │ ├── environments/ │ │ └── lab/ │ │ ├── backend.tf # S3 state, native locking │ │ ├── main.tf # Module composition │ │ ├── variables.tf │ │ └── terraform.tfvars │ └── modules/ │ ├── vpc/ # VPC, subnets, NAT, VPC endpoints │ ├── eks/ # EKS cluster, addons, IRSA roles, SGs │ └── karpenter/ # Karpenter IAM, SQS, OIDC, EC2NodeClass ├── manifests/ │ ├── namespaces/ # Namespaces, ResourceQuota, LimitRange │ ├── gatekeeper/ │ │ ├── templates/ # ConstraintTemplates (Rego policies) │ │ └── constraints/ # Constraint instances │ ├── falco/ # Custom Falco rules ConfigMap │ ├── team-frontend/ # Sample workload (intentional violations) │ ├── team-backend/ # Sample workload (intentional violations) │ └── team-data/ # Sample workload (intentional violations) └── docs/ ├── kubecost.md # Kubecost install guide ├── architecture-decisions.md # ADRs └── runbook.md # Operational procedures ``` ## 关键设计决策 **选择 Karpenter 而非 Cluster Autoscaler** — Karpenter 直接通过 EC2 API 预置节点,支持装箱、Spot 实例和节点整合。而 Cluster Autoscaler 仅扩展节点组。 **Cilium 链式模式** — VPC CNI 处理 ENI IP 分配(原生 AWS 路由,无 Overlay 开销)。Cilium 在此基础上添加 eBPF 网络策略和 Hubble 可观测性,而无需替换 IP 管理。 **Gatekeeper 使用 hostNetwork** — Gatekeeper 的审计控制器会监听 Gatekeeper 自有的 API 组(status.gatekeeper.sh、config.gatekeeper.sh),这些 API 组由 Gatekeeper 自身提供服务。如果不使用 hostNetwork,监听循环会通过 Pod 网络导致循环超时。hostNetwork 绕过了 Cilium,并通过节点的主安全组直接访问 API server。 **针对 STS 和 EC2 的 VPC 端点** — IRSA 要求 Pod 调用 `sts.amazonaws.com` 以交换投影服务账户 token。没有通往 STS 公有路由的私有子网会导致 IRSA 超时。接口 VPC 端点可在 VPC 内部解决 STS 和 EC2 API 调用,而无需穿越 NAT 网关。 **引导节点组** — 一个固定的双节点托管节点组,用于承载所有与控制平面交互的系统组件(Karpenter、Gatekeeper、Kubecost)。这些节点被标记了 `CriticalAddonsOnly` 污点,并带有 `node-type=bootstrap` 标签。应用工作负载运行在动态预置的 Karpenter 节点上,从而保持系统计算与应用计算之间的清晰分离。 ## 访问仪表板 ``` # Kubecost — 成本分配 kubectl port-forward -n kubecost deployment/kubecost-cost-analyzer 9090 # http://localhost:9090 # Hubble UI — 网络流 kubectl port-forward -n kube-system svc/hubble-ui 12000:80 # http://localhost:12000 # Falco 警报 — 实时流 kubectl logs -n falco -l app.kubernetes.io/name=falco -f ``` ## 许可证 MIT ## 后续步骤 - 运行 `docs/runbook.md` 中的验证流程,以验证策略执行和运行时检测。 - 在 Kubecost 中捕获每个团队命名空间的基线及负载后的成本视图。 - 根据您组织的安全态势审查并调整 Gatekeeper 约束。 - 启用针对 Terraform plan、Kubernetes 清单验证和策略测试的 CI 检查。 ## 注意事项 本实验具有明确的倾向性,旨在演示 EKS 上实用的安全与 FinOps 基础。在生产环境使用之前,请调整实例类型、扩缩容策略和约束,以符合您的工作负载和合规性要求。
标签:AMSI绕过, API集成, AWS, Cilium, CISA项目, CNCF, DevSecOps, Docker镜像, DPI, EC2, ECS, EKS, Falco, FinOps, Hubble, IaC, Karpenter, Kubecost, NPM, OPA, Terraform, Web截图, web渗透, 上游代理, 可观测性, 威胁检测, 子域名字典, 安全, 容器安全, 开源, 成本优化, 成本分析, 提示注入, 敏感词过滤, 策略即代码, 网络策略, 网络调试, 聊天机器人安全, 自动化, 节点自动伸缩, 超时处理, 集群管理, 靶场