¿Cómo puedo enviar registros de Amazon CloudWatch entre cuentas a Kinesis Data Firehose?

8 minutos de lectura
0

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

Descripción breve

Para enviar registros de Amazon CloudWatch a una transmisión de Kinesis Data Firehose en otra región, la región debe ser compatible con Kinesis Data Firehose. Por tanto, asegúrese de que suregión sea compatible con Kinesis Data Firehose.

Para establecer la transmisión entre cuentas y entre regiones mediante Kinesis Data Firehose en una región compatible, realice los siguientes pasos:

1.    Cree un bucket de Amazon Simple Storage Service (Amazon S3) en la cuenta de destino. Cree un rol de AWS Identity y Access Management (IAM). A continuación, adjunte el permiso necesario para que Kinesis Data Firehose envíe datos a Amazon S3.

2.    Cree un destino para Kinesis Data Firehose en la cuenta de destino. Cree un rol de IAM para el servicio de registros de Amazon CloudWatch para enviar datos al servicio Kinesis Data Firehose. A continuación, cree un flujo de entrega de destino al que se enviarán los registros.

3.    Active los registros de flujo de la VPC y envíelos a Amazon CloudWatch para la cuenta de origen.

4.    Cree un filtro de suscripción en la cuenta de origen que apunte a la cuenta de destino.

5.    Valide el flujo de eventos de registro en el bucket de S3 en la cuenta de destino.

Solución

**Nota:**Esta resolución utiliza los siguientes valores de ejemplo que debe reemplazar por sus propios valores:

  • Cuenta de destino: 111111111111
  • Región de Kinesis Data Firehose: us-east-1
  • Región del bucket S3: us-west-2
  • Región de Destino (recibe registros de la cuenta de origen): us-east-2
  • Cuenta de origen: 222222222222
  • Región del grupo de registros de Amazon CloudWatch: us-east2
  • Región de registros de flujo de VPC: us-east-2

Configurar la cuenta de destino

1.    Cree un bucket de S3:

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

La restricción de ubicación indica que el bucket se creará en la región us-west-2.

2.    Cree el rol de IAM y la política de confianza que otorgue a Kinesis Data Firehose los permisos necesarios:

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

La configuración de permisos debe permitir a Kinesis Data Firehose incluir datos en el bucket de S3 que ha creado. Sustituya 111111111111 por el ID de su cuenta de AWS.

  1. Cree el rol de IAM y especifique el archivo de política de confianza:
aws iam create-role \
    --role-name FirehosetoS3Role \
    --assume-role-policy-document file://~/TrustPolicyForFirehose.json

**Nota:**Debe utilizar el valor Role_Arn en un paso posterior.

  1. Cree una política de permisos en un archivo JSON para definir las acciones que Kinesis Data Firehose puede realizar en la cuenta 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/*"
      ]
    }
  ]
}
  1. Asocie 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
  1. Cree un flujo de entrega de destino para 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

Sustituya RoleARN y BucketARN por el rol y los nombres de recurso de Amazon (ARN) del bucket que creó.

**Nota:**Cuando se entrega correctamente un objeto S3 a Kinesis Data Firehose, se utiliza un prefijo personalizadoen la expresión del espacio de nombres con marca de tiempo. Puede añadir y especificar un prefijo adicional al principio del prefijo de formato de hora (aaaa/MM/dd/HH/). Si el prefijo termina con una barra diagonal (/), aparecerá como una carpeta en el bucket de S3.

  1. Utilice 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 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"
        }
      }
    ]
  }
}

**Nota:**Debe utilizar el valor DeliveryStreamDescription.DeliveryStreamARN en un paso posterior.

  1. Cree el rol de IAM y la política de confianza que conceda permiso a los registros de CloudWatch para incluir datos en la transmisión de Kinesis Data Firehose. Asegúrese de añadir las regiones a las que se envían los registros:
{
  "Statement": {
    "Effect": "Allow",
    "Principal": {
      "Service": [
        "logs.us-east-1.amazonaws.com",
        "logs.us-east-2.amazonaws.com"
      ]
    },
    "Action": "sts:AssumeRole"
  }
}
  1. Para crear el rol de IAM y especificar el archivo de política de confianza, utilice el comando create-role:
aws iam create-role \
    --role-name CWLtoKinesisFirehoseRole \
    --assume-role-policy-document file://~/TrustPolicyForCWL.json

**Nota:**Debe utilizar el valor Role_Arn devuelto en un paso posterior.

  1. Cree una política de permisos para definir las acciones que los registros de CloudWatch pueden realizar en la cuenta 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"
      ]
    }
  ]
}

Utilice el valor DeliveryStreamDescription.DeliveryStreamARN del paso 7 y el valor Role_Arn del paso 9.

  1. Asocie la política de permisos al rol mediante 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. Cree un destino en la cuenta de destino mediante la llamada a la API put-destination. Este es el destino al que la cuenta de origen envía todos los registros:
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 el flujo de entrega en cualquier región en la que se admita Kinesis Data Firehose. La región en la que se crea el destino debe ser la misma que la región de origen del registro.

  1. Cree una política de acceso para el destino de 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"
    }
  ]
}

Sustituya 222222222222 por la cuenta de origen de AWS en la que se encuentran los registros de Amazon Virtual Private Cloud (Amazon VPC) que ha creado.

  1. Asocie la política de acceso al destino de Amazon CloudWatch:
aws logs put-destination-policy --destination-name "myDestination" --access-policy file://~/AccessPolicy.json --region us-east-2
  1. Para comprobar el destino, ejecute el siguiente comando:
aws logs describe-destinations --region us-east-2

Configuración de la cuenta de origen

Nota: Debe ser el usuario administrador de IAM o el usuario raíz de la cuenta de origen.

  1. Cree un rol de IAM y una política de confianza para conceder a los registros de flujo de VPC los permisos necesarios para enviar datos al grupo de registros de los registros CloudWatch:
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "Service": "vpc-flow-logs.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
  1. Para crear el rol de IAM y especificar el archivo de política de confianza que ha creado, utilice el siguiente comando:
aws iam create-role --role-name PublishFlowLogs --assume-role-policy-document file://~/TrustPolicyForVPCFlowLogs.json

Nota: Utilizará el valor de ARN devuelto para pasarlo a los registros de flujo de VPC en un paso posterior.

  1. 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": "*"
    }
  ]
}
  1. Para asociar la política de permisos al rol de IAM, ejecute el siguiente comando:
aws iam put-role-policy --role-name PublishFlowLogs --policy-name Permissions-Policy-For-VPCFlowLogs --policy-document file://~/PermissionsForVPCFlowLogs.json
  1. Cree un grupo de registros de los registros de CloudWatch para configurar el destino de los registros de flujo de VPC:
aws logs create-log-group --log-group-name vpc-flow-logs --region us-east-2
  1. Para activar los registros de flujo de VPC, ejecute el siguiente 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

Nota: Sustituya los valores de los marcadores de posición**--resource-ids** y --deliver-logs-permission-arn por su ID de VPC y su rol de registros de flujo de VPC.

  1. Suscriba el grupo de registros de los registros de CloudWatch a Kinesis Data Firehose en la cuenta 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

Actualice el valor del ARN --destination y sustituya "111111111111" por el número de cuenta de destino.

  1. Compruebe el bucket de S3 para confirmar que los registros están publicados.

Información relacionada

Descripción del flujo de entrega

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace un año