ryuyunseong/aws-secure-service-lab

GitHub: ryuyunseong/aws-secure-service-lab

基于 AWS CDK 和 Python 的云安全架构作品集,通过 IaC 方式设计容器服务安全边界,并在部署前完成安全验证与审批治理。

Stars: 0 | Forks: 0

# AWS 安全服务 Lab 这是一个云安全作品集项目,旨在使用 AWS CDK 和 Python 设计容器服务的安全架构,并确保在实际部署前能够进行安全控制和验证审计。它将 FastAPI 示例服务连接到了 ALB、WAF、ECS Fargate、VPC Endpoints、基于 KMS 的日志存储以及检测服务。 本项目的核心不在于应用程序功能开发,而在于**云基础设施安全设计、IaC 实现、自动化验证和部署审批控制**。示例 API 是一个提供容器状态和健康检查的最小工作负载,并未实际创建任何 AWS 资源。 您可以直接在[作品集摘要](docs/portfolio-summary.md)中查看用于申请的概述。 ## 核心能力 - 基于 AWS CDK Python 的 Infrastructure as Code 设计 - public/private subnet 隔离与基于 VPC Endpoints 的 private egress - 使用 ALB、WAF 和 ECS Fargate 构建的容器服务安全边界 - IAM 角色分离、S3 Public Access Block 和 KMS 加密 - 基于 CloudTrail、VPC Flow Logs、GuardDuty、Security Hub 和 AWS Config 的检测与审计 - 使用 pytest、cdk-nag、Checkov、gitleaks 和模板验证脚本进行安全验证 - 将成本、权限、证书、DNS 和审批人信息分离的部署治理 ## 架构概览 ``` flowchart LR User["사용자"] --> WAF["AWS WAF"] WAF --> ALB["Application Load Balancer
HTTPS secure mode"] ALB --> ECS["ECS Fargate
private subnet"] ECS --> VPCE["VPC Endpoints
ECR / S3 / CloudWatch Logs"] ALB --> ALBLogs["ALB Access Logs
S3"] ECS --> AppLogs["Application Logs
CloudWatch Logs"] CloudTrail["CloudTrail"] --> SecurityLogs["Security Log Bucket
S3 + KMS"] FlowLogs["VPC Flow Logs"] --> SecurityLogs GuardDuty["GuardDuty"] --> SecurityHub["Security Hub"] SecurityHub --> EventBridge["EventBridge"] EventBridge --> FindingLogs["Finding Logs"] ``` 详细设计和安全边界可在[架构文档](docs/architecture.md)中查看。 ## 验证结果 | 验证项目 | 结果 | 确认内容 | | --- | --- | --- | | 单元测试 | PASS | `python -m pytest`, 18 tests passed | | CDK secure mode synth | PASS | 验证 HTTPS listener 和 TLS policy 路径 | | cdk-nag | PASS | 通过 secure mode 静态安全检查 | | Checkov | EXPECTED RESIDUAL | 109 passed, `CKV_AWS_18` 1项为已记录的例外 | | gitleaks | PASS | 未检测到 secret | | 模板验证脚本 | PASS | S3, KMS, CloudTrail, GuardDuty, Security Hub, IAM, logs, endpoints | `CKV_AWS_18` 是为了防止在将 server access logging 再次应用于最终的 S3 access log bucket 时可能出现的递归日志、成本增加和分析噪声而留下的残余风险。判断依据和后续审查条件已记录在[安全控制文档](docs/security-controls.md)中。 ## 实现结构 - 基于 AWS CDK Python 的多 Stack 结构 - FastAPI 示例 API 和 Dockerfile - lab mode 的 HTTP listener 和 secure mode 的基于 ACM 的 HTTPS listener - 从 ALB 安全组到 ECS 安全组仅允许 TCP 8000 路径 - 用于 ECR image pull、S3 image layer 和 CloudWatch Logs 的 VPC Endpoints - 用于 CloudTrail 和 VPC Flow Logs 的 SSE-KMS 安全日志存储桶 - 根据 AWS 服务限制,使用 SSE-S3 的 ALB access log 存储桶 - 基于 GuardDuty、Security Hub、AWS Config 和 EventBridge 的检测流程 - 应用了 AWS Managed Rules 和基于 IP 的 rate limit 的 WAF ## 本地运行准备 创建 Python 虚拟环境并安装依赖项。 ``` python -m venv .venv . .venv/bin/activate python -m pip install -r requirements.txt ``` 如果没有 AWS CDK CLI,请单独安装。 ``` npm install -g aws-cdk ``` 单元测试不需要 AWS credential。`cdk synth` 可以检查特定环境的 context,但未经审批,绝对不应部署实际的 AWS 资源。 ## 本地验证 运行基本验证。 ``` python -m pytest python scripts/generate_report.py cdk synth ``` 如果已安装相关工具,请额外运行安全验证。 ``` cdk synth -c enableCdkNag=true checkov -d cdk.out gitleaks detect --no-git ``` 使用 ACM 证书占位符验证 secure mode。 ``` cdk synth -c certificateArn= checkov -d cdk.out ``` 可以使用以下脚本验证生成的 CloudFormation 模板,而无需调用 AWS API。 ``` bash scripts/verify_s3.sh --template cdk.out/AwsSecureServiceLab-SecurityLogging.template.json bash scripts/verify_kms.sh --template cdk.out/AwsSecureServiceLab-SecurityLogging.template.json bash scripts/verify_cloudtrail.sh --template cdk.out/AwsSecureServiceLab-Detection.template.json bash scripts/verify_guardduty.sh --template cdk.out/AwsSecureServiceLab-Detection.template.json bash scripts/verify_securityhub.sh --template cdk.out/AwsSecureServiceLab-Detection.template.json bash scripts/verify_iam.sh --template cdk.out/AwsSecureServiceLab-App.template.json bash scripts/verify_logs.sh --template cdk.out bash scripts/verify_endpoints.sh --template cdk.out ``` ## CDK context 设置 默认值保守地限制了成本和实际部署的影响。 | Flag | 默认值 | 目的 | | --- | --- | --- | | `environmentName` | `dev` | 区分资源名称和报告环境 | | `enableNatGateway` | `false` | 启用用于 private egress 的 NAT,默认禁用 | | `enableWafLogging` | `false` | 仅在显式设置时生成 WAF logging | | `enableSecurityHubStandards` | `false` | 仅在显式设置时订阅 Security Hub standards | | `enableCdkNag` | `false` | 在 synth 期间运行 cdk-nag | | `retainLogs` | `false` | 设置保留日志资源 | | `logRetentionDays` | `90` | 日志保留和 S3 lifecycle 周期 | | `vpcFlowLogsDestination` | `s3` | VPC Flow Logs 目的地,可选择 `cloudwatch` | | `egressMode` | `endpoints` | 创建 ECR API/Docker、S3、CloudWatch Logs endpoints | | `enableEcsControlPlaneEndpoints` | `false` | 添加 ECS control plane endpoints | | `certificateArn` | empty | 设置 ACM ARN 时启用 secure mode | | `wafRateLimit` | `1000` | 5分钟内基于 IP 的 WAF 请求限制 | 示例: ``` cdk synth -c enableNatGateway=true -c enableWafLogging=true ``` ## 公开与部署边界 - 不包含实际的 AWS account ID、ARN、domain、profile 或 secret。 - 不生成、存储或输出任何 AWS credential。 - 未执行实际的 AWS 部署。 - 在部署批准前,不执行 `cdk bootstrap`、`cdk diff`、`cdk deploy` 和 `cdk destroy`。 - S3 log bucket 使用 Public Access Block。 - 不创建 SSH 或 RDP ingress rule。 - 不允许 IAM wildcard action。如果是由于 AWS 限制而需要 wildcard resource 的情况,会在[安全控制文档](docs/security-controls.md)中留下相关依据。 - lab mode 的 HTTP listener 仅供本地合成。部署审查的对象是设置了 `certificateArn` 的 secure mode。 - 在实际部署前,必须确定 account、Region、Profile/Role、ACM certificate ARN、domain、DNS provider、成本负责人和部署审批人。 ## 主要文档 - [作品集摘要](docs/portfolio-summary.md) - [架构](docs/architecture.md) - [威胁模型](docs/threat-model.md) - [安全控制](docs/security-controls.md) - [验证指南](docs/verification-guide.md) - [部署前检查清单](docs/pre-deployment-checklist.md) - [egress 设计](docs/egress-design.md) - [部署审批摘要](docs/deployment-approval-summary.md) - [运行时部署审批包](docs/runtime-deployment-approval.md) - [部署前 dry-run 程序](docs/pre-deployment-dry-run.md) - [dry-run 验证证据](docs/dry-run-evidence.md) - [审查摘要](docs/review-summary.md) - [最终报告](docs/final-report.md)
标签:AWS CDK, DevSecOps, 上游代理, 云原生架构, 安全合规, 安全规则引擎, 网络代理, 请求拦截, 逆向工具