Ir para o conteúdo

Como faço para encontrar um endereço IP que está nos meus logs, mas não na Amazon VPC?

10 minuto de leitura
0

Quero encontrar um endereço IP que esteja nos meus logs, mas que não esteja na minha Amazon Virtual Private Cloud (Amazon VPC).

Resolução

Observação: se você receber erros ao executar comandos da AWS Command Line Interface (AWS CLI), consulte Solução de problemas da AWS CLI. Além disso, verifique se você está usando a versão mais recente da AWS CLI.

Analisar os eventos do CloudTrail

Para usar os eventos do AWS CloudTrail para encontrar seu endereço IP, conclua as seguintes etapas:

Para usar o evento AllocateAddress para verificar se você alocou o endereço IP elástico à sua conta da AWS, execute o seguinte comando lookup-events:

aws cloudtrail lookup-events \--region example-region \
--lookup-attributes AttributeKey=EventName,AttributeValue=AllocateAddress \
--start-time example-yyyy-mm-dd \
--query 'Events[].Resources[?ResourceName == 'example-eip-address'].{ResourceType:ResourceType,IP:ResourceName}[]' --output table

Observação: substitua example-eip-address pelo seu endereço IP elástico, example-yyyy-mm-dd pela data de início e example-region pela sua região da AWS. O comando anterior do CloudTrail não lista os endereços IPv4 públicos do Amazon Elastic Compute Cloud (Amazon EC2).

Para usar o evento AssociateAddress e os filtros AllocationID para visualizar o serviço que usa o endereço IP elástico, execute o seguinte comando lookup-events:

aws cloudtrail lookup-events \--region example-region \
--lookup-attributes AttributeKey=ResourceName,AttributeValue=example-allocation-id \
--start-time example-yyyy-mm-dd \

Observação: substitua example-allocation-id pelo ID do seu endereço IP elástico, example-yyyy-mm-dd pela data de início e example-region pela sua região. O comando anterior mostra o histórico completo da alocação de endereços IP elásticos. Ele começa da alocação mais recente para a mais antiga, com base na data selecionada.

Para usar o evento CreateNetworkInterface para verificar se você atribuiu o endereço IP privado à interface de rede elástica, execute o seguinte comando lookup-events:

aws cloudtrail lookup-events \--region example-region \
--lookup-attributes AttributeKey=EventName,AttributeValue=CreateNetworkInterface \
--start-time example-yyyy-mm-dd \
--query 'Events[].CloudTrailEvent' --output text | jq -r "select(.responseElements.networkInterface.privateIpAddressesSet.item[].privateIpAddress == \"example-private-ip-address\")"

Observação: substitua example-private-ip-address pelo seu endereço IP privado, example-yyyy-mm-dd pela data de início e example-region pela sua região. Se o comando anterior não retornar eventos correspondentes, você não receberá uma saída.

Para usar o evento AttachNetworkInterface para verificar se um recurso usou uma interface de rede no passado, execute o seguinte comando lookup-events:

aws cloudtrail lookup-events \--region example-region \
--lookup-attributes AttributeKey=EventName,AttributeValue=AttachNetworkInterface \
--start-time example-yyyy-mm-dd \
--query 'Events[].CloudTrailEvent' --output text | jq -r "select(.requestParameters.networkInterfaceId == \"example-eni-id\")"

Observação: substitua example-eni-id pelo ID da interface de rede, example-yyyy-mm-dd pela data de início e example-region pela sua região.

Para verificar se o CloudTrail pode encontrar os eventos, execute o seguinte comando lookup-events sem o filtro jq:

aws cloudtrail lookup-events \
--region example-region \
--lookup-attributes AttributeKey=EventName,AttributeValue=CreateNetworkInterface \
--start-time example-yyyy-mm-dd

Observação: substitua example-yyyy-mm-dd pela sua data de início e example-region pela sua região.

Para usar o evento RunInstances para verificar se você associou o endereço IP privado à instância na execução da instância, execute o seguinte comando lookup-events:

aws cloudtrail lookup-events \--region example-region \
--lookup-attributes AttributeKey=EventName,AttributeValue=RunInstances \
--start-time example-yyyy-mm-dd \
--query 'Events[].CloudTrailEvent' --output text | jq -r "select(.responseElements.instancesSet.items[].privateIpAddress == \"example-private-ip-address\") | [.responseElements.instancesSet.items[].networkInterfaceSet.items[]] "

Observação: substitua example-private-ip-address pelo seu endereço IP privado, example-yyyy-mm-dd pela data de início e example-region pela sua região.

Para usar o evento AssignPrivateIpAddresses para verificar se você associou o endereço IP privado à interface de rede, execute o seguinte comando lookup-events:

aws cloudtrail lookup-events \--region example-region \
--lookup-attributes AttributeKey=EventName,AttributeValue=AssignPrivateIpAddresses \
--start-time example-yyyy-mm-dd \
--query 'Events[].CloudTrailEvent' --output text | jq -r "select(.responseElements.assignedPrivateIpAddressesSet.assignedPrivateIpAddressSetType[].privateIpAddress == \"example-private-ip-address\" ) | {requestParameters,responseElements}"

Observação: substitua example-private-ip-address pelo seu endereço IP privado, example-yyyy-mm-dd pela data de início e example-region pela sua região.

Para usar o evento AssignIpv6Addresses para verificar se você atribuiu o endereço IPv6 à interface de rede especificada, execute o seguinte comando lookup-events:

aws cloudtrail lookup-events \--region example-region \
--lookup-attributes AttributeKey=EventName,AttributeValue=AssignIpv6Addresses \
--start-time example-yyyy-mm-dd \
--query 'Events[].CloudTrailEvent' --output text | jq -r "select(.responseElements.AssignIpv6AddressesResponse.assignedIpv6Addresses.item == \"example-IPv6-address\") | [.responseElements.AssignIpv6AddressesResponse] "

Observação: substitua example-IPv6-address pelo seu endereço IPv6, example-yyyy-mm-dd pela data de início e example-region pela sua região.

Usar o CloudWatch Logs para analisar dados de log

Observação: para enviar eventos de log para o Amazon CloudWatch Logs, configure sua trilha. Para mais informações, consulte Monitoring CloudTrail log files with Amazon CloudWatch Logs (Monitoramento de arquivos de log do CloudTrail com o Amazon CloudWatch Logs).

Verificar os endereços IPv4 atribuídos à conta

Para visualizar a alocação anterior de endereços IP elásticos e o serviço que usou o endereço IP público, use os seguintes eventos:

fields      eventTime as Time,
     userIdentity.accountId as AccountID,
     userIdentity.principalId as Principal,
     awsRegion as Region,
     eventName as Action,
     requestParameters.allocationId as AssociateAddress_AllocationID,
     requestParameters.instanceId as InstanceID,
     requestParameters.privateIpAddress as PrivateIP,
     responseElements.allocationId as AllocateAddress_AllocationID,
     responseElements.publicIp as EIP
| filter

     eventName = "AllocateAddress" or
     eventName = "AssociateAddress" and
     # AssociateAddress does not indicate resources outside EC2 instances.
     (
          EIP = "example-public-ip-addresses" or
          AssociateAddress_AllocationID = "example-allocation-id"
     )
| sort @timestamp desc

Observação: substitua example-public-ip-addresses por seus endereços IP públicos e example-allocation-id por seu ID de alocação.

Para encontrar as atribuições anteriores de endereços IP privados, use os seguintes eventos:

Evento CreateNetworkInterface:

parse @message '"privateIpAddressesSet":{"item":[{"privateIpAddress":"*"' as PrivateIP| fields
eventTime as Time,
userIdentity.accountId as AccountID,
userIdentity.principalId as Principal,
awsRegion as Region,
eventName as Action,
responseElements.networkInterface.networkInterfaceId as ENI
| filter
eventName = "CreateNetworkInterface" and
(
PrivateIP = "example-private-ip-addresses"
)
| sort @timestamp desc

Observação: substitua example-private-ip-addresses pelos seus endereços IP.

Evento RunInstances:

