Consultar os logs de fluxo do Amazon VPC - Amazon Athena

Consultar os logs de fluxo do Amazon VPC

Os logs de fluxo do Amazon Virtual Private Cloud capturam informações do tráfego de IP de entrada e saída das interfaces de rede em uma VPC. Use os logs para investigar padrões de tráfego de rede e identificar ameaças e riscos em toda a rede da VPC.

Para consultar seus logs de fluxo da Amazon VPC, você tem duas opções:

  • Console do Amazon VPC: use o recurso de integração do Athena no console do Amazon VPC para gerar um modelo do AWS CloudFormation que cria um banco de dados, um grupo de trabalho e uma tabela de logs de fluxo do Athena com particionamento para você. O modelo também cria um conjunto de consultas de log de fluxo predefinidas que você pode usar para obter insights sobre o tráfego que passa pela VPC.

    Para obter mais informações sobre essa abordagem, consulte Consultar logs de fluxo usando o Amazon Athena no Guia do usuário da Amazon VPC.

  • Console do Amazon Athena: crie suas tabelas e consultas diretamente no console do Athena. Para obter mais informações, continue lendo esta página.

Criar e consultar tabelas para logs de fluxo da VPC personalizados

Antes de começar a consultar os logs no Athena, habilite os logs de fluxo da VPC e configure-os para serem salvos em seu bucket do Amazon S3. Depois de criar os logs, deixe-os em execução por alguns minutos para coletar alguns dados. Os logs são criados no formato de compactação GZIP que o Athena permite que você consulte diretamente.

Ao criar um log de fluxo da VPC, você pode usar um formato personalizado quando desejar especificar os campos que devem ser retornados no log de fluxo e a ordem em que devem aparecer. Para obter mais informações sobre registros de logs de fluxo, consulte Registros de log de fluxo no Guia do usuário da Amazon VPC.

Considerações comuns

Ao criar tabelas no Athena para logs de fluxo da Amazon VPC, lembre-se dos seguintes pontos:

  • Por padrão, no Athena, o Parquet acessará as colunas por nome. Para ter mais informações, consulte Tratamento de atualizações do esquema.

  • Use os nomes nos registros de log de fluxo para os nomes das colunas no Athena. Os nomes das colunas no esquema do Athena devem corresponder exatamente aos nomes dos campos nos logs de fluxo da Amazon VPC, com as seguintes diferenças:

    • Substitua os hifens nos nomes dos campos do log da Amazon VPC por sublinhados nos nomes das colunas do Athena. No Athena, os únicos caracteres aceitáveis em nomes de bancos de dados, nomes de tabelas e nomes de colunas são letras minúsculas, números e o caractere de sublinhado. Para ter mais informações, consulte Nomear bancos de dados, tabelas e colunas.

    • Escape os nomes de registro do log de fluxo que são palavras-chave reservadas no Athena, colocando-os entre caracteres de crase.

  • Os logs de fluxos da VPC são específicos da Conta da AWS. Quando você publica seus arquivos de log no Amazon S3, o caminho criado pela Amazon VPC no Amazon S3 inclui o ID daConta da AWS que foi usada para criar o log de fluxo. Para obter mais informações, consulte Publicar logs de fluxo no Amazon S3, no Guia do usuário da Amazon VPC.

Instrução CREATE TABLE para logs de fluxo da Amazon VPC

O procedimento a seguir cria uma tabela da Amazon VPC para os logs de fluxo da Amazon VPC. Ao criar um log de fluxo em um formato personalizado, você cria uma tabela com campos que correspondem aos campos especificados quando criou o log de fluxo, na mesma ordem em que os especificou.

