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#

  1. 在 Route 53 创建测试 ALB 的 HTTPS 健康检查,使用独立、可观测的 /health/business 路径;确认域名、SNI、端口与预期响应。
  2. 该路径反映核心依赖状态,但不执行真实下单;正常情况下检查结果应为 healthy。
  3. 记录 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、日志和业务基线。

  1. 查看 WebACL 是否已经由迁移流程添加 AWSManagedRulesAntiDDoSRuleSet,避免重复配置。
  2. 在测试 WebACL 中添加或调整该组,先 Count;确认使用的入口和客户端受支持。
  3. 浏览器路径按需要启用 Challenge;Webhook、移动端和机器 API 按支持情况配置排除或 Block,不强制依赖浏览器验证。
  4. 观察新规则标签和 WAF 指标;逐步启用缓解动作,将控制台变更回写 IaC。
  5. 对旧式自动缓解按 迁移说明完成转换,确认当前保护仍有效。

不要通过普通 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. 应急桌面演练#

  1. 模拟 DDoSDetected 和业务延迟同时告警,值班员确认目标账号、Region、资源与业务影响。
  2. 判断网络层/应用层;查看 Shield Events、WAF 日志、ALB 与容量指标。
  3. 检查是否存在源站绕过或误报;临时规则先小范围验证,记录过期时间和撤销责任人。
  4. 符合升级条件时由授权人员联系 SRT,提供时间线、资源 ARN、症状和已采取措施。
  5. 恢复后核对业务、费用和规则,移除临时防护并复盘。

如确需真实 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 订阅,退订/关闭自动续订按合同与控制台流程处理。

搜索文档

输入关键词,搜索所有文档。

↑ ↓ 选择 · Enter 打开 · Esc 关闭