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

7 minuto de leitura
0

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

Resolução

Para enviar o CloudWatch Logs para um stream do Firehose em uma região diferente, a região deve oferecer suporte ao Firehose.

Nos comandos de resolução, substitua os seguintes valores pelos seus próprios valores:

  • 111111111111 pela sua ID da conta de destino
  • us-east-1 por sua região Firehose
  • us-west-2 pela sua região de bucket do Amazon Simple Storage Service (Amazon S3)
  • us-east-2 pela região da sua conta de destino
  • 222222222222 pela ID da sua conta de origem
  • us-east2 pela sua região do grupo de logs do CloudWatch
  • us-east-2 pela sua região de logs de fluxo da Amazon Virtual Private Cloud (Amazon VPC)
  • \ -arn pelos ARNs dos recursos

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

Configurar a conta de destino

Conclua as etapas a seguir:

  1. Crie um bucket do Amazon S3:

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

    Observação: Anote o ARN do bucket da saída para usar em uma etapa posterior.

  2. Crie uma política de confiança que tenha as permissões necessárias para que o Firehose envie dados para o Amazon S3:

    {
      "Statement": {
        "Effect": "Allow",
        "Principal": {
          "Service": "firehose.amazonaws.com"
        },
        "Action": "sts:AssumeRole",
        "Condition": {
          "StringEquals": {
            "sts:ExternalId": "111111111111"
          }
        }
      }
    }
  3. Execute o comando create-role para criar o perfil do IAM e especifique a política de confiança:

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

    Observação: Anote o ARN do perfil da saída para usar em uma etapa posterior.

  4. Para definir as ações que o Firehose pode realizar na conta de destino, use o editor JSON para criar uma política de permissões:

    {
        "Version": "2012-10-17",
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "s3:AbortMultipartUpload",
              "s3:GetBucketLocation",
              "s3:GetObject",
              "s3:ListBucket",
              "s3:ListBucketMultipartUploads",
              "s3:PutObject"
            ],
            "Resource": [
              "arn:aws:s3:::my-bucket",
              "arn:aws:s3:::my-bucket/*"
            ]
          }
        ]
      }
  5. Execute o comando put-role-policy para associar a política de permissões com o 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 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

    Observação: Substitua RoleARN e BucketARN pelos seus ARNs de perfil e bucket.
    Quando você entrega um objeto do S3 ao Firehose, um prefixo personalizado é usado na expressão de namespace de carimbo de data/hora. Você pode especificar um prefixo extra no início 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. Para verificar a propriedade DeliveryStreamDescription.DeliveryStreamStatus, execute o comando describe-delivery-stream:

    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:

    {
      "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: Anote o ARN do stream para usar em uma etapa posterior.

  8. Crie uma política de confiança adicional para conceder ao CloudWatch Logs a permissão para colocar dados no stream do Firehose. Adicione as regiões em que os logs são enviados:

    {
      "Version": "2012-10-17",
      "Statement": {
        "Effect": "Allow",
        "Principal": {
          "Service": "logs.us-east-2.amazonaws.com"
        },
        "Action": "sts:AssumeRole",
        "Condition": {
          "StringLike": {
            "aws:SourceArn": [
              "arn:aws:logs:us-east-2:sourceAccountId:*",
              "arn:aws:logs:us-east-2:recipientAccountId:*"
            ]
          }
        }
      }
    }
  9. Para criar um perfil do IAM adicional para colocar dados no stream do Firehose e especificar o arquivo de política de confiança, execute o comando create-role:

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

    Observação: Anote o ARN do perfil para usar 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. Inclua o ARN do stream e o ARN do perfil:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "firehose:ListDeliveryStreams",
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "firehose:DescribeDeliveryStream",
                "firehose:PutRecord",
                "firehose:PutRecordBatch"
            ],
            "Resource": "arn:aws:firehose:us-east-1:111111111111:deliverystream/my-delivery-stream"
        }
    ]
}
  1. Para associar a política de permissões com o perfil, execute o comando put-role-policy:
aws iam put-role-policy --role-name CWLtoKinesisFirehoseRole --policy-name Permissions-Policy-For-CWL --policy-document file://~/PermissionsForCWL.json
  1. Para criar um destino na conta de destino para a conta de origem enviar logs, execute o comando put-destination:
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 Firehose seja compatível. A região em que você cria o destino deve ser a mesma região de origem do log. Crie uma política de acesso para o destino do 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"
    }
  ]
}
  1. Associe a política de acesso ao destino do CloudWatch:
aws logs put-destination-policy --destination-name "myDestination" --access-policy file://~/AccessPolicy.json --region us-east-2
  1. Para verificar o destino, execute o comando describe-destinations:
aws logs describe-destinations --region us-east-2

Configurando a conta de origem

Observação: Para configurar a conta de origem, você deve ser o usuário administrador do IAM ou usuário-raiz da conta.

Conclua as etapas a seguir:

  1. Crie uma política de confiança para conceder aos logs de fluxo da Amazon VPC a permissão de enviar dados ao grupo de logs do CloudWatch:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Sid": "",
          "Effect": "Allow",
          "Principal": {
            "Service": "vpc-flow-logs.amazonaws.com"
          },
          "Action": "sts:AssumeRole"
        }
      ]
    }
  2. Execute o comando create-role e especifique a política de confiança:

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

    Observação: Anote o ARN do perfil da saída para usar em uma etapa posterior.

  3. Para definir as ações que os logs de fluxo da VPC podem executar na conta de origem, crie uma política de permissões:

    {
      "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 com o perfil do IAM, execute o comando put-role-policy:

    aws iam put-role-policy --role-name PublishFlowLogs --policy-name Permissions-Policy-For-VPCFlowLogs --policy-document file://~/PermissionsForVPCFlowLogs.json
  5. Para configurar o destino dos logs de fluxo, execute o comando create-log-group para criar um grupo de logs do CloudWatch:

    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 comando create-flow-logs:

    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
  7. Para inscrever o grupo de logs do CloudWatch no Firehose na conta de destino, execute o comando put-subscription-filter:

    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

    Para confirmar se os logs foram publicados, revise o bucket do S3 para ver se há novos logs.

Informações relacionadas

DeliveryStreamDescription

AWS OFICIAL
AWS OFICIALAtualizada há 7 meses