¿Cómo puedo enviar los registros de CloudWatch de varias cuentas a Amazon Data Firehose?

7 minutos de lectura
0

Quiero transmitir los registros de Amazon CloudWatch desde Amazon Data Firehose a otra cuenta de AWS en otra región de AWS.

Resolución

Para enviar registros de CloudWatch a una transmisión de Firehose en otra región, la región debe admitir Firehose

En los comandos de la resolución, sustituya los siguientes valores por los suyos:

  • 111111111111 con el ID de su cuenta de destino
  • us-east-1 con su región ed Firehose
  • us-west-2 con su región de bucket de Amazon Simple Storage Service (Amazon S3)
  • us-east-2 con la región de su cuenta de destino
  • 222222222222 con el ID de su cuenta de origen
  • us-east2 con la región de su grupo de registros de CloudWatch
  • us-east-2 con su región de registros de flujo de Amazon Virtual Private Cloud (Amazon VPC)
  • -arn con los ARN de los recursos

Nota: Si se muestran errores al ejecutar comandos de la Interfaz de la línea de comandos de AWS (AWS CLI), consulte Solución de problemas de la AWS CLI. Además, asegúrese de utilizar la versión más reciente de la AWS CLI.

Configurar la cuenta de destino

Siga estos pasos:

  1. Cree un bucket de Amazon S3:

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

    Nota: Anote el ARN del bucket de la salida para usarlo más adelante.

  2. Cree una política de confianza que tenga los permisos necesarios para que Firehose envíe datos a Amazon S3:

    {
      "Statement": {
        "Effect": "Allow",
        "Principal": {
          "Service": "firehose.amazonaws.com"
        },
        "Action": "sts:AssumeRole",
        "Condition": {
          "StringEquals": {
            "sts:ExternalId": "111111111111"
          }
        }
      }
    }
  3. Para crear el rol de IAM y especificar la política de confianza, ejecute el comando create-role:

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

    Nota: Anote el ARN del rol de la salida para usarlo más adelante.

  4. Para definir las acciones que Firehose puede realizar en la cuenta de destino, use el editor JSON para crear una política de permisos:

    {
        "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. Ejecute el comando put-role-policy para asociar la política de permisos al rol de IAM:

    aws iam put-role-policy --role-name FirehosetoS3Role --policy-name Permissions-Policy-For-Firehose --policy-document file://~/PermissionsForFirehose.json
  6. Cree una transmisión de entrega de destino para 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

    Nota: Sustituya RoleARN y BucketARN por sus ARN de rol y bucket.
    Cuando entregue un objeto S3 a Firehose, se usa un prefijo personalizado en la expresión del espacio de nombres con marca de tiempo. Puede especificar un prefijo adicional al principio del formato de hora (aaaa/MM/dd/HH/). Si el prefijo termina con una barra diagonal (/), aparecerá como una carpeta en el bucket de S3.

  7. Ejecute el comando describe-delivery-stream para comprobar la propiedad DeliveryStreamDescription.DeliveryStreamStatus:

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

    Para confirmar que la transmisión está activa, compruebe el resultado del 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"
            }
          }
        ]
      }
    }

    Nota: Anote el ARN de la transmisión para usarlo en un paso posterior.

  8. Cree una política de confianza adicional para conceder a CloudWatch Logs el permiso para añadir datos en la transmisión de Firehose. Añada las regiones a las que se enviarán los registros:

    {
      "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 crear un rol de IAM adicional para añadir datos en la transmisión de Firehose y especificar el archivo de la política de confianza, ejecute el comando create-role:

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

    Nota: Anote el ARN del rol para usarlo en un paso posterior.

  10. Cree una política de permisos para definir las acciones que los registros de CloudWatch pueden realizar en la cuenta de destino. Incluya el ARN de la transmisión y el ARN del rol:

{
    "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 asociar la política de permisos con el rol, ejecute el 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 crear un destino en la cuenta de destino para que la cuenta de origen envíe los registros, ejecute el 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

Nota: Puede crear un destino para la transmisión de entrega en cualquier región en la que se admita Firehose. La región en la que se crea el destino debe ser la misma que la región de origen del registro. Cree una política de acceso para el destino de 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. Asocie la política de acceso al destino de CloudWatch:
aws logs put-destination-policy --destination-name "myDestination" --access-policy file://~/AccessPolicy.json --region us-east-2
  1. Para verificar el destino, ejecute el comando describe-destinations:
aws logs describe-destinations --region us-east-2

Configuración de la cuenta de origen

Nota: Para configurar la cuenta de origen, debe ser el usuario administrador de IAM o el usuario raíz de la cuenta.

Siga estos pasos:

  1. Cree una política de confianza para conceder a los registros de flujo de Amazon VPC permiso para enviar datos al grupo de registro de CloudWatch:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Sid": "",
          "Effect": "Allow",
          "Principal": {
            "Service": "vpc-flow-logs.amazonaws.com"
          },
          "Action": "sts:AssumeRole"
        }
      ]
    }
  2. Ejecute el comando create-role y especifique la política de confianza:

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

    Nota: Anote el ARN del rol de la salida para usarlo más adelante.

  3. Cree una política de permisos para definir las acciones que los registros de flujo de VPC pueden realizar en la cuenta de origen:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Action": [
            "logs:CreateLogGroup",
            "logs:CreateLogStream",
            "logs:PutLogEvents",
            "logs:DescribeLogGroups",
            "logs:DescribeLogStreams"
          ],
          "Effect": "Allow",
          "Resource": "*"
        }
      ]
    }
  4. Para asociar la política de permisos al rol de IAM, ejecute el 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 el destino de los registros de flujo, ejecute el comando create-log-group para crear un grupo de registro de CloudWatch:

    aws logs create-log-group --log-group-name vpc-flow-logs --region us-east-2
  6. Para activar los registros de flujo de VPC, ejecute el 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 suscribir el grupo de registro de CloudWatch a Firehose en la cuenta de destino, ejecute el 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 que los registros están publicados, revise el bucket de S3 para ver si hay registros nuevos.

Información relacionada

Descripción del flujo de entrega

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 2 meses