Это мой фрагмент кода, который я использую:
import boto3
ip_check_list = [
"1.2.3.4/32",
"5.6.7.8/32",
]
for region in ['us-east-1']:
client = boto3.client('ec2',region_name=region)
paginator = client.get_paginator('describe_security_groups')
page_iterator = paginator.paginate()
for page in page_iterator:
for sg in page['SecurityGroups']:
for lb in sg['IpPermissions']:
for ip in lb['IpRanges']:
from_port = lb.get('FromPort')
to_port = lb.get('ToPort')
ip_proto=lb['IpProtocol']
if sg['GroupId'] == 'sg-12345' and ip['CidrIp'] in ip_check_list:
try:
if from_port:
response = client.revoke_security_group_ingress (
GroupId=sg['GroupId'],
IpPermissions=[
{
'FromPort': from_port,
'ToPort': to_port,
'IpProtocol': ip_proto,
'IpRanges': [
{
'CidrIp': ip['CidrIp']
}
]
}
]
)
else:
response = client.revoke_security_group_ingress (
GroupId=sg['GroupId'],
IpPermissions=[
{
'IpProtocol': ip_proto,
'IpRanges': [
{
'CidrIp': ip['CidrIp']
}
]
}
]
)
except Exception as e:
print e
print sg['GroupId']
Однако я получаю следующую ошибку:
An error occurred (InvalidParameterValue) when calling the RevokeSecurityGroupIngress operation: Invalid value 'Must specify both from and to ports with TCP/UDP.' for portRange.
Правило SG, о котором идет речь:
"IpPermissions": [
{
"PrefixListIds": [],
"FromPort": 0,
"IpRanges": [
{
"CidrIp": "1.2.3.4/32"
}
],
"ToPort": 65535,
"IpProtocol": "tcp",
"UserIdGroupPairs": [],
"Ipv6Ranges": []
}
],
* РЕДАКТИРОВАТЬ *: обнаружил мою ошибку, когда я проверял «если из_порта», я не принимал действительное значение 0, поэтому блок случайно пропускался.