Para criar uma tabela do Athena para logs de fluxo da Amazon VPC
  1. Insira uma instrução DDL como a que se segue no editor de consultas do console do Athena, seguindo as diretrizes na seção Considerações comuns. A instrução do exemplo cria uma tabela com as colunas de logs de fluxo da Amazon VPC nas versões 2 a 5, conforme documentado em Registros de log de fluxo. Se você usar outro conjunto ou outra ordem de colunas, modifique a instrução conforme apropriado.

    CREATE EXTERNAL TABLE IF NOT EXISTS `vpc_flow_logs` ( version int, account_id string, interface_id string, srcaddr string, dstaddr string, srcport int, dstport int, protocol bigint, packets bigint, bytes bigint, start bigint, `end` bigint, action string, log_status string, vpc_id string, subnet_id string, instance_id string, tcp_flags int, type string, pkt_srcaddr string, pkt_dstaddr string, region string, az_id string, sublocation_type string, sublocation_id string, pkt_src_aws_service string, pkt_dst_aws_service string, flow_direction string, traffic_path int ) PARTITIONED BY (`date` date) ROW FORMAT DELIMITED FIELDS TERMINATED BY ' ' LOCATION 's3://DOC-EXAMPLE-BUCKET/prefix/AWSLogs/{account_id}/vpcflowlogs/{region_code}/' TBLPROPERTIES ("skip.header.line.count"="1");

    Observe os seguintes pontos:

    • A consulta especifica ROW FORMAT DELIMITED e omite a especificação de um SerDe. Isso significa que a consulta usa LazySimpleSerDe para arquivos CSV, TSV e com delimitação personalizada. Nesta consulta, os campos terminam com um espaço.

    • A cláusula PARTITIONED BY usa o tipo date. Isso torna possível usar operadores matemáticos em consultas para selecionar qual é mais antiga ou mais recente em relação a uma determinada data.

      nota

      Como date é uma palavra-chave reservada em instruções DDL, é necessário fazer o escape dela com acentos graves. Para ter mais informações, consulte Palavras-chave reservadas.

    • Para um log de fluxo da VPC com um formato personalizado diferente, modifique os campos para que correspondam aos campos especificados ao criar o log de fluxo.

  2. Modifique LOCATION 's3://DOC-EXAMPLE-BUCKET/prefix/AWSLogs/{account_id}/vpcflowlogs/{region_code}/' para apontar para o bucket do Amazon S3 que contém os dados de log.

  3. Execute a consulta no console do Athena. Depois que a consulta for concluída, o Athena registrará a tabela vpc_flow_logs, preparando os dados dela para você fazer as consultas.

  4. Crie partições para poder ler os dados, conforme o exemplo de consulta a seguir. Esta consulta cria uma única partição para uma data especificada. Substitua os espaços reservados por data e local, conforme necessário.

    nota

    Esta consulta cria apenas uma única partição, para uma data especificada por você. Para automatizar o processo, use um script que execute essa consulta e crie partições dessa maneira para year/month/day ou use uma instrução CREATE TABLE que especifique a projeção das partições.

    ALTER TABLE vpc_flow_logs ADD PARTITION (`date`='YYYY-MM-dd') LOCATION 's3://DOC-EXAMPLE-BUCKET/prefix/AWSLogs/{account_id}/vpcflowlogs/{region_code}/YYYY/MM/dd';

Exemplos de consulta para a tabela vpc_flow_logs

Use o editor de consultas no console do Athena para executar instruções SQL na tabela criada. É possível salvar as consultas, visualizar consultas anteriores ou baixar os resultados da consulta no formato CSV. Nos exemplos a seguir, substitua vpc_flow_logs pelo nome da tabela. Modifique os valores das colunas e outras variáveis de acordo com os seus requisitos.

A consulta de exemplo a seguir lista um máximo de 100 logs de fluxo para a data especificada.

SELECT * FROM vpc_flow_logs WHERE date = DATE('2020-05-04') LIMIT 100;

A consulta a seguir lista todas as conexões TCP rejeitadas e usa a coluna de partição de data recém-criada, date, para extrair dela o dia da semana em que ocorreram esses eventos.

SELECT day_of_week(date) AS day, date, interface_id, srcaddr, action, protocol FROM vpc_flow_logs WHERE action = 'REJECT' AND protocol = 6 LIMIT 100;

Para ver qual dos servidores está recebendo o maior número de solicitações HTTPS, use a consulta a seguir. Ela conta o número de pacotes recebidos na porta HTTPS 443, agrupa-os por endereço IP de destino e retorna os 10 principais da última semana.

SELECT SUM(packets) AS packetcount, dstaddr FROM vpc_flow_logs WHERE dstport = 443 AND date > current_date - interval '7' day GROUP BY dstaddr ORDER BY packetcount DESC LIMIT 10;

Criar tabelas para logs de fluxo no formato Apache Parquet

O procedimento a seguir cria uma tabela da Amazon VPC para os logs de fluxo da Amazon VPC no formato Apache Parquet.

