¿Cómo puedo configurar la transmisión entre cuentas desde Kinesis Data Firehose a Amazon OpenSearch Service?

9 minutos de lectura
0

Quiero configurar una transmisión de Amazon Kinesis Data Firehose que envíe datos a un clúster de Amazon OpenSearch Service de otra cuenta.

Breve descripción

Configure Kinesis Data Firehose y sus dependencias, como Amazon Simple Storage Service (Amazon S3) y Amazon CloudWatch, para transmitir entre diferentes cuentas. La entrega de datos de transmisión funciona para clústeres de OpenSearch Service de acceso público, independientemente de si el control de acceso detallado (FGAC) está activado o no.

Para configurar una transmisión de Kinesis Data Firehose que envíe datos a un clúster de OpenSearch Service, siga estos pasos:

  1. Cree un bucket de Amazon S3 en la cuenta A.
  2. Cree un grupo de registro y una secuencia de registro de CloudWatch en la cuenta A.
  3. Cree un rol y una política de Kinesis Data Firehose en la cuenta A.
  4. Cree un clúster de OpenSearch Service de acceso público en la cuenta B como destino de la transmisión de datos del rol de Kinesis Data Firehose en la cuenta A.
  5. (Opcional) Si se ha activado FGAC, inicie sesión en los paneles de OpenSearch y añada una asignación de roles.
  6. Actualice la política de roles de AWS Identity Access Management (IAM) para que su rol de Kinesis Data Firehose en la cuenta A envíe datos a la cuenta B.
  7. Cree la transmisión de Kinesis Data Firehose en la cuenta A.
  8. Pruebe la transmisión entre cuentas al clúster de OpenSearch Service.

Solución

Creación de un bucket de Amazon S3 en la cuenta A

Cree un bucket de S3 en la cuenta A. El bucket de Amazon S3 genera un nombre de recurso de Amazon (ARN).

Nota: El ARN completo se usa más adelante para conceder acceso a Kinesis Data Firehose, de modo que pueda guardar y recuperar registros del bucket de Amazon S3.

Creación de un grupo de registro y una secuencia de registro de CloudWatch en la cuenta A

Para crear un grupo de registro de CloudWatch, siga estos pasos:

  1. Abra la consola de CloudWatch.
  2. En el panel de navegación, elija Registros y, a continuación, seleccione Grupos de registros.
  3. Seleccione Crear un grupo de registros.
  4. Introduzca un nombre en Grupo de registros.
  5. Elija el botón Crear un grupo de registros para guardar el nuevo grupo de registro.
  6. Busque el grupo de registro recién creado y, a continuación, selecciónelo.

Para crear una secuencia de registro de Amazon CloudWatch, siga estos pasos:

  1. Seleccione Crear secuencia de registro.
  2. Introduzca un valor en Nombre de la secuencia de registro.
  3. Seleccione Crear secuencia de registro.
    Importante: Los nombres de los grupos de registro y las secuencias de registro de CloudWatch son obligatorios cuando se crean políticas de roles de Kinesis Data Firehose.

Creación de un rol y una política de Kinesis Data Firehose en la cuenta A

  1. Abra la consola de AWS Identity and Access Management (IAM).
  2. Cree una política de IAM que permita que Kinesis Data Firehose haga lo siguiente:
    Guardar los registros de transmisión en CloudWatch
    Realizar registros en Amazon S3
    Transmitir datos al clúster de OpenSearch Service

Ejemplo:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:AbortMultipartUpload",
        "s3:GetBucketLocation",
        "s3:GetObject",
        "s3:ListBucket",
        "s3:ListBucketMultipartUploads",
        "s3:PutObject",
        "s3:PutObjectAcl"
      ],
      "Resource": [
        "<Bucket ARN>",
        "<Bucket ARN>/*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "logs:PutLogEvents"
      ],
      "Resource": [
        "arn:aws:logs:<region>:<account-id>:log-group:/aws/kinesisfirehose/<Firehose Name>:log-stream:*"
      ]
    }
  ]
}

Nota: Posteriormente, anexará los permisos de transmisión a la política de clústeres de OpenSearch Service. Sin embargo, primero debe crear el clúster en la cuenta B.

  1. Guarde la política.
  2. Elija Crear un rol.
  3. Agregue la política a su rol de Kinesis Data Firehose.

