引言
在现代网络环境中,Web应用面临着日益严重的网络威胁。为了确保Web 应用程序的可用性和安全性,AWS 提供了一整套解决方案,包括AWS Shield Advanced。 Shield Advanced 是一项托管DDoS 防护服务,旨在保护您的应用程序免受网络攻击。
本文介绍了如何使用适用于Python 的AWS 开发工具包(Boto3),并提供了一些自动开发和使用AWS Shield Advanced 服务的实用技巧,特别是保护应用程序负载均衡器(ALB) 免受DDoS 攻击。
1. 为什么选择开发 Shield 防护 ALB?
1.1 网络攻击的威胁
网络攻击已成为日常业务的一部分,不容忽视。 DDoS(分布式拒绝服务)攻击是一种利用多个计算机系统对目标系统发起攻击,使其无法提供正常服务的网络攻击。这些攻击可能导致系统故障、服务不可用和数据泄露。
1.2 AWS Shield Advanced 的优势
AWS Shield Advanced 是AWS 提供的全面DDoS 防护服务,具有以下优势:
凭借全球网络规模, Shield Advanced利用AWS全球基础设施,在全球多个区域提供高效的DDoS防护服务。实时监控和威胁情报: Shield Advanced 提供实时网络流量监控,并集成AWS 威胁情报服务,以快速响应新兴网络威胁。自动防御机制: Shield Advanced 不仅可以检测DDoS 攻击,还可以自动采取必要的防御措施来维持应用程序的高可用性。
2. 开发 Shield 防护 ALB 的脚本示例
下面是一组使用Boto3(适用于Python 的AWS 开发工具包)编写的示例脚本,用于自动添加和删除受AWS Shield 保护的ALB。
2.1 批量添加 Shield 防护
笔记:
AWS Shield Advanced 功能已在该区域开启
新保护返回状态200。如果为空,则表示作者已受到保护。如果没有,请自行更改。
登录后复制
导入boto3
从日期和时间导入日期和时间
def get_load_balancer_arns():
elbv2=boto3.client(\’elbv2\’, 区域名称=\’us-east-1\’)
响应=elbv2.describe_load_balancers()
load_balancer_arns=[lb[\’LoadBalancerArn\’] for lb in response[\’LoadBalancers\’] if
lb[\’Type\’]==\’Application\’ 而不是lb[\’Scheme\’]==\’internal\’ 和lb[
[\’in-hk-test-alb\’、\’CL-Pr-LoadB-26SNF9ERPK26\’]] 中缺少\’LoadBalancerName\’]
返回load_balancer_arns
def create_cloudwatch_alarm(警报名称, 负载均衡器名称):
Cloudwatch=boto3.client(\’cloudwatch\’,region_name=\’us-east-1\’)
响应=Cloudwatch.put_metric_alarm(
报警名称=报警名称,
MetricName=\’目标响应时间\’,
命名空间=\’AWS/应用程序ELB\’,
统计=\’平均\’,
尺寸=[
{
\’名称\’: \’负载均衡器\’,
\’value\’ : 负载均衡器名称
},
],
周期=60,
评估期=20,
报警数据点=1,
阈值=5.0,
ComparisonOperator=\’GreaterThanOrEqualToThreshold\’,
TreatMissingData=\’notBreaching\’, #notBreaching 不会生成丢失数据警报。
单位=\’秒\’
)
def create_route53_health_check(警报名称):
Route53=boto3.client(\’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}\’
},
\’数据健康状态不足\’: \’最后已知状态\’
}
)
health_check_arn=响应[\’HealthCheck\’][\’Id\’]
返回health_check_arn
def Shield_is_alb_protected(alb_arn):
屏蔽=boto3.client(\’屏蔽\’)
受保护资源=[]
响应=Shield.list_protections(MaxResults=100)
protected_resources.extend([protection[\’ResourceArn\’] 用于响应[\’Protections\’]] 中的保护)
而“NextToken”响应:
响应=Shield.list_protections(MaxResults=100, NextToken=response[\’NextToken\’])
protected_resources.extend([protection[\’ResourceArn\’] 用于响应[\’Protections\’]] 中的保护)
返回protected_resources 的alb_arn
def create_shield_protection(alb_arn,protection_name):
屏蔽=boto3.client(\’屏蔽\’)
响应=Shield.create_protection(
名称=受保护的名称,
资源Arn=alb_arn
)
返回响应
def Protection_alb(alb_arn):
受保护的名称=alb_arn.split(\’/\’)[-1]
响应=create_shield_protection(alb_arn, 保护名称)
Protection_id=响应[\’保护ID\’]
返回protection_id
def Associate_health_check(health_check_arn,protection_id):
屏蔽=boto3.client(\’屏蔽\’)
响应=Shield.associate_health_check(
ProtectionId=protection_id,
HealthCheckArn=health_check_arn
)
返回响应
def enable_shield_automatic_response(resource_arn,操作):
屏蔽=boto3.client(\’屏蔽\’)
响应=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
警报名称=f\’TargetResponseTime-{alb_arn.split(\’/\’)[-1]}\’
负载均衡器名称=\’/\’.join(alb_arn.split(\’/\’)[+1:])
is_protected=is_alb_protected(alb_arn)
否则is_protected:
create_cloudwatch_alarm(警报名称,负载均衡器名称)
health_check_id=create_route53_health_check(警报名称)
保护_id=保护_alb(alb_arn)
health_check_arn=\’arn:aws:route53:healthcheck/\’ + health_check_id
响应=Associate_health_check(health_check_arn,protection_id)
动作=\’计数\’
响应=Enable_shield_automatic_response(alb_arn, 操作)
打印(响应[\’ResponseMetadata\’][\’HTTPStatusCode\’])
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。
此代码用于批量检查ALB 是否受AWS Shield 保护。如果未受保护,则会创建CloudWatch 警报、Route 53 运行状况检查和屏蔽保护,以确保您的ALB 受到DDoS 攻击时得到及时保护。
2.2 批量移除 Shield 防护
登录后复制
导入boto3
def get_load_balancer_arns():
elbv2=boto3.client(\’elbv2\’, 区域名称=\’us-east-1\’)
响应=elbv2.describe_load_balancers()
load_balancer_arns=[lb[\’LoadBalancerArn\’] for lb in response[\’LoadBalancers\’] if
lb[\’Type\’]==\’Application\’ 而不是lb[\’Scheme\’]==\’internal\’ 和lb[
[\’in-hk-test-alb\’、\’CL-Pr-LoadB-26SNF9ERPK26\’]] 中缺少\’LoadBalancerName\’]
返回load_balancer_arns
def description_shield_protection(resource_arn):
屏蔽=boto3.client(\’屏蔽\’)
响应=Shield.describe_protection(
ResourceArn=resource_arn
)
返回响应
def delete_protection(protection_id):
屏蔽=boto3.client(\’屏蔽\’)
响应=Shield.delete_protection(ProtectionId=f\'{protection_id}\’)
返回响应
def delete_health_check(health_check_id):
Route53=boto3.client(\’route53\’)
响应=Route53.delete_health_check(
HealthCheckId=health_check_id
)
返回响应
def delete_alarms(警报名称):
Cloudwatch=boto3.client(\’cloudwatch\’)
响应=Cloudwatch.delete_alarms(
警报名称=[
f\'{警报名称}\’,
]
)
返回响应
def is_alb_protected(alb_arn):
屏蔽=boto3.client(\’屏蔽\’)
响应=Shield.list_protections()
protected_resources=[保护[\’ResourceArn\’] 保护[\’保护\’]] 响应
返回受保护资源的alb_arn
如何使用
load_balancer_arns=get_load_balancer_arns()
对于load_balancer_arns: 中的resources_arn
is_protected=is_alb_protected(resource_arn)
对于is_protected:
警报名称=f\’TargetResponseTime-{resource_arn.split(\’/\’)[-1]}\’
响应=描述_屏蔽_保护(resource_arn)
Protection_id=响应[\’保护\’][\’ID\’]
health_check_id=响应[\’保护\’][\’HealthCheckIds\’][0]
删除_保护(保护id)
删除健康检查(健康检查ID)
delete_alarms(警报名称)
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。
此代码用于批量检查ALB 是否受AWS Shield 保护。如果已受到保护,则会检索保护详细信息,并通过AWS 开发工具包删除Shield 保护,并删除关联的CloudWatch 警报和Route 53 运行状况检查。
3. 结语
AWS Shield Advanced 提供了强大的解决方案,可确保您的Web 应用程序免受不断变化的网络威胁。使用Boto3 编写脚本使您可以轻松地将Shield 保护集成到自动化工作流程中,从而提高整个应用程序架构的安全性和可用性。在日益复杂的网络环境中,采取主动措施来保护您的应用程序非常重要,而AWS Shield Advanced 是一个可靠的选择。
我们希望这些脚本和示例可以帮助您更好地了解和使用AWS Shield 保护服务来提高Web 应用程序的安全性。
#AWS Shield Advanced 防护以上ALB开发和使用相关内容来源仅供参考。相关信息请参见官方公告。
原创文章,作者:CSDN,如若转载,请注明出处:https://www.sudun.com/ask/92583.html