Come posso configurare lo streaming tra più account da Kinesis Data Firehose al Servizio OpenSearch di Amazon?

9 minuti di lettura
0

Desidero configurare un flusso Amazon Kinesis Data Firehose che invii dati a un cluster del Servizio OpenSearch di Amazon in un altro account.

Breve descrizione

Configura Kinesis Data Firehose e le sue dipendenze, come Amazon Simple Storage Service (Amazon S3) e Amazon CloudWatch, per lo streaming tra diversi account. La distribuzione dei dati in streaming funziona per i cluster del Servizio OpenSearch accessibili al pubblico, indipendentemente dal fatto che il controllo granulare degli accessi (FGAC) sia attivo o meno.

Per configurare un flusso Kinesis Data Firehose in modo che invii dati a un cluster del Servizio OpenSearch, completa i passaggi seguenti:

  1. Crea un bucket Amazon S3 nell'Account A.
  2. Crea un gruppo di log CloudWatch e accedi al flusso di log nell'Account A.
  3. Crea un ruolo e una policy di Kinesis Data Firehose nell'Account A.
  4. Crea un cluster del Servizio OpenSearch accessibile al pubblico nell'Account B per il ruolo Kinesis Data Firehose nell'Account A a cui trasmettere i dati.
  5. (Facoltativo) Se il controllo granulare degli accessi è attivo, accedi a OpenSearch Dashboards e aggiungi una mappatura dei ruoli.
  6. Aggiorna la policy del ruolo AWS Identity Access Management (IAM) per il tuo ruolo Kinesis Data Firehose nell'Account A in modo che invii dati all'Account B.
  7. Crea il flusso Kinesis Data Firehose nell'Account A.
  8. Prova lo streaming tra più account sul cluster del Servizio OpenSearch.

Risoluzione

Creazione di un bucket Amazon S3 nell'Account A

Crea un bucket S3 nell'account A. Il bucket Amazon S3 genera un nome della risorsa Amazon (ARN).

Nota: l'ARN completo verrà utilizzato in seguito per concedere a Kinesis Data Firehose l'accesso per salvare e recuperare i record dal bucket Amazon S3.

Creazione di un gruppo di log CloudWatch e un flusso di log nell'Account A

Per creare un gruppo di log CloudWatch, completa i passaggi seguenti:

  1. Apri la console CloudWatch.
  2. Nel pannello di navigazione, scegli Log, quindi scegli Gruppi di log.
  3. Scegli Crea gruppo di log.
  4. Inserisci un nome per il Gruppo di log.
  5. Seleziona il pulsante Crea gruppo di log per salvare il tuo nuovo gruppo di log.
  6. Cerca il gruppo di log che hai appena creato, quindi selezionalo.

Per creare un flusso di log Amazon CloudWatch, completa i passaggi seguenti:

  1. Scegli Crea flusso di log.
  2. Inserisci un Nome flusso di log.
  3. Scegli Crea flusso di log.
    Importante: i nomi del gruppo di log e del flusso di log di CloudWatch sono richiesti quando vengono create le policy dei ruoli di Kinesis Data Firehose.

Creazione di un ruolo e di una policy Kinesis Data Firehose nell'Account A

  1. Apri la console AWS Identity e Access Management (IAM).
  2. Crea una policy IAM che consenta a Kinesis Data Firehose di eseguire le seguenti operazioni:
    Salvare i log di flusso su CloudWatch
    Registrare su Amazon S3
    Trasmettere dati al cluster del Servizio OpenSearch

Esempio:

{
  "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: successivamente aggiungerai le autorizzazioni per lo streaming alla policy del cluster del Servizio OpenSearch. Tuttavia, dovrai prima creare il cluster nell'Account B.

  1. Salva la policy.
  2. Scegli Crea un ruolo.
  3. Aggiungi la policy al tuo ruolo Kinesis Data Firehose.

Creazione di un cluster del Servizio OpenSearch accessibile al pubblico nell'Account B per il ruolo Kinesis Data Firehose nell'Account A per la trasmissione di dati

  1. Crea il cluster del Servizio OpenSearch accessibile al pubblico nell'Account B.
  2. Registra l'ARN del dominio del Servizio OpenSearch. L'ARN verrà utilizzato in una fase successiva.
  3. Configura le impostazioni di sicurezza per il tuo cluster.
    Importante: è necessario configurare le impostazioni di sicurezza del Servizio OpenSearch per consentire al ruolo Kinesis Data Firehose nell'Account A di trasmettere i dati al tuo cluster del Servizio OpenSearch.

Per configurare le impostazioni di sicurezza, procedi nel modo seguente:

  1. Nel Servizio OpenSearch, spostati su Policy d'accesso.

  2. Seleziona la policy di accesso definita da JSON. La tua policy deve avere le seguenti autorizzazioni:

    {
      "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"
          ]
        }
      ]
    }

    Per ulteriori informazioni sulle autorizzazioni all'interno della policy del Servizio OpenSearch, consulta la sezione Distribuzione tra più account a una destinazione del Servizio OpenSearch.

  3. (Facoltativo) Se il controllo granulare degli accessi è attivo sul tuo cluster, accedi a Pannelli di controllo OpenSearch e aggiungi una mappatura dei ruoli. La mappatura dei ruoli consente al ruolo Kinesis Data Firehose di inviare richieste al Servizio OpenSearch.

Per accedere a Pannelli di controllo OpenSearch e aggiungere una mappatura dei ruoli, completa i passaggi seguenti:

  1. Apri Pannelli di controllo.
  2. Scegli la scheda Sicurezza.
  3. Scegli Ruoli.
  4. Scegli il ruolo all_access.
  5. Scegli la scheda Utenti mappati.
  6. Scegli Gestisci mappatura.
  7. Nella sezione Ruoli di backend, inserisci il ruolo di Kinesis Data Firehose.
  8. Scegli Mappa.

Aggiornamento della policy del ruolo IAM per il tuo ruolo Kinesis Data Firehose nell'Account A per inviare dati all'Account B

Per inviare dati dal ruolo di Kinesis Data Firehose nell'Account A al cluster del Servizio OpenSearch nell'Account B, aggiorna la policy di Kinesis Data Firehose.

Esempio:

{
  "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"
      ]
    }
  ]
}

Per ulteriori informazioni, consulta la sezione Concedi a Kinesis Data Firehose l'accesso a una destinazione del Servizio Amazon OpenSearch.

Creazione del flusso Kinesis Data Firehose nell'Account A

Per creare un flusso Kinesis Data Firehose con accesso multi-account diretto verso un cluster del Servizio OpenSearch, utilizza e configura l'interfaccia della linea di comando AWS (AWS CLI).

Verifica che l'interfaccia AWS CLI sia aggiornata:

aws --version

Nota: se visualizzi dei messaggi di errore quando esegui i comandi dell'interfaccia della linea di comando AWS (AWS CLI), consulta la sezione Risolvi gli errori AWS CLI. Inoltre, assicurati di utilizzare la versione più recente di AWS CLI.

Crea un file chiamato input.json con il seguente contenuto:

{
  "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"
    }
  }
}

Assicurati che il valore dell'endpoint sia inserito correttamente nel campo dell'attributo ClusterEndpoint.

Nota: nella versione 7.x di Elasticsearch l'indicazione del tipo di dati è obsoleta. Per le versioni 7.x di Elasticsearch, rimuovi l'attributo TypeName dal file input.json.

Quindi, esegui il comando seguente nella stessa directory in cui si trova il file input.json:

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

Questa sintassi di comando crea un flusso Kinesis Data Firehose nell'Account A che ha come destinazione un cluster del Servizio OpenSearch nell'Account B.

Prova lo streaming multi-account diretto verso il cluster del Servizio OpenSearch

Usa il Kinesis Data Generator (KDG) per trasmettere i record all'interno del flusso Kinesis Data Firehose nell'Account A.

Il KDG genera molti record al secondo. Questo livello di produttività consente al Servizio OpenSearch di disporre di punti dati sufficienti per determinare la corretta mappatura di una struttura di record.

Di seguito è riportata la struttura modello utilizzata nel Kinesis Data Generator:

{
    "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")}}"
}

Per verificare che lo streaming tra più account sia andato a buon fine, controlla le voci dell'indice nella scheda Indici del tuo cluster. Controlla se esiste un nome indice che utilizza il prefisso "local" con la data corrente. Puoi anche verificare se i record sono presenti in Pannelli di controllo OpenSearch.

Nota: il Servizio OpenSearch impiega alcuni minuti per determinare la mappatura corretta.

Informazioni correlate

Creazione di un flusso di distribuzione Amazon Kinesis Data Firehose

Scrittura su flusso di dati Amazon Data Firehose utilizzando Kinesis

AWS UFFICIALE
AWS UFFICIALEAggiornata 5 mesi fa