Creación de un clúster de OpenSearch Service de acceso público en la cuenta B como destino de la transmisión de datos del rol de Kinesis Data Firehose en la cuenta A

  1. Cree su clúster de OpenSearch Service de acceso público en la cuenta B.
  2. Registre el ARN del dominio de OpenSearch Service. Usará el ARN en un paso posterior.
  3. Configure los ajustes de seguridad del clúster.
    Importante: Debe configurar los ajustes de seguridad de OpenSearch Service para permitir que el rol de Kinesis Data Firehose de la cuenta A realice transmisiones a su clúster de OpenSearch Service.

Para configurar los ajustes de seguridad, siga estos pasos:

  1. En OpenSearch Service, vaya a Política de acceso.

  2. Seleccione la política de acceso definida en el JSON. Su política debe tener los siguientes permisos:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "AWS": "*"
          },
          "Action": "es:*",
          "Resource": "<ES Domain ARN in Account B>/*",
          "Condition": {
            "IpAddress": {
              "aws:SourceIp": "<Your IP Address for OpenSearch Dashboards access>"
            }
          }
        },
        {
          "Effect": "Allow",
          "Principal": {
            "AWS": "<Firehose Role ARN in Account A>"
          },
          "Action": [
            "es:ESHttpPost",
            "es:ESHttpPut"
          ],
          "Resource": [
            "<ES Domain ARN in Account B>",
            "<ES Domain ARN in Account B>/*"
          ]
        },
        {
          "Effect": "Allow",
          "Principal": {
            "AWS": "<Firehose Role ARN in Account A>"
          },
          "Action": "es:ESHttpGet",
          "Resource": [
            "<ES Domain ARN in Account B>/_all/_settings",
            "<ES Domain ARN in Account B>/_cluster/stats",
            "<ES Domain ARN in Account B>/index-name*/_mapping/type-name",
            "<ES Domain ARN in Account B>/roletest*/_mapping/roletest",
            "<ES Domain ARN in Account B>/_nodes",
            "<ES Domain ARN in Account B>/_nodes/stats",
            "<ES Domain ARN in Account B>/_nodes/*/stats",
            "<ES Domain ARN in Account B>/_stats",
            "<ES Domain ARN in Account B>/index-name*/_stats",
            "<ES Domain ARN in Account B>/roletest*/_stats"
          ]
        }
      ]
    }

    Para obtener más información sobre los permisos de la política de OpenSearch Service, consulte Cross-account delivery to an OpenSearch Service destination.

  3. (Opcional) Si se ha activado FGAC para el clúster, inicie sesión en los paneles de OpenSearch y añada una asignación de roles. La asignación de roles permite que el rol de Kinesis Data Firehose envíe solicitudes a OpenSearch Service.

Para iniciar sesión en los paneles de OpenSearch y agregar una asignación de roles, siga estos pasos:

  1. Abra Paneles.
  2. Seleccione la pestaña Seguridad.
  3. Elija Roles.
  4. Elija el rol all_access.
  5. Elija la pestaña Usuarios asignados.
  6. Seleccione Administrar asignación.
  7. En la sección Roles de backend, introduzca el rol de Kinesis Data Firehose.
  8. Elija Asignar.

Actualización de la política de roles de IAM para que su rol de Kinesis Data Firehose en la cuenta A envíe datos a la cuenta B

Para enviar datos desde el rol de Kinesis Data Firehose en la cuenta A a su clúster de OpenSearch Service en la cuenta B, actualice la política de Kinesis Data Firehose.

Ejemplo:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:AbortMultipartUpload",
        "s3:GetBucketLocation",
        "s3:GetObject",
        "s3:ListBucket",
        "s3:ListBucketMultipartUploads",
        "s3:PutObject",
        "s3:PutObjectAcl"
      ],
      "Resource": [
        "<Bucket ARN>",
        "<Bucket ARN>/*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "logs:PutLogEvents"
      ],
      "Resource": [
        "arn:aws:logs:<region>:<account-id>:log-group:/aws/kinesisfirehose/<Firehose Name>:log-stream:*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "es:ESHttpPost",
        "es:ESHttpPut",
        "es:DescribeDomain",
        "es:DescribeDomains",
        "es:DescribeDomainConfig"
      ],
      "Resource": [
        "<Domain ARN in Account B>",
        "<Domain ARN in Account B>/*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "es:ESHttpGet"
      ],
      "Resource": [
        "<Domain ARN in Account B>/_all/_settings",
        "<Domain ARN in Account B>/_cluster/stats",
        "<Domain ARN in Account B>/index-name*/_mapping/superstore",
        "<Domain ARN in Account B>/_nodes",
        "<Domain ARN in Account B>/_nodes/stats",
        "<Domain ARN in Account B>/_nodes/*/stats",
        "<Domain ARN in Account B>/_stats",
        "<Domain ARN in Account B>/index-name*/_stats"
      ]
    }
  ]
}

Para obtener más información, consulte Grant Kinesis Data Firehose access to an Amazon OpenSearch Service destination.

Creación de la transmisión de Kinesis Data Firehose en la cuenta A

Para crear una transmisión de Kinesis Data Firehose con acceso entre cuentas a un clúster de OpenSearch Service, use y configure la Interfaz de la línea de comandos de AWS (AWS CLI).

Asegúrese de que la AWS CLI esté actualizada:

aws --version

Nota: Si se muestran errores al ejecutar comandos de AWS CLI, consulte Errores de solución de problemas de la AWS CLI. Además, asegúrese de utilizar la versión más reciente de AWS CLI.

Cree un archivo llamado input.json con el siguiente contenido:

{
  "DeliveryStreamName": "<Firehose Name>",
  "DeliveryStreamType": "DirectPut",
  "ElasticsearchDestinationConfiguration": {
    "RoleARN": "",
    "ClusterEndpoint": "",
    "IndexName": "local",
    "TypeName": "TypeName",
    "IndexRotationPeriod": "OneDay",
    "BufferingHints": {
      "IntervalInSeconds": 60,
      "SizeInMBs": 50
    },
    "RetryOptions": {
      "DurationInSeconds": 60
    },
    "S3BackupMode": "FailedDocumentsOnly",
    "S3Configuration": {
      "RoleARN": "",
      "BucketARN": "",
      "Prefix": "",
      "BufferingHints": {
        "SizeInMBs": 128,
        "IntervalInSeconds": 128
      },
      "CompressionFormat": "UNCOMPRESSED",
      "CloudWatchLoggingOptions": {
        "Enabled": true,
        "LogGroupName": "/aws/kinesisfirehose/<Firehose Name>",
        "LogStreamName": "S3Delivery"
      }
    },
    "CloudWatchLoggingOptions": {
      "Enabled": true,
      "LogGroupName": "/aws/kinesisfirehose/<Firehose Name>",
      "LogStreamName": "ElasticsearchDelivery"
    }
  }
}

Asegúrese de que el valor del punto de enlace se haya introducido correctamente en el campo del atributo ClusterEndpoint.

Nota: Los tipos en la versión 7.x de Elasticsearch están obsoletos. En el caso de las versiones 7.x de Elasticsearch, elimine el atributo TypeName del archivo input.json.

A continuación, ejecute el siguiente comando en el mismo directorio en el que se encuentre el archivo input.json:

aws firehose create-delivery-stream --cli-input-json file://input.json

La sintaxis de este comando crea una transmisión de Kinesis Data Firehose en la cuenta A con destino a un clúster de OpenSearch Service en la cuenta B.

Prueba de la transmisión entre cuentas al clúster de OpenSearch Service

Use el generador de datos de Kinesis (KDG) para transmitir registros a la transmisión de Kinesis Data Firehose en la cuenta A.

El KDG genera muchos registros por segundo. Este nivel de productividad permite a OpenSearch Service tener suficientes puntos de datos para determinar la asignación correcta de una estructura de registros.

La siguiente estructura es la plantilla que se usa en el generador de datos de Kinesis:

{
    "device_id": {{random.number(5)}},
    "device_owner": "{{name.firstName}}  {{name.lastName}}",
    "temperature": {{random.number(
        {
            "min":10,
            "max":150
        }
    )}},
    "timestamp": "{{date.now("DD/MMM/YYYY:HH:mm:ss Z")}}"
}

Para comprobar que la transmisión entre cuentas se haya efectuado correctamente, revise las entradas del índice en la pestaña Índices de su clúster. Compruebe si hay un nombre de índice que utilice el prefijo «local» con la fecha actual. También puede comprobar si los registros están presentes en los paneles de OpenSearch.

Nota: OpenSearch Service tarda unos minutos en determinar la asignación correcta.

Información relacionada

Creating an Amazon Kinesis Data Firehose delivery stream

Writing to Kinesis Data Firehose using Kinesis Data Streams

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 5 meses