parse @message '{"privateIpAddress":"*"' as PrivateIP|fields
     eventTime as Time,
     userIdentity.accountId as AccountID,
     userIdentity.principalId as Principal,
     awsRegion as Region,
     eventName as Action
| filter
     eventName = "RunInstances" and
     (
          PrivateIP = "example-private-ip-addresses"
     )
| sort @timestamp desc

Observação: substitua example-private-ip-addresses pelos seus endereços IP.

Evento AssignPrivateIpAddress:

parse @message '"assignedPrivateIpAddressSetType":[{*}]' as PrivateIpAddress| fields
     eventTime as Time,
     userIdentity.accountId as AccountID,
     userIdentity.principalId as Principal,
     awsRegion as Region,
     eventName as Action
| filter
     eventName = "AssignPrivateIpAddresses" and
     (
          PrivateIpAddress like "example-private-ip-addresses"
     )
| sort @timestamp desc

Note: Replace example-private-ip-addresses with your IP

Observação: substitua example-private-ip-addresses pelos seus endereços IP.

Veja os recursos que usaram a interface de rede:

fields      eventTime as Time,
     userIdentity.accountId as AccountID,
     userIdentity.principalId as Principal,
     awsRegion as Region,
     eventName as Action,
     requestParameters.instanceId as InstanceID,
     requestParameters.networkInterfaceId as ENI
| filter
     eventName = "AttachNetworkInterface" and
     (
          ENI = "example-eni-id"
     )
| sort @timestamp desc

Observação: substitua example-eni-id pelo ID da interface de rede.

Verificar os endereços IPv6 atribuídos à conta

Para encontrar as atribuições de endereço IP privado anteriores, use os seguintes eventos:

Evento AssignIpv6Addresses:

fields    eventTime as Time,
    userIdentity.accountId as AccountID,
    userIdentity.principalId as Principal,
    awsRegion as Region,
    eventName as Action,
    responseElements.AssignIpv6AddressesResponse.assignedIpv6Addresses.item as IPv6
| filter
    eventName = "AssignIpv6Addresses" and
    (
        IPv6 = "example-ipv6-addresses"
    )
| sort @timestamp desc

Observação: substitua example-ipv6-addresses pelos seus endereços IP.

Evento RunInstances:

fields    eventTime as Time,
    userIdentity.accountId as AccountID,
    userIdentity.principalId as Principal,
    awsRegion as Region,
    eventName as Action,
    responseElements.AssignIpv6AddressesResponse.assignedIpv6Addresses.item as IPv6
| filter
    eventName = "RunInstances" and
    (
        PrivateIP = "example-private-ip-addresses"
    )
| sort @timestamp desc

Observação: substitua example-private-ip-addresses pelos seus endereços IP.

Evento CreateNetworkInterface:

parse @message '"ipv6AddressesSet":{"items":[{"ipv6Address":"*"' as IPv6| fields
     eventTime as Time,
     userIdentity.accountId as AccountID,
     userIdentity.principalId as Principal,
     awsRegion as Region,
     eventName as Action,
     responseElements.instancesSet.items.0.instanceId as InstanceID
| filter
     eventName = "CreateNetworkInterface" and
     (
         IPv6 = "example-ipv6-addresses"
     )
| sort @timestamp desc

Observação: substitua example-ipv6-addresses pelos seus endereços IP.

Veja os recursos que usaram a interface de rede:

fields      eventTime as Time,
     userIdentity.accountId as AccountID,
     userIdentity.principalId as Principal,
     awsRegion as Region,
     eventName as Action,
     requestParameters.instanceId as InstanceID,
     requestParameters.networkInterfaceId as ENI
| filter
     eventName = "AttachNetworkInterface" and
     (
         ENI = "example-eni-id" or
     )
| sort @timestamp desc

Observação: substitua example-eni-id pelo ID da interface de rede.

(Opcional) Para verificar se o prefixo BGP e o ASN do endereço IP público são um endereço IP da AWS, execute o seguinte comando whois:

whois -h whois.cymru.com " -v example-public-ip-address"

Observação: substitua example-public-ip-address pelo seu endereço IP público.

Consultar o histórico de endereços IP