Para criar uma tabela do Athena para logs de fluxo da Amazon VPC no formato Parquet
  1. Insira uma instrução DDL como a que se segue no editor de consultas do console do Athena, seguindo as diretrizes na seção Considerações comuns. A instrução do exemplo cria uma tabela com as colunas de logs de fluxo da Amazon VPC nas versões 2 a 5, conforme documentado em Registros de log de fluxo no formato Parquet, com partição do Hive por hora. Se você não tiver partições por hora, remova hour da cláusula PARTITIONED BY.

    CREATE EXTERNAL TABLE IF NOT EXISTS vpc_flow_logs_parquet ( version int, account_id string, interface_id string, srcaddr string, dstaddr string, srcport int, dstport int, protocol bigint, packets bigint, bytes bigint, start bigint, `end` bigint, action string, log_status string, vpc_id string, subnet_id string, instance_id string, tcp_flags int, type string, pkt_srcaddr string, pkt_dstaddr string, region string, az_id string, sublocation_type string, sublocation_id string, pkt_src_aws_service string, pkt_dst_aws_service string, flow_direction string, traffic_path int ) PARTITIONED BY ( `aws-account-id` string, `aws-service` string, `aws-region` string, `year` string, `month` string, `day` string, `hour` string ) ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe' STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat' LOCATION 's3://DOC-EXAMPLE-BUCKET/prefix/AWSLogs/' TBLPROPERTIES ( 'EXTERNAL'='true', 'skip.header.line.count'='1' )
  2. Modifique a amostra LOCATION 's3://DOC-EXAMPLE-BUCKET/prefix/AWSLogs/' para apontar para o caminho do Amazon S3 que contém os dados de log.

  3. Execute a consulta no console do Athena.

  4. Se os dados estiverem em um formato compatível com o Hive, execute o comando a seguir no console do Athena para atualizar e carregar as partições do Hive no metastore. Após a conclusão da consulta, você pode consultar os dados na tabela vpc_flow_logs_parquet.

    MSCK REPAIR TABLE vpc_flow_logs_parquet

    Se não estiver usando dados compatíveis com o Hive, execute ALTER TABLE ADD PARTITION para carregar as partições.

Para obter mais informações sobre como usar o Athena para consultar logs de fluxo da Amazon VPC no formato Parquet, consulte a publicação Optimize performance and reduce costs for network analytics with VPC Flow Logs in Apache Parquet format (Otimize a performance e reduza os custos de análise de rede com logs de fluxo da VPC no formato Apache Parquet) no blog sobre big data da AWS.

Criar e consultar uma tabela para logs de fluxo da Amazon VPC usando projeção de partições

Use uma instrução CREATE TABLE como a que se segue para criar uma tabela, particionar a tabela e preencher as partições automaticamente usando projeção de partições. Substitua o nome da tabela test_table_vpclogs no exemplo pelo nome da tabela. Edite a cláusula LOCATION para especificar o bucket do Amazon S3 que contém os dados de log da Amazon VPC.

A instrução CREATE TABLE a seguir é para logs de fluxo da VPC fornecidos em um formato de particionamento em um estilo diferente do Hive. O exemplo permite a agregação de várias contas. Se você estiver centralizando logs de fluxo de VPC de diversas contas em um bucket do Amazon S3, o ID da conta deverá ser inserido no caminho do Amazon S3.

CREATE EXTERNAL TABLE IF NOT EXISTS test_table_vpclogs ( version int, account_id string, interface_id string, srcaddr string, dstaddr string, srcport int, dstport int, protocol bigint, packets bigint, bytes bigint, start bigint, `end` bigint, action string, log_status string, vpc_id string, subnet_id string, instance_id string, tcp_flags int, type string, pkt_srcaddr string, pkt_dstaddr string, az_id string, sublocation_type string, sublocation_id string, pkt_src_aws_service string, pkt_dst_aws_service string, flow_direction string, traffic_path int ) PARTITIONED BY (accid string, region string, day string) ROW FORMAT DELIMITED FIELDS TERMINATED BY ' ' LOCATION '$LOCATION_OF_LOGS' TBLPROPERTIES ( "skip.header.line.count"="1", "projection.enabled" = "true", "projection.accid.type" = "enum", "projection.accid.values" = "$ACCID_1,$ACCID_2", "projection.region.type" = "enum", "projection.region.values" = "$REGION_1,$REGION_2,$REGION_3", "projection.day.type" = "date", "projection.day.range" = "$START_RANGE,NOW", "projection.day.format" = "yyyy/MM/dd", "storage.location.template" = "s3://DOC-EXAMPLE-BUCKET/AWSLogs/${accid}/vpcflowlogs/${region}/${day}" )

Exemplos de consulta para test_table_vpclogs

Os exemplos de consulta a seguir consultam a test_table_vpclogs criada pela instrução CREATE TABLE anterior. Substitua test_table_vpclogs nas consultas pelo nome de sua própria tabela. Modifique os valores das colunas e outras variáveis de acordo com os seus requisitos.

