AWS Shield Hands-on
验证:未记录
- 适用版本
- 未记录
- 验证范围
- 尚未登记验证记录。
本文缩写(英文全称与中文含义)
| 缩写 | 英文全称/名称 | 中文含义 |
|---|---|---|
| ALB | Application Load Balancer | 应用负载均衡器 |
| API | Application Programming Interface | 应用程序编程接口 |
| ARN | Amazon Resource Name | AWS 资源名称,用于唯一标识资源 |
| AWS | Amazon Web Services | 亚马逊云服务 |
| CLI | Command-Line Interface | 命令行接口 |
| DDoS | Distributed Denial of Service | 分布式拒绝服务攻击 |
| EC2 | Elastic Compute Cloud | AWS 云服务器服务 |
| EIP | Elastic IP address | AWS 弹性公网 IP 地址 |
| HTTPS | Hypertext Transfer Protocol Secure | 使用 TLS 加密的 HTTP |
| IaC | Infrastructure as Code | 基础设施即代码 |
| ID | Identifier | 标识符 |
| NLB | Network Load Balancer | 网络负载均衡器 |
| OU | Organizational Unit | 组织单元 |
| SNI | Server Name Indication | TLS 服务器名称指示 |
| SNS | Simple Notification Service | AWS 消息通知服务 |
| SRT | Shield Response Team | AWS Shield 响应团队 |
| WAF | Web Application Firewall | Web 应用防火墙 |
1. 前提#
Standard 默认启用,无需调用订阅 API。以下实验针对已有有效 Shield Advanced 订阅的专用测试 ALB,使用 AWS CLI v2、Bash 和明确的实验角色。
若尚未订阅,先在 Shield 控制台审阅一年承诺、价格和支持计划,再由组织采购/安全流程决定是否订阅。本文不把 create-subscription 放入可直接执行的实验命令,避免将订阅误当作免费初始化。
export AWS_PROFILE=lab
export SHIELD_LAB_REGION=ap-southeast-1
export SHIELD_API_REGION=us-east-1
export SHIELD_LAB_ALB_ARN='arn:aws:elasticloadbalancing:ap-southeast-1:123456789012:loadbalancer/app/lab/REPLACE_ME'
aws sts get-caller-identity
aws shield describe-subscription --region "$SHIELD_API_REGION"
aws shield list-protections --region "$SHIELD_API_REGION"订阅不存在或账户不匹配时停止后续步骤。检查测试 ALB 是否已有 protection,避免重复创建或误清理既有保护。
2. 注册测试保护#
export SHIELD_LAB_PROTECTION_ID=$(aws shield create-protection --name shield-alb-lab --resource-arn "$SHIELD_LAB_ALB_ARN" --region "$SHIELD_API_REGION" --query ProtectionId --output text)
aws shield describe-protection --protection-id "$SHIELD_LAB_PROTECTION_ID" --region "$SHIELD_API_REGION"验收:资源 ARN 正确,protection 出现在控制台。Shield API 管理端点和目标 ALB 的 Region 是两个概念,指标仍按受保护资源类型选择 Region。
其他资源使用对应 ARN:CloudFront distribution、Route 53 hosted zone、Global Accelerator standard accelerator;EC2/NLB 使用 EIP allocation ARN。先核对 支持资源,不要直接替换为任意服务 ARN。
3. 关联健康检查与 SRT#
- 在 Route 53 创建测试 ALB 的 HTTPS 健康检查,使用独立、可观测的
/health/business路径;确认域名、SNI、端口与预期响应。 - 该路径反映核心依赖状态,但不执行真实下单;正常情况下检查结果应为 healthy。
- 记录 ID,并关联到 protection。
export SHIELD_LAB_HEALTHCHECK_ID='REPLACE_WITH_ROUTE53_HEALTHCHECK_ID'
aws shield associate-health-check --protection-id "$SHIELD_LAB_PROTECTION_ID" --health-check-arn "arn:aws:route53:::healthcheck/$SHIELD_LAB_HEALTHCHECK_ID" --region "$SHIELD_API_REGION"
aws shield describe-protection --protection-id "$SHIELD_LAB_PROTECTION_ID" --region "$SHIELD_API_REGION"如需 SRT:在控制台按向导配置服务团队访问角色/所需授权、应急联系人和 proactive engagement;验证支持计划符合资格。只关联 health check 不会自动完成这些步骤。
测试健康检查可以临时让测试路径返回失败再恢复,观察 Route 53 告警;这验证健康检查链路,不会证明 DDoS 检测已触发,也不应冒充真实攻击请求 SRT 响应。
4. 应用层防护#
先完成 WAF hands-on,确保 ALB 已有关联的 WAFv2 WebACL、日志和业务基线。
- 查看 WebACL 是否已经由迁移流程添加
AWSManagedRulesAntiDDoSRuleSet,避免重复配置。 - 在测试 WebACL 中添加或调整该组,先 Count;确认使用的入口和客户端受支持。
- 浏览器路径按需要启用 Challenge;Webhook、移动端和机器 API 按支持情况配置排除或 Block,不强制依赖浏览器验证。
- 观察新规则标签和 WAF 指标;逐步启用缓解动作,将控制台变更回写 IaC。
- 对旧式自动缓解按 迁移说明完成转换,确认当前保护仍有效。
不要通过普通 curl 突发请求验证 Shield DDoS 防护有效性。请求阻断实验验证的是 WAF 规则,不是 Shield 检测和清洗能力。
5. 配置检测告警#
先在 ALB 所在 Region 查看实际指标和维度:
aws cloudwatch list-metrics --namespace AWS/DDoSProtection --metric-name DDoSDetected --dimensions Name=ResourceArn,Value="$SHIELD_LAB_ALB_ARN" --region "$SHIELD_LAB_REGION"新保护或非事件期指标可能尚未出现。下面为测试 ALB 建立告警;SNS topic 应提前建立并确认订阅,填写同 Region ARN。
export SHIELD_LAB_SNS_ARN='arn:aws:sns:ap-southeast-1:123456789012:security-lab'
aws cloudwatch put-metric-alarm --alarm-name shield-alb-lab-ddos --namespace AWS/DDoSProtection --metric-name DDoSDetected --dimensions Name=ResourceArn,Value="$SHIELD_LAB_ALB_ARN" --statistic Maximum --period 60 --evaluation-periods 1 --threshold 0 --comparison-operator GreaterThanThreshold --treat-missing-data notBreaching --alarm-actions "$SHIELD_LAB_SNS_ARN" --region "$SHIELD_LAB_REGION"notBreaching 用于处理 Shield 非事件期稀疏数据;另外配置独立业务可用性告警,避免监控失联被视为服务健康。
通过测试告警状态验证 SNS 通知链路,提前通知接收人:
aws cloudwatch set-alarm-state --alarm-name shield-alb-lab-ddos --state-value ALARM --state-reason 'Controlled notification test; not a DDoS event' --region "$SHIELD_LAB_REGION"收到通知后,将测试状态设回 OK,或等待指标评估覆盖。人工设置告警状态只验证通知,不产生 Shield 攻击事件。
6. 其他能力练习#
| 能力 | 操作 | 验收 |
|---|---|---|
| Protection group | 控制台建立只含实验资源的组,选择明确 members 与合适聚合方式 | 成员正确,组指标在 us-east-1 可定位 |
| 事件分析 | Shield Events 中查看已有事件或采用桌面演练记录 | 能解释资源、时间、向量、缓解与业务影响 |
| Proactive engagement | 配置联系人、关联健康检查与 SRT 授权,核对支持资格 | 值班人员知道谁接电话、谁有权修改规则 |
| Cost protection | 以历史/模拟事故整理时间线、资源、事件 ID 和费用变化 | 知道申请入口、资格与期限;不提交虚假赔付申请 |
| Firewall Manager | 实验 OU 建 Shield Advanced policy,核对资源/tag 范围后启用管理 | 新测试资源纳管,例外与漂移可见 |
| Network security director | 管理账号委派成员管理员,仅启用实验账号/Region | 能定位暴露路径并验证整改;清理实验策略 |
Protection group 应只引用已经受保护的资源;Firewall Manager 策略可能让范围内账号产生订阅或保护费用,先确认组织计费安排。
Network security director 仍为预览功能,按 官方启用步骤逐步配置,不直接在全组织范围启用。
7. 应急桌面演练#
- 模拟
DDoSDetected和业务延迟同时告警,值班员确认目标账号、Region、资源与业务影响。 - 判断网络层/应用层;查看 Shield Events、WAF 日志、ALB 与容量指标。
- 检查是否存在源站绕过或误报;临时规则先小范围验证,记录过期时间和撤销责任人。
- 符合升级条件时由授权人员联系 SRT,提供时间线、资源 ARN、症状和已采取措施。
- 恢复后核对业务、费用和规则,移除临时防护并复盘。
如确需真实 DDoS 模拟,另按 AWS 当前测试政策和批准的测试方式执行;本文不包含攻击流量实验。AWS DDoS 测试政策
8. 清理#
只删除本次创建的告警、关联和 protection;保持既有生产保护。若 protection 被实验 group 或 Firewall Manager 管理,先调整管理关系。
aws cloudwatch delete-alarms --alarm-names shield-alb-lab-ddos --region "$SHIELD_LAB_REGION"
aws shield disassociate-health-check --protection-id "$SHIELD_LAB_PROTECTION_ID" --health-check-arn "arn:aws:route53:::healthcheck/$SHIELD_LAB_HEALTHCHECK_ID" --region "$SHIELD_API_REGION"
aws shield delete-protection --protection-id "$SHIELD_LAB_PROTECTION_ID" --region "$SHIELD_API_REGION"专用 Route 53 health check、SNS topic、实验 protection group 和 WAF stack 分别清理;共享资源不删除。删除 protection 不会取消 Shield Advanced 订阅,退订/关闭自动续订按合同与控制台流程处理。