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渗透, 上游代理, 可观测性, 威胁检测, 子域名字典, 安全, 容器安全, 开源, 成本优化, 成本分析, 提示注入, 敏感词过滤, 策略即代码, 网络策略, 网络调试, 聊天机器人安全, 自动化, 节点自动伸缩, 超时处理, 集群管理, 靶场