Para retornar as primeiras 100 entradas de log de acesso em ordem cronológica para o período de tempo especificado, execute uma consulta como a que se segue.

SELECT * FROM test_table_vpclogs WHERE day >= '2021/02/01' AND day < '2021/02/28' ORDER BY day ASC LIMIT 100

Para ver qual servidor recebe os dez principais pacotes HTTP para um período de tempo especificado, execute uma consulta como a que se segue. A consulta conta o número de pacotes recebidos na porta HTTPS 443, agrupa-os por endereço IP de destino e retorna as 10 principais entradas da semana anterior.

SELECT SUM(packets) AS packetcount, dstaddr FROM test_table_vpclogs WHERE dstport = 443 AND day >= '2021/03/01' AND day < '2021/03/31' GROUP BY dstaddr ORDER BY packetcount DESC LIMIT 10

Para retornar os logs que foram criados durante um período de tempo especificado, execute uma consulta como a que se segue.

SELECT interface_id, srcaddr, action, protocol, to_iso8601(from_unixtime(start)) AS start_time, to_iso8601(from_unixtime("end")) AS end_time FROM test_table_vpclogs WHERE DAY >= '2021/04/01' AND DAY < '2021/04/30'

Para retornar os logs de acesso de um endereço IP de origem em um determinado intervalo de tempo, execute uma consulta como a que se segue.

SELECT * FROM test_table_vpclogs WHERE srcaddr = '10.117.1.22' AND day >= '2021/02/01' AND day < '2021/02/28'

Para listas as conexões TCP rejeitadas, execute uma consulta como a que se segue.

SELECT day, interface_id, srcaddr, action, protocol FROM test_table_vpclogs WHERE action = 'REJECT' AND protocol = 6 AND day >= '2021/02/01' AND day < '2021/02/28' LIMIT 10

Para retornar os logs de acesso para o intervalo de endereços IP que começa com 10.117, execute uma consulta como a que se segue.

SELECT * FROM test_table_vpclogs WHERE split_part(srcaddr,'.', 1)='10' AND split_part(srcaddr,'.', 2) ='117'

Para retornar os logs de acesso para um endereço IP de destino em um determinado intervalo de tempo, execute uma consulta como a que segue.

SELECT * FROM test_table_vpclogs WHERE dstaddr = '10.0.1.14' AND day >= '2021/01/01' AND day < '2021/01/31'

Criar tabelas para logs de fluxo no formato do Apache Parquet usando projeção de partições

A instrução CREATE TABLE da projeção de partições para logs de fluxo  da VPC a seguir está no formato do Apache Parquet, não é compatível com o Hive e é particionada por hora e por data, em vez de por dia. Substitua o nome da tabela test_table_vpclogs_parquet no exemplo pelo nome da tabela. Edite a cláusula LOCATION para especificar o bucket do Amazon S3 que contém os dados de log da Amazon VPC.

CREATE EXTERNAL TABLE IF NOT EXISTS test_table_vpclogs_parquet ( version int, account_id string, interface_id string, srcaddr string, dstaddr string, srcport int, dstport int, protocol bigint, packets bigint, bytes bigint, start bigint, `end` bigint, action string, log_status string, vpc_id string, subnet_id string, instance_id string, tcp_flags int, type string, pkt_srcaddr string, pkt_dstaddr string, az_id string, sublocation_type string, sublocation_id string, pkt_src_aws_service string, pkt_dst_aws_service string, flow_direction string, traffic_path int ) PARTITIONED BY (region string, date string, hour string) ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe' STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat' LOCATION 's3://DOC-EXAMPLE-BUCKET/prefix/AWSLogs/{account_id}/vpcflowlogs/' TBLPROPERTIES ( "EXTERNAL"="true", "skip.header.line.count" = "1", "projection.enabled" = "true", "projection.region.type" = "enum", "projection.region.values" = "us-east-1,us-west-2,ap-south-1,eu-west-1", "projection.date.type" = "date", "projection.date.range" = "2021/01/01,NOW", "projection.date.format" = "yyyy/MM/dd", "projection.hour.type" = "integer", "projection.hour.range" = "00,23", "projection.hour.digits" = "2", "storage.location.template" = "s3://DOC-EXAMPLE-BUCKET/prefix/AWSLogs/${account_id}/vpcflowlogs/${region}/${date}/${hour}" )

Recursos adicionais do

Para obter mais informações sobre como usar o Athena para analisar logs de fluxo de VPC, consulte as postagens do blog de AWS big data a seguir: