Salta al contenuto

Come posso identificare, monitorare e ottimizzare il mio utilizzo degli indirizzi IPv4 pubblici in Amazon VPC?

7 minuti di lettura
0

Desidero identificare, monitorare e ottimizzare il mio utilizzo degli indirizzi IPv4 in Amazon Virtual Private Cloud (Amazon VPC).

Risoluzione

Nota: se ricevi errori quando esegui i comandi dell'Interfaccia della linea di comando AWS (AWS CLI), consulta Risoluzione degli errori per AWS CLI. Inoltre, assicurati di utilizzare la versione più recente di AWS CLI.

Tutti gli indirizzi IPv4 pubblici comportano un addebito di 0,005 USD all'ora per ogni indirizzo IP, indipendentemente dal fatto che siano collegati o meno a un servizio. Se sei un cliente del Piano gratuito AWS per Amazon Elastic Compute Cloud (Amazon EC2), usufruisci di 750 ore di utilizzo gratuite. Tale utilizzo gratuito è destinato all'avvio di un'istanza Amazon EC2 con un indirizzo IPv4 pubblico.

Attiva la funzionalità Informazioni sugli IP pubblici

Puoi utilizzare Informazioni sugli IP pubblici per monitorare, analizzare e verificare gli indirizzi IPv4 pubblici attualmente utilizzati dai servizi nelle Regioni AWS.

Per attivare Informazioni sugli IP pubblici, crea un pool Gestione indirizzi IP (IPAM) in Amazon VPC. Per identificare l'utilizzo degli indirizzi IPv4 pubblici, integra Informazioni sugli IP pubblici del pool IPAM con un unico account AWS o con gli account di AWS Organizations.

Nota: non vengono addebitati costi per la funzionalità Informazioni sugli IP pubblici nell'ambito del Piano gratuito. Per informazioni sui prezzi del Livello avanzato, consulta la scheda dedicata a IPAM nella pagina dei prezzi di Amazon VPC. Quando integri IPAM con Organizations, puoi utilizzare la funzionalità Informazioni sugli IP pubblici per tutte le Regioni e gli account dell'organizzazione, anche nel Piano gratuito.

Per visualizzare i risultati, puoi utilizzare la console Amazon VPC o AWS CLI.

Nota: dopo aver creato un pool IPAM, Informazioni sugli IP pubblici genera un report per gli indirizzi IPv4 pubblici. Il tempo necessario per generare il report si basa sulle dimensioni dell'organizzazione.

Attiva il Report costi e utilizzo

Il Report costi e utilizzo (CUR) AWS include i dati di utilizzo per gli indirizzi IPv4 pubblici in uso e non utilizzati. Quando crei il CUR, seleziona Includi gli ID delle risorse per ottenere un'analisi dettagliata a livello di risorsa. Dopo aver creato il CUR, AWS aggiorna i file di report che contengono i dati relativi al mese corrente almeno una volta al giorno. Puoi utilizzare i file di report per analizzare i dati storici sull'utilizzo degli indirizzi IPv4.

Nota: puoi accedere ai report da un bucket Amazon Simple Storage Service (Amazon S3). AWS può impiegare fino a 24 ore per fornire report al bucket Amazon S3.

Identifica immediatamente gli indirizzi IPv4 pubblici

Nota: è consigliabile utilizzare il CUR e Informazioni sugli IP pubblici per l'analisi pianificata dell'utilizzo degli indirizzi IPv4 pubblici.

Per identificare immediatamente i servizi con indirizzi IPv4 pubblici, utilizza la console Amazon EC2 o AWS CLI.

Console Amazon EC2

Per visualizzare i servizi AWS che utilizzano indirizzi IPv4 pubblici analizzando le interfacce di rete, completa i seguenti passaggi:

  1. Apri la console Amazon EC2.
  2. Dal pannello di navigazione, in Rete e sicurezza scegli Interfacce di rete.
  3. Nel filtro Indirizzi IPv4 pubblici, inserisci <*> per identificare le interfacce di rete elastiche che utilizzano l'indirizzo IPv4 pubblico primario.
  4. Utilizza la descrizione e il tipo di interfaccia di rete per identificare il servizio che utilizza l'indirizzo IPv4 pubblico.
  5. Per mostrare tutti gli indirizzi IP pubblici e secondari con interfacce di rete in una Regione, esegui questo comando:
    aws ec2 describe-network-interfaces --region example-region --query 'NetworkInterfaces[*].PrivateIpAddresses[?Association.PublicIp].Association.PublicIp[]' --output table
    Nota: sostituisci example-region con la tua Regione.

