0

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?

Antwort

0

Wenn Ihre einzige Aufgabe nur darin besteht, Sicherheitsgruppen zu finden, die eine Sicherheitsbedrohung darstellen können, gehen Sie zu AWS Trusted Advisor. Eine der Kernüberprüfungen ist für Sicherheitsgruppen:

Checks security groups for rules that allow unrestricted access (0.0.0.0/0) to specific ports. Unrestricted access increases opportunities for malicious activity (hacking, denial-of-service attacks, loss of data). The ports with highest risk are flagged red, and those with less risk are flagged yellow. Ports flagged green are typically used by applications that require unrestricted access, such as HTTP and SMTP.

Verwandte Themen