Como habilitar Flow Logs de uma interface de rede com saída para o CloudWatch

Objetivo

Para habilitar o flow logs em uma interface de rede com saída para o CloudWatch siga o seguinte caminho feliz.

Na console IAM → 1. Roles  → 2. Create Role
Deixe selecionado AWS Service → 1. EC2 → 2. Next
1. Next
1. Entre com o Nome da Role → 2. Create Role
1. Selecione Roles → 2. Procure pela Role → 3. Selecione a Role
Aba Permissions → Add Permissions → 1. Create inline policy
1. JSON → 2. Cole a política abaixo → 3. Review policy
				
					{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "logs:CreateLogGroup",
        "logs:CreateLogStream",
        "logs:PutLogEvents",
        "logs:DescribeLogGroups",
        "logs:DescribeLogStreams"
      ],
      "Resource": "*"
    }
  ]
}   
				
			
1. Entre com o Nome → 2. Create Policy
De volta na criação da role → 1. Trust Relationship → 2. Edit trust policy
1. Cole o código abaixo → 2. Update policy
				
					{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "vpc-flow-logs.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
				
			
Vá até a Console do CloudWatch → 1. Log groups → 2. Create log group
1. Log group name → 2. Create
Vá na console EC2 → 1. Selecione Instances → 2. Encontre a instância → Copie o IP
1. Clique em Network Interfaces → 2. Procure pelo IP → 3. Aba Flow logs → 4. Create Flow Log
1. Entre com Nome do Flowlog → 2. "1 minute" → 3. Send to CloudWatch logs → 4. Log Group recém criado → 5. Role recém criada → 6. Create flow log
Para verificar os logs gerados.
Vá na console do CloudWatch → 1. Log groups → 2. Selecionar o log group
1. Selecionar o Log stream
Verificar os logs
Usando Terraform

Os passos executados até aqui podem ser automatizados em terraform e a sequência resumida de ações está a seguir.

Configurar as variáveis de ambiente no Windows para utilizar as credenciais corretas da conta para a qual será habilitado o Flow logs.

–SOMENTE PARA AS SESSÕES FUTURAS, NÃO MUDA SESSÃO ATUAL

setx AWS_ACCESS_KEY_ID AKIAX576GWMUN324UA8P

setx AWS_SECRET_ACCESS_KEY xxxxxxxxxxxxxxxxxxxx

setx AWS_DEFAULT_REGION sa-east-1

setx AWS_DEFAULT_PROFILE aplicacoes.joao.silva

setx AWS_PROFILE aplicacoes.joao.silva


–SOMENTE PARA SESSÃO ATUAL

set AWS_ACCESS_KEY_ID=AKIAX576GWMUN324UA8P

set AWS_SECRET_ACCESS_KEY=xxxxxxxxxxxxxxxxxxxx

set AWS_DEFAULT_REGION=sa-east-1

set AWS_DEFAULT_PROFILE=aplicacoes.joao.silva

set AWS_PROFILE=aplicacoes.joao.silva

Executar o código terraform a seguir configurando vpc_id, subnet_id ou eni_id.

				
					resource "aws_flow_log" "flowlog-to-cloudwatch" {
  iam_role_arn    = aws_iam_role.role-flowlog-to-cloudwatch.arn
  log_destination = aws_cloudwatch_log_group.lg-flowlog-to-cloudwatch.arn
  traffic_type    = "ALL"
  max_aggregation_interval = 60
  vpc_id          = "vpc-b2aba6d6"
}

resource "aws_cloudwatch_log_group" "lg-flowlog-to-cloudwatch" {
  name = "lg-flowlog-to-cloudwatch"
}

resource "aws_iam_role" "role-flowlog-to-cloudwatch" {
  name = "role-flowlog-to-cloudwatch"

  assume_role_policy = <<EOF
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "Service": "vpc-flow-logs.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
EOF
}

resource "aws_iam_role_policy" "policy-flowlog-to-cloudwatch" {
  name = "policy-flowlog-to-cloudwatch"
  role = aws_iam_role.role-flowlog-to-cloudwatch.id

  policy = <<EOF
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": [
        "logs:CreateLogGroup",
        "logs:CreateLogStream",
        "logs:PutLogEvents",
        "logs:DescribeLogGroups",
        "logs:DescribeLogStreams"
      ],
      "Effect": "Allow",
      "Resource": "*"
    }
  ]
}
EOF
}
				
			
Bruno Veiga

Bruno Veiga

Arquiteto Cloud e Arquiteto de Soluções. Me dedicando em compartilhar conhecimento e ajudar empresas a encontrar as melhores soluções tecnológicas para os problemas do negócio com agilidade, segurança, equipes alinhadas e dentro do orçamento.