Per gli indirizzi IPv4 pubblici utilizzati da VPN sito-sito AWS, consulta Come posso controllare lo stato corrente del mio tunnel VPN?

Per gli indirizzi IPv4 pubblici che costituiscono AWS Global Accelerator standard e personalizzato, consulta Visualizzazione degli acceleratori.

Per visualizzare gli indirizzi IP elastici inattivi o associati, completa i seguenti passaggi:

  1. Apri la console Amazon EC2.
  2. Nel pannello di navigazione, in Rete e sicurezza, scegli IP elastici.
  3. Seleziona un indirizzo IP elastico per visualizzare le risorse che lo utilizzano.
    Nota: per ulteriori informazioni sull'utilizzo, controlla i campi Interfaccia di rete o Istanza.

L'utilizzo degli indirizzi bring your own IP (BYOIP) è gratuito. AWS fattura Global Accelerator nella Regione us-west-2.

AWS CLI

Prerequisiti: esegui il comando AWS CLI aws configure per impostare le credenziali. Inoltre, installa Boto3. Per ulteriori informazioni, consulta Install Boto3 (Installazione di Boto3) sul sito web Boto3.

Per identificare immediatamente i servizi che utilizzano indirizzi IPv4 pubblici, completa i seguenti passaggi da un ambiente AWS CloudShell o Linux:

  1. Crea il seguente file:

    touch public_ipv4_recon.py
  2. Esegui questo comando per modificare il file:

    vim public_ipv4_recon.py
  3. Copia e incolla questo codice nel file e salvalo:

    #!/usr/bin/env python3
    import pprint
    import boto3, sys
    
    profile = boto3.Session(profile_name=sys.argv[1])
    aga = profile.client('globalaccelerator', region_name='us-west-2')
    ec2 = boto3.client('ec2')
    
    def global_public_ipv4_lookup(aga):
      try:
        # global accelerator
        next_token = None
        while True:
          if next_token:
            resource = aga.list_accelerators(
            NextToken = next_token
              )
          else:
            resource = aga.list_accelerators(
            )
          print('Describing world wide Global Accelerators...')
          print('Note: AWS Global Accelerators are billed in us-west-2....')
          print(f'Number of AGA: {len(resource["Accelerators"])}')
          print('-'*40)
          for item in resource["Accelerators"]:
            print(f'Name: {item["Name"]}')
            if 'IpSets' in item.keys():
              for ip in item["IpSets"][0]["IpAddresses"]:
                print(f'Public IPv4: {ip}')
            print(f'Status: {item["Status"]}')
            print()
          next_token = resource.get("NextToken")
          if next_token is None:
            break
        print()
        # custom_routing_accelerators
        next_token = None
        while True:
          if next_token:
            custom_routing = aga.list_custom_routing_accelerators(
              NextToken = next_token
            )
          else:
            custom_routing = aga.list_custom_routing_accelerators(
            )
          print('Describing world wide Custom Routing Accelerators...')
          print('Note: AWS Global Accelerators are billed in us-west-2....')
          print(f'Number of custom AGA: {len(custom_routing["Accelerators"])}')
          print('-'*40)
          for item in custom_routing["Accelerators"]:
            if 'IpSets' in item.keys():
              for ip in item["IpSets"][0]["IpAddresses"]:
                print(f'Public IPv4: {ip}')
            print(f'Status: {item["Status"]}')
            print()
          next_token = custom_routing.get("NextToken")
          if next_token is None:
            break
        print()
      except Exception as err:
        print(f'Error found: {err}...')
        pass
    
    def public_ipv4_lookup(ec2):
      try:
        # vpn
        next_token = None
        while True:
          if next_token:
            vpn = ec2.describe_vpn_connections(
                  NextToken = next_token
            )
          else:
            vpn = ec2.describe_vpn_connections(
            )
          print('Describing VPNs...')
          print(f'Number of Vpn connections: {len(vpn["VpnConnections"])}')
          print('-'*40)
          for item in vpn["VpnConnections"]:
            if 'VpnConnectionId' in item.keys():
              print(f'Vpn Id: {item["VpnConnectionId"]}')
              for ip in item["VgwTelemetry"]:
                print(f'Public ipv4: {ip["OutsideIpAddress"]}')
            print()
          next_token = vpn.get("NextToken")
          if next_token is None:
            break
        print()
        # elastic ip
        eip = ec2.describe_addresses(
        )
        print('Describing Elastic IPs...')
        print(f'Number of Elastic Ips: {len(eip["Addresses"])}')
        print('-'*40)
        for item in eip["Addresses"]:
          if 'AllocationId' in item.keys():
            print(f'Eip Id: {item["AllocationId"]}')
            print(f'Public ipv4: {item["PublicIp"]}')
            print()
        print()
        # network interfaces
        next_token = None
        while True:
          if next_token:
            interface = ec2.describe_network_interfaces(
            NextToken=next_token
              )
          else:
            interface = ec2.describe_network_interfaces(
            )
          print('Describing Network Interfaces...')
          print(f'Number of interfaces: {len(interface["NetworkInterfaces"])}')
          print('Only printing Interfaces with a public IPv4 address...')
          print('-'*40)
          for item in interface["NetworkInterfaces"]:
            for ip in item["PrivateIpAddresses"]:
              if 'Association' not in ip.keys():
                pass
              else:
                print(f'Interface Id: {item["NetworkInterfaceId"]}')
                print(f'Description: {item["Description"]}')
                print(f'Status: {interface["NetworkInterfaces"][0]["Status"]}')
                print(f'Public Ip: {ip["Association"]["PublicIp"]}\n')
          next_token = interface.get("NextToken")
          if next_token is None:
            break
      except Exception as err:
        print(f'Error found: {err}...')
        pass
    
    # Run code
    if len(sys.argv) < 3 or not sys.argv[2]:
      global_public_ipv4_lookup(aga)
      regions_list = ec2.describe_regions(
          AllRegions=False
      )
      for region in regions_list['Regions']:
        if region["OptInStatus"] == 'opted-in' or 'opt-in-not-required':
          print(f'\n**********-[{region["RegionName"]}]-**********\n')
          public_ipv4_lookup(
            ec2=profile.client('ec2', region_name=region["RegionName"])
            )
    elif sys.argv[2]:
      global_public_ipv4_lookup(aga)
      public_ipv4_lookup(
        ec2=profile.client('ec2', region_name=sys.argv[2])
        )
  4. Per verificare tutte le Regioni, esegui questo comando:

    python3 public_ipv4_recon.py example-cli-profile

    Nota: sostituisci example-cli-profile con il nome del profilo AWS CLI configurato o con qualsiasi nome di profilo definito nel file .aws/credentials. Se utilizzi Windows, sostituisci python3 con python.
    -oppure-
    Per verificare una Regione specifica, esegui questo comando:

    python3 public_ipv4_recon.py example-cli-profile example-region

    Nota: sostituisci example-cli-profile con il nome del profilo AWS CLI configurato o con qualsiasi nome di profilo definito nel file .aws/credentials. Sostituisci example-region con la Regione.

Se non sei autorizzato a eseguire la richiesta o la Regione è disattivata per l'account, potresti ricevere il seguente errore:

"Error found: An error occurred (AuthFailure) when calling the <API> operation: AWS was not able to validate the provided access credentials..."

Ottimizza l'utilizzo degli indirizzi IPv4 pubblici e adotta gli indirizzi IPv6

Per ottimizzare i costi, migliora l'architettura attuale in modo da ridurre al minimo l'utilizzo degli indirizzi IPv4 pubblici. La migrazione a IPv6 è una procedura consigliata. L'utilizzo degli indirizzi IPv6 non comporta alcun addebito.

AWS UFFICIALEAggiornata 7 mesi fa