É possível usar um arquivo ip-ranges.json, o Gerenciador de endereços IP (IPAM) da Amazon VPC ou a AWS CLI para encontrar um endereço IP no seu histórico de endereços IP.

ip-ranges.json

Conclua as etapas a seguir:

  1. Para ver a lista de todos os endereços IP públicos que pertencem a um serviço da AWS, verifique o arquivo ip-ranges.json.
  2. Para filtrar a lista, use as seguintes variáveis:
    "ip_prefix"
    "region"
    "service"

IPAM

Para usar o IPAM para rastrear as VPCs ou recursos que usaram um endereço IP específico ao longo do tempo, conclua as seguintes etapas:

  1. Abra o console do IPAM.
  2. No painel de navegação, escolha Pesquisar histórico de IP.
  3. Insira seu endereço IP.
  4. Escolha Pesquisar.

Os resultados da pesquisa mostram os seguintes itens:

  • VPC ou interface de rede associada ao endereço IP
  • Intervalo de tempo em que o endereço IP foi atribuído
  • Recursos relacionados

AWS CLI

Para usar a AWS CLI para obter as informações do endereço IP, execute o seguinte comando get-ipam-address-history:

aws ec2 get-ipam-address-history \
 --ipam-scope-id ipam-scope-###### \
 --cidr 10.0.1.5 \
 --region us-east-1

Observação: se você usa o AWS Organizations, pode ampliar sua busca por endereços IP no nível organizacional para rastrear centralmente várias contas de membros.

Designar uma conta de administrador IPAM

Conclua as etapas a seguir:

  1. Em sua organização, escolha uma conta da AWS para ser a conta gerencial.
  2. Para tornar o ID da sua conta o administrador do IPAM da sua organização, execute o seguinte comando enable-aws-service-access na sua conta gerencial:
    aws organizations enable-aws-service-access \
     --service-principal ipam.amazonaws.comaws ec2 enable-ipam-organization-admin-account \
     --delegated-admin-account-id YOUR_ACCOUNT_ID

Observação: substitua YOUR_ACCOUNT_ID pelo ID da sua conta.

Criar um IPAM na conta do administrador

Conclua as seguintes etapas em sua conta de administrador do IPAM:

  1. Para criar um IPAM, execute o seguinte comando create-ipam:

    aws ec2 create-ipam \
     --description "Org-wide IPAM" \
     --operating-regions RegionName=us-east-1 RegionName=us-west-2

    Observação: substitua us-east-1 e us-west-2 por suas regiões.

    Esse IPAM agora pode coletar e gerenciar o uso do CIDR em várias contas.

  2. Para criar uma descoberta de recursos, execute o seguinte comando create-ipam-resource-discovery:

    aws ec2 create-ipam-resource-discovery \
    --description "Org-wide Discovery" \
    --operating-regions RegionName=us-east-1 \
    --tag-specifications ResourceType=ipam-resource-discovery,Tags=[{Key=Org,Value=Enabled}]

    Observação: substitua us-east-1 pela sua região.

  3. Para associar a descoberta de recursos ao IPAM, execute o seguinte comando associate-ipam-resource-discovery:

    aws ec2 associate-ipam-resource-discovery \
     --ipam-id ipam-######## \
     --ipam-resource-discovery-id ipam-res-disco-####

É possível compartilhar uma descoberta de recursos com outra conta.

Observação: cada conta de membro em sua organização deve compartilhar dados de recursos com o IPAM. Se você estiver usando a mesma organização e sua descoberta centralizada configurada, os dados dos recursos serão compartilhados automaticamente. Use o painel do IPAM para monitorar recursos descobertos, como VPCs e endereços IP.

Importante:

  • todos os endereços IP que você aloca em qualquer conta ou VPC na organização aparecem no histórico de endereços IP do IPAM.
  • É possível usar o console do IPAM ou a AWS CLI para consultar o uso anterior de um endereço IP.
  • Se o endereço IP no histórico do IPAM for da AWS e houver atividade maliciosa, denuncie abusos de recursos da AWS.
AWS OFICIALAtualizada há um ano