Como enviar o Amazon CloudWatch Logs entre contas para o Kinesis Data Firehose?

8 minuto de leitura
0

Quero transmitir Amazon CloudWatch Logs do Amazon Kinesis Data Firehose para outra conta em uma região diferente da AWS.

Breve descrição

Para enviar logs do Amazon CloudWatch Logs para um stream do Kinesis Data Firehose em uma região diferente, a região deve oferecer suporte ao Kinesis Data Firehose. Portanto, certifique-se de que sua Região seja compatível com o Kinesis Data Firehose.

Para estabelecer o streaming entre contas e regiões usando o Kinesis Data Firehose em uma região compatível, execute as seguintes etapas:

1.    Crie um bucket do Amazon Simple Storage Service (Amazon S3) na conta de destino. Crie um perfil do AWS Identity and Access Management (IAM). Em seguida, anexe a permissão necessária para que o Kinesis Data Firehose envie dados para o Amazon S3.

2.    Crie um destino para o Kinesis Data Firehose na conta de destino. Crie um perfil do IAM para o serviço Amazon CloudWatch Logs para enviar dados para o serviço Kinesis Data Firehose. Em seguida, crie um fluxo de entrega de destino para o qual os logs serão enviados.

3.    Ative os logs de fluxo do VPC e envie os logs para o Amazon CloudWatch da conta de origem.

4.    Crie um filtro de assinatura na conta de origem que aponte para a conta de destino.

5.    Valide o fluxo de eventos de log no bucket do S3 na conta de destino.

Resolução

**Observação:**essa resolução usa os seguintes valores de exemplo que você deve substituir por seus próprios valores:

  • Conta de destino: 111111111111
  • Região do Kinesis Data Firehose: us-east-1
  • Região do bucket do S3: ** us-west-2**
  • Região de destino (recebendo logs da conta de origem): ** us-east-2**
  • Conta de origem: 222222222222
  • Região do grupo de log do Amazon CloudWatch: us-east2
  • Região de logs de fluxo do VPC: us-east-2

Configurar a conta de destino

1.    Criar um bucket do S3:

aws s3api create-bucket --bucket my-bucket --create-bucket-configuration LocationConstraint=us-west-2 --region us-west-2

A restrição de localização indica que o bucket será criado na região us-west-2.

2.    Crie a política de confiança e perfil do IAM que concede ao Kinesis Data Firehose as permissões necessárias:

{
  "Statement": {
    "Effect": "Allow",
    "Principal": {
      "Service": "firehose.amazonaws.com"
    },
    "Action": "sts:AssumeRole",
    "Condition": {
      "StringEquals": {
        "sts:ExternalId": "111111111111"
      }
    }
  }
}

As configurações de permissão devem permitir que o Kinesis Data Firehose coloque dados no bucket do S3 que você criou. Substitua 111111111111 pelo ID da sua conta da AWS.

3.    Crie o perfil do IAM e especifique o arquivo de política de confiança:

aws iam create-role \
    --role-name FirehosetoS3Role \
    --assume-role-policy-document file://~/TrustPolicyForFirehose.json

Observação: Você deve usar o valor Role_Arn em uma etapa posterior.

4.    Crie uma política de permissões em um arquivo JSON para definir as ações que o Kinesis Data Firehose pode executar na conta de destino:

{
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:AbortMultipartUpload",
        "s3:GetBucketLocation",
        "s3:GetObject",
        "s3:ListBucket",
        "s3:ListBucketMultipartUploads",
        "s3:PutObjectAcl",
        "s3:PutObject"
      ],
      "Resource": [
        "arn:aws:s3:::my-bucket",
        "arn:aws:s3:::my-bucket/*"
      ]
    }
  ]
}

5.    Associe a política de permissões ao perfil do IAM:

aws iam put-role-policy --role-name FirehosetoS3Role --policy-name Permissions-Policy-For-Firehose --policy-document file://~/PermissionsForFirehose.json

6.    Crie um stream de entrega de destino para o Kinesis Data Firehose:

aws firehose create-delivery-stream --delivery-stream-name 'my-delivery-stream' --s3-destination-configuration RoleARN='arn:aws:iam::111111111111:role/FirehosetoS3Role',BucketARN='arn:aws:s3:::my-bucket' --region us-east-1

Substitua RoleARN e BucketARN pelos Nomes de recurso da Amazon (ARN) do perfil e do bucket que você criou.

**Observação:**Quando você entrega com êxito um objeto S3 para o Kinesis Data Firehose, um prefixo personalizado é usado na expressão de namespace de marcação de data/hora. Você pode adicionar e especificar um prefixo extra na frente do prefixo do formato de hora (aaaa/mm/dd/hh/). Se o prefixo terminar com uma barra (/), ele aparecerá como uma pasta no bucket do S3.

7.    Use o comando describe-delivery-stream para verificar a propriedade DeliveryStreamDescription.DeliveryStreamStatus:

aws firehose describe-delivery-stream --delivery-stream-name "my-delivery-stream" --region us-east-1

Para confirmar se o stream está ativo, verifique a saída do comando describe-delivery-stream:

{
  "DeliveryStreamDescription": {
    "DeliveryStreamType": "DirectPut",
    "HasMoreDestinations": false,
    "DeliveryStreamEncryptionConfiguration": {
      "Status": "DISABLED"
    },
    "VersionId": "1",
    "CreateTimestamp": 1604484348.804,
    "DeliveryStreamARN": "arn:aws:firehose:us-east-1:111111111111:deliverystream/my-delivery-stream",
    "DeliveryStreamStatus": "ACTIVE",
    "DeliveryStreamName": "my-delivery-stream",
    "Destinations": [
      {
        "DestinationId": "destinationId-000000000001",
        "ExtendedS3DestinationDescription": {
          "RoleARN": "arn:aws:iam::111111111111:role/FirehosetoS3Role2test",
          "BufferingHints": {
            "IntervalInSeconds": 300,
            "SizeInMBs": 5
          },
          "EncryptionConfiguration": {
            "NoEncryptionConfig": "NoEncryption"
          },
          "CompressionFormat": "UNCOMPRESSED",
          "S3BackupMode": "Disabled",
          "CloudWatchLoggingOptions": {
            "Enabled": false
          },
          "BucketARN": "arn:aws:s3:::my-bucket"
        },
        "S3DestinationDescription": {
          "RoleARN": "arn:aws:iam::111111111111:role/FirehosetoS3Role2test",
          "BufferingHints": {
            "IntervalInSeconds": 300,
            "SizeInMBs": 5
          },
          "EncryptionConfiguration": {
            "NoEncryptionConfig": "NoEncryption"
          },
          "CompressionFormat": "UNCOMPRESSED",
          "CloudWatchLoggingOptions": {
            "Enabled": false
          },
          "BucketARN": "arn:aws:s3:::my-bucket"
        }
      }
    ]
  }
}

**Observação:**Você deve usar o valor DeliveryStreamDescription.DeliveryStreamARN em uma etapa posterior.

8.    Crie o perfil do IAM e a política de confiança do IAM que conceda ao CloudWatch Logs a permissão para colocar dados no stream do Kinesis Data Firehose. Certifique-se de adicionar as regiões em que os logs são enviados:

{
  "Statement": {
    "Effect": "Allow",
    "Principal": {
      "Service": [
        "logs.us-east-1.amazonaws.com",
        "logs.us-east-2.amazonaws.com"
      ]
    },
    "Action": "sts:AssumeRole"
  }
}

9.    Para criar o perfil do IAM e especificar o arquivo de política de confiança, use o comando create-role:

aws iam create-role \
    --role-name CWLtoKinesisFirehoseRole \
    --assume-role-policy-document file://~/TrustPolicyForCWL.json

**Observação:**Você deve usar o valor Role_Arn retornado em uma etapa posterior.

10.    Crie uma política de permissões para definir as ações que o CloudWatch Logs pode realizar na conta de destino:

{
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "firehose:*"
      ],
      "Resource": [
        "arn:aws:firehose:us-east-1:111111111111:*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "iam:PassRole"
      ],
      "Resource": [
        "arn:aws:iam::111111111111:role/CWLtoKinesisFirehoseRole"
      ]
    }
  ]
}

Use o valor DeliveryStreamDescription.DeliveryStreamARN da etapa 7 e o valor Role_Arn da etapa 9.

11.    Associe a política de permissões com a função usando o comando put-role-policy:

aws iam put-role-policy --role-name CWLtoKinesisFirehoseRole --policy-name Permissions-Policy-For-CWL --policy-document file://~/PermissionsForCWL.json

12.    Crie um destino na conta de destino usando a chamada de API put-destination. Esse é o destino para o qual a conta de origem está enviando todos os logs:

aws logs put-destination --destination-name "myDestination" --target-arn "arn:aws:firehose:us-east-1:111111111111:deliverystream/my-delivery-stream"
--role-arn "arn:aws:iam::111111111111:role/CWLtoKinesisFirehoseRole" --region us-east-2

**Observação:**Você pode criar um destino para o stream de entrega em qualquer região em que o Kinesis Data Firehose seja aceita. A região em que você cria o destino deve ser a mesma região de origem do log.

13.    Crie uma política de acesso para o destino do Amazon CloudWatch:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "AWS": "222222222222"
      },
      "Action": "logs:PutSubscriptionFilter",
      "Resource": "arn:aws:logs:us-east-2:111111111111:destination:myDestination"
    }
  ]
}

Substitua 222222222222 pela conta de origem da AWS em que os logs da Amazon Virtual Private Cloud (Amazon VPC) que você criou estão localizados.

14.    Associe a política de acesso ao destino do Amazon CloudWatch:

aws logs put-destination-policy --destination-name "myDestination" --access-policy file://~/AccessPolicy.json --region us-east-2

15.    Para verificar o destino, execute o seguinte comando:

aws logs describe-destinations --region us-east-2

Configurando a conta de origem

**Observação:**Você deve ser o usuário administrador do IAM ou usuário raiz da conta de origem.

1.    Crie um perfil do IAM e uma política de confiança para conceder aos logs de fluxo da VPC permissões para enviar dados ao grupo de logs do CloudWatch Logs:

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

2.    Para criar o perfil do IAM e especificar o arquivo de política de confiança que você criou, use o seguinte comando:

aws iam create-role --role-name PublishFlowLogs --assume-role-policy-document file://~/TrustPolicyForVPCFlowLogs.json

**Observação:**Você usará o valor do ARN retornado para ser transmitido aos logs de fluxo do VPC em uma etapa posterior.

3.    Crie uma política de permissões para definir as ações que os logs de fluxo do VPC podem executar na conta de origem:

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

4.    Para associar a política de permissões ao perfil do IAM, execute o seguinte comando:

aws iam put-role-policy --role-name PublishFlowLogs --policy-name Permissions-Policy-For-VPCFlowLogs --policy-document file://~/PermissionsForVPCFlowLogs.json

5.    Crie um grupo de logs do CloudWatch Logs para configurar o destino dos logs de fluxo do VPC:

aws logs create-log-group --log-group-name vpc-flow-logs --region us-east-2

6.    Para ativar os logs de fluxo da VPC, execute o seguinte comando:

aws ec2 create-flow-logs --resource-type VPC --resource-ids vpc-12345678 --traffic-type ALL --log-group-name vpc-flow-logs --deliver-logs-permission-arn arn:aws:iam::222222222222:role/PublishFlowLogs --region us-east-2

**Observação:**Substitua os valores do --resource-ids e --deliver-logs-permission-arn pela sua ID da VPC e pelo perfil de Logs de fluxo da VPC.

7.    Inscreva o grupo de logs do CloudWatch Logs no Kinesis Data Firehose na conta de destino:

aws logs put-subscription-filter --log-group-name "vpc-flow-logs" --filter-name "AllTraffic" --filter-pattern "" --destination-arn
"arn:aws:logs:us-east-2:111111111111:destination:myDestination" --region us-east-2

Atualize o valor do ARN --destination e substitua “111111111111” pelo número da conta de destino.

8.    Verifique o bucket do S3 para confirmar se os logs foram publicados.

Informações relacionadas

DeliveryStreamDescription

AWS OFICIAL
AWS OFICIALAtualizada há um ano