Я пытаюсь создать отчет, в котором, если ip-запрос атаковал сервер более 1000 за одну минуту, это DOS-атака. Aws waf регистрирует логи в s3 и с помощью лямбды мы проверим, пересекает ли определенный ip порог.
import urllib import boto3 import gzip
s3 = boto3.client ('s3')
def lambda_handler (событие, контекст): # Главные переменные конфигурации arguments_limit = 100
# Parsing the required information out of the event structure
bucket_name = event['Records'][0]['s3']['bucket']['name']
file_name = urllib.parse.unquote_plus(event['Records'][0]['s3']['object']['key'])
response = s3.get_object(Bucket=bucket_name, Key=file_name)
target_bucket='blocketrequest'
FILE='Filtered' + file_name
text = response["Body"].read().decode()
e = text.split("\n")
# Parsing IPs out of the access log file
suspicious_ips = {}
for each in e:
try:
loaded_data = json.loads(each)
ip = loaded_data['httpRequest']['clientIp']
if ip in suspicious_ips.keys():
suspicious_ips[ip] += 1
else:
suspicious_ips[ip] = 1
except Exception as err:
print(f"Problem with line:{str(err)}")
break
# Filtering IPs that exceeded the limit and preparing inserts to WAF
updates_list = []
for ip in suspicious_ips.keys():
if suspicious_ips[ip] < requests_limit:
continue
updates_list.append({
'Action': 'INSERT',
'IPSetDescriptor': {
'Type': 'IPV4',
'Value': "%s/32"%ip
}
})
# Exit if there are no malicious IPs
if updates_list == []:
return
s3.put_object(Body=updates_list,Bucket=target_bucket,Key=FILE)
print('transferred')
В этом коде я получаю сообщение об ошибке Intendention в строке 44, может какая-то помощь