背景
AWS Shield Advanced 是Amazon Web Services (AWS) 提供的一项高级分布式拒绝服务(DDoS) 保护服务,旨在帮助用户保护其AWS 基础设施免受DDoS 攻击。本文深入探讨了AWS Shield Advanced 的功能和需求,并介绍了开发和实施AWS Shield Advanced 以批量添加ALB 保护的优势。
AWS Shield Advanced的功能和必要性
DDoS 防护:AWS Shield Advanced 可以检测并缓解多种类型的DDoS 攻击,包括网络层攻击、应用程序层攻击和协议层攻击。通过机器学习和实时流量分析,我们识别并过滤恶意流量,确保正常流量能够正常访问您的应用程序。自动防护:提供自动化DDoS 防护,无需用户干预。自动检测和缓解攻击,并在攻击发生时自动启动防护措施,快速响应攻击,减少攻击对您应用的影响。实时监控和警报:AWS Shield Advanced 提供实时监控和警报功能,帮助用户及时了解攻击情况。它不仅提供有关攻击类型、攻击流量和攻击源的详细信息,还提供实时警报通知,以便用户快速采取措施应对攻击。高可用性:基于AWS 全球基础设施构建,具有高可用性和弹性。能够保护世界各地的应用程序免受DDoS 攻击并确保应用程序的可用性和性能。
开发AWS Shield Advanced批量添加ALB防护的好处
简化管理:批量添加ALB保护,简化管理流程,可同时保护多个ALB,节省时间和精力,提高管理效率。统一保护策略:通过批量添加ALB保护功能,用户可以对多个ALB应用相同的保护策略,保证保护级别一致,简化策略管理。快速响应:批量添加ALB防护,快速响应潜在的DDoS攻击。一旦检测到攻击,用户可以立即对所有受影响的ALB启用保护,以减轻攻击造成的损害。
前提条件
首先,确保us-east-1安装区安装了AWS Shield Advanced功能,并设置了本地开发环境访问密钥和密钥。
实现方式
下面是使用Python 和Boto3 库实现的示例代码。
登录后复制
## 开发环境
Python 3.8.2
## 安装依赖包
pip install boto3==1.26.105
## 用户权限
用户需要以下权限:
“`json
{
\’版本\’: \’2012-10-17\’,
\’声明\’: [
{
\’Sid\’: \’可视化编辑器0\’,
\’效果\’: \’允许\’,
\’行动\’: [
\’wafv2:WebACL资源列表\’,
\’cloudwatch:PutMetricAlarm\’,
\’shield:AssociateHealthCheck\’,
\’elasticloadbalancing: 负载均衡器描述\’,
\’wafv2:ListWebACL\’,
\’wafv2:AssociateWebACL\’,
\’创建route53:健康检查\’,
\’创建shield:保护\’,
\’shield:启用应用层自动响应\’,
\’shield:ListProtections\’,
\’apigateway:SetWebACL\’,
\’apigateway:GET\’,
\’iam:GetRole\’,
“elasticloadbalancing:SetWebACL”
],
“资源”:“*”
}
]
}
””
## Shield批量添加ALB保护
主要目的是向提供外部服务的ALB 添加Shield,并添加返回状态200 的保护。空白表示受保护。
““ Python
import boto3 # 导入boto3 库以与AWS 服务交互
from datetime import datetime # 导入datetime模块用于获取当前时间
def get_load_balancer_arns():
elbv2=boto3.client(\’elbv2\’,region_name=\’us-east-1\’) # 创建elbv2客户端对象
response=elbv2.describe_load_balancers() # 调用description_load_balancers方法获取负载均衡器信息
load_balancer_arns=[lb[\’LoadBalancerArn\’] for lb in response[\’LoadBalancers\’] if
lb[\’Type\’]==\’application\’ 而不是lb[\’Scheme\’]==\’internal\’] # 提取满足条件的负载均衡器ARN
返回load_balancer_arns
def create_cloudwatch_alarm(警报名称, 负载均衡器名称):
Cloudwatch=boto3.client(\’cloudwatch\’,region_name=\’us-east-1\’) # 创建Cloudwatch 客户端对象
响应=Cloudwatch.put_metric_alarm(
报警名称=报警名称,
MetricName=\’目标响应时间\’,
命名空间=\’AWS/应用程序ELB\’,
统计=\’平均\’,
尺寸=[
{
\’名称\’: \’负载均衡器\’,
\’value\’ : 负载均衡器名称
},
],
周期=60,
评估期=20,
报警数据点=1,
阈值=5.0,
ComparisonOperator=\’GreaterThanOrEqualToThreshold\’,
TreatMissingData=\’notBreaching\’, # notBreaching 数据丢失不报警。
单位=\’秒\’
) # 调用put_metric_alarm方法创建云监控报警
def create_route53_health_check(警报名称):
Route53=boto3.client(\’route53\’) # 创建Route53客户端对象
current_time=datetime.now().strftime(\’%Y-%m-%d-%H:%M:%S\’) # 获取当前时间
响应=Route53.create_health_check(
CallerReference=f\'{current_time}\’,
健康检查配置={
\’类型\’: \’CLOUDWATCH_METRIC\’,
‘反转’: 错误,
“已禁用”: 错误,
\’警报标识符\’: {
\’地区\’: \’us-east-1\’,
\’名称\’: f\'{alarm_name}\’
},
\’数据健康状态不足\’: \’最后已知状态\’
}
) # 通过调用create_health_check方法创建Route53健康检查
health_check_arn=response[\’HealthCheck\’][\’Id\’] # 提取健康检查ARN
返回health_check_arn
def is_alb_protected(alb_arn):
Shield=boto3.client(\’shield\’) # 创建shield客户端对象
response=Shield.list_protections() # 调用list_protections方法获取受保护资源信息
protected_resources=[protection[\’ResourceArn\’] for protected in response[\’Protections\’]] # 提取受保护资源的ARN
return alb_arn in protected_resources # 确定负载均衡器是否位于受保护资源中
def create_shield_protection(alb_arn,protection_name):
Shield=boto3.client(\’shield\’) # 创建shield客户端对象
响应=Shield.create_protection(
名称=受保护的名称,
资源Arn=alb_arn
) # 通过调用create_protection方法创建屏蔽保护
返回响应
def Protection_alb(alb_arn):
Protection_name=alb_arn.split(\’/\’)[-1] # 提取负载均衡器名称
response=create_shield_protection(alb_arn, Protection_name) # 通过调用create_shield_protection方法创建屏蔽保护
Protection_id=response[\’ProtectionId\’] # 提取保护ID
返回protection_id
def Associate_health_check(health_check_arn,protection_id):
Shield=boto3.client(\’shield\’) # 创建shield客户端对象
响应=Shield.associate_health_check(
ProtectionId=protection_id,
HealthCheckArn=health_check_arn
) # 调用assign_health_check方法将健康检查与保护关联起来
返回响应
def enable_shield_automatic_response(resource_arn,操作):
Shield=boto3.client(\’shield\’) # 创建shield客户端对象
响应=Shield.enable_application_layer_automatic_response(ResourceArn=resource_arn, Action={f\'{action}\’: {}})
返回响应
# 使用示例
# 检查ALB是否受到保护
load_balancer_arns=get_load_balancer_arns()
对于load_balancer_arns: 中的alb_arn
Alarm_name=f\’TargetResponseTime-{alb_arn.split(\’/\’)[-1]}\’ # 根据ARN生成警报名称
load_balancer_name=\’/\’.join(alb_arn.split(\’/\’)[+1:]) # 提取负载均衡器名称
is_protected=is_alb_protected(alb_arn) # 确定负载均衡器是否受到保护
否则is_protected:
create_cloudwatch_alarm(alarm_name,load_balancer_name) # 创建云手表报警
health_check_id=create_route53_health_check(alarm_name) # 创建Route53 健康检查
Protection_id=protected_alb(alb_arn) # 创建屏蔽保护
health_check_arn=\’arn:aws:route53:healthcheck/\’ + health_check_id # 构建运行状况检查ARN
response=allocate_health_check(health_check_arn, Protection_id) #关联健康检查和保护
动作=\’计数\’
response=enable_shield_automatic_response(alb_arn, action) # 启用自动屏蔽响应
print(response[\’ResponseMetadata\’][\’HTTPStatusCode\’]) # 打印响应状态代码
””
## Shield批量去除ALB保护
当使用管理员删除权限时,下面详述的权限将返回状态200。空格表示没有删除。
““ Python
import boto3 #导入boto3库
def get_load_balancer_arns(): # 定义一个函数来获取负载均衡器的ARN
elbv2=boto3.client(\’elbv2\’,region_name=\’us-east-1\’) # 创建elbv2客户端对象
response=elbv2.describe_load_balancers() # 调用description_load_balancers方法获取负载均衡器信息
load_balancer_arns=[lb[\’LoadBalancerArn\’] for lb in response[\’LoadBalancers\’] if
lb[\’Type\’]==\’application\’ 而不是lb[\’Scheme\’]==\’internal\’] # 提取满足条件的负载均衡器ARN
return load_balancer_arns # 返回负载均衡器ARN列表
def description_shield_protection(resource_arn): # 定义一个函数来描述屏蔽保护
Shield=boto3.client(\’shield\’) # 创建shield客户端对象
响应=Shield.describe_protection(
ResourceArn=resource_arn
) # 调用description_protection方法获取资源的屏蔽保护信息
返回响应# 返回屏蔽保护信息
def delete_protection(protection_id): # 定义删除屏蔽保护的函数
Shield=boto3.client(\’shield\’) # 创建shield客户端对象
response=shield.delete_protection(ProtectionId=f\'{protection_id}\’) # 调用delete_protection方法删除指定的屏蔽保护
return response # 返回删除结果
def delete_health_check(health_check_id): # 定义删除健康检查的函数
Route53=boto3.client(\’route53\’) # 创建Route53客户端对象
响应=Route53.delete_health_check(
HealthCheckId=health_check_id
) # 调用delete_health_check方法删除指定的健康检查
return response # 返回删除结果
def delete_alarms(alarm_name): # 定义删除闹钟的函数
Cloudwatch=boto3.client(\’cloudwatch\’) # 创建Cloudwatch 客户端对象
响应=Cloudwatch.delete_alarms(
警报名称=[
f\'{警报名称}\’,
]
) # 调用delete_alarms方法删除指定的闹钟
return response # 返回删除结果
def is_alb_protected(alb_arn): # 定义一个函数来确定负载均衡器是否受到屏蔽保护
Shield=boto3.client(\’shield\’) # 创建shield客户端对象
response=Shield.list_protections() # 调用list_protections方法获取所有Shield防护信息
protected_resources=[protection[\’ResourceArn\’] for protected in response[\’Protections\’]] # 提取受Shield 保护的所有资源ARN
return alb_arn in protected_resources # 返回负载均衡器ARN 是否在Shield 保护的资源列表中
# 使用示例
load_balancer_arns=get_load_balancer_arns() # 获取负载均衡器ARN列表
for resource_arn in load_balancer_arns: # 遍历负载均衡器ARN列表
is_protected=is_alb_protected(resource_arn) # 确定负载均衡器是否受到屏蔽保护
if is_protected: # 如果受保护
Alarm_name=f\’TargetResponseTime-{resource_arn.split(\’/\’)[-1]}\’ # 根据ARN生成警报名称
response=description_shield_protection(resource_arn) # 获取屏蔽保护信息
Protection_id=response[\’Protection\’][\’Id\’] # 获取屏蔽保护ID
health_check_id=response[\’Protection\’][\’HealthCheckIds\’][0] # 获取健康检查ID
delete_protection(protection_id) # 删除屏蔽保护
delete_health_check(health_check_id) # 删除健康检查
delete_alarms(alarm_name) # 删除警报
””
1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.34.35.36.37.38.39.40.41.42.43.4 4.45.46.47.48.49.50 51.52.53.54.55.56.57.58.59.60.61.62.63.64.65.66.67.68.69.70.71.72.73.74.75.76.77.78.79.80.81.82.83.84.85.86.87.88.89.90。 9 1.92.93.94.95.96.97.98。 99.100.101.102.103.104.105.106.107.108.109.110.111.112.113.114.115.116.117.118.119.120.121.122.123.124.125.126.127.128.12 9.130.1 31.132.133.134.135.136.137.138.139.140.141.142.143.144.145.146。 147.148.149.150.151.152.153.154.155.156.157.158.159.160.161.162.163.164.165.166.167.168.169.170.171.172.173.174.175.176.1 77.178。 179.180.1 81.182.183.184.185.186.187.188.189.190.191.192.193.194.195.196。 197.198.199.200.201.202.203.204.205.206.207.208.209。
结论
AWS Shield Advanced 提供强大的DDoS 防护功能,并为ALB 防护开发集中管理功能。
以进一步简化管理过程,提供快速响应和统一的防护策略。这些功能和好处使得AWS Shield Advanced成为保护AWS基础架构免受DDoS攻击的重要工具。
安全和运维经验为本文提供了深刻的见解,希望读者能够根据文中的指导,更好地利用AWS Shield Advanced保护其应用程序。
#以上关于AWS Shield Advanced:批量管理ALB防护的最佳实践的相关内容来源网络仅供参考,相关信息请以官方公告为准!
原创文章,作者:CSDN,如若转载,请注明出处:https://www.sudun.com/ask/92588.html