Ich habe Probleme, während ich versuche, einige Informationen mit Boto3 zu erhalten. Hier ist, was ich tun möchte:Sicherheitsgruppenregeln für jede Netzwerkschnittstelle mit einer öffentlichen IP erhalten
Ich Schleife über alle Netzwerkschnittstellen im AWS-Konto, wenn eine Schnittstelle verwendet wird und es eine öffentliche IP hat, bekomme ich seine Sicherheitsgruppe und sehen, ob es Regel zu öffnen zum Internet wie 0.0.0.0/0 oder öffentliche IPs fließen. Ziel ist es, einen Sicherheitsbericht über alle Instanzen mit Netzwerkschnittstellen mit dem Internet zu erstellen. Hier
ist das Skript:
# create dict
ip = {}
SGName = ''
SGID = ''
interfaceID = ''
ListGroups = {}
Message = 'Instances With Public Ips :'
# check aws profiles
for p in awsProfile:
print(p)
# define aws session
session = Session(region_name="eu-west-1", profile_name=p)
ec2 = session.resource('ec2')
client = session.client('ec2')
all_interfaces = ec2.network_interfaces.all()
for interface in all_interfaces:
interfaceID = interface.id
desc = client.describe_network_interfaces(NetworkInterfaceIds=[interfaceID])
for d in desc['NetworkInterfaces']:
if interface.status == 'in-use' and d.get('Association') is not None:
interfaceID = interface.id
print(interfaceID)
desc = client.describe_network_interfaces(NetworkInterfaceIds=[interfaceID])
publicIp = d.get('Association')['PublicIp']
SGName = d.get('Groups')[0].get('GroupName')
SGID = d.get('Groups')[0].get('GroupId')
ListGroups[SGName] = SGID
Message = Message + str(p)+str(interface.vpc.id)+str(interface.attachment.get('InstanceId'))+str(interface.description)+str(interface.private_ip_address)+str(publicIp)+str(interfaceID)+str(SGID)+str(SGName)
for key in ListGroups:
sg = ec2.SecurityGroup(ListGroups[key])
for i in range(len(sg.ip_permissions)):
for j in range(len(sg.ip_permissions[i]['IpRanges'])):
ip = IPNetwork(sg.ip_permissions[i]['IpRanges'][j]['CidrIp'])
if(ip.is_private()==False):
Message = Message + 'Public Securiy Groups details :'
Message = Message +str(ListGroups[key])+str(sg.ip_permissions[i]['ToPort'])
Als ich das Skript ausführen, bekomme ich diesen Fehler:
Traceback (most recent call last):
File "openNetwork.py", line 62, in <module>
for i in range(len(sg.ip_permissions)):
File "C:\Python\Python35-32\lib\site-packages\boto3\resources\factory.py", line 339, in property_loader
self.load()
File "C:\Python\Python35-32\lib\site-packages\boto3\resources\factory.py", line 505, in do_action
response = action(self, *args, **kwargs)
File "C:\Python\Python35-32\lib\site-packages\boto3\resources\action.py", line 83, in __call__
response = getattr(parent.meta.client, operation_name)(**params)
File "C:\Python\Python35-32\lib\site-packages\botocore\client.py", line 310, in _api_call
return self._make_api_call(operation_name, kwargs)
File "C:\Python\Python35-32\lib\site-packages\botocore\client.py", line 599, in _make_api_call
raise error_class(parsed_response, operation_name)
botocore.exceptions.ClientError: An error occurred (InvalidGroup.NotFound) when calling the DescribeSecurityGroups operation: The security group 'sg-9abc52e3' d
oes not exist
Er sagt, dass einige Sicherheitsgruppe nicht existiert. Ich soll Sicherheitsgruppen-IDs erhalten, die an eine Netzwerkschnittstelle angeschlossen sind und existieren. Ich verfolgte die Netzwerkschnittstelle, die mich zu diesem Fehler bringt, und es hat 2 Sicherheitsgruppen, von denen beide diese ID nicht im Fehler enthalten. Irgendeine Idee, wie man das zur Arbeit bringt?