Como configurar o streaming entre contas do Kinesis Data Firehose para o Amazon OpenSearch Service?

9 minuto de leitura
0

Quero configurar um fluxo do Amazon Kinesis Data Firehose que envie dados para um cluster do Amazon OpenSearch Service em outra conta.

Breve descrição

Configure o Kinesis Data Firehose e suas dependências, como o Amazon Simple Storage Service (Amazon S3) e o Amazon CloudWatch, para transmissão entre contas diferentes. A entrega de dados em streaming funciona para clusters do OpenSearch Service acessíveis ao público, independentemente de o controle de acesso refinado (FGAC) estar ativado ou não.

Para configurar um fluxo do Kinesis Data Firehose para que ele envie dados a um cluster do OpenSearch Service, realize as seguintes etapas:

  1. Crie um bucket do Amazon S3 na conta A.
  2. Crie um grupo de logs do CloudWatch e um fluxo de logs na conta A.
  3. Crie um perfil e uma política do Kinesis Data Firehose na conta A.
  4. Crie um cluster do OpenSearch Service acessível ao público na conta B para onde o perfil do Kinesis Data Firehose na conta A transmitirá dados.
  5. (Opcional) Se o FGAC estiver ativado, faça login no OpenSearch Dashboards e adicione um mapeamento de perfis.
  6. Atualize a política de perfil do AWS Identity Access Management (IAM) para seu perfil do Kinesis Data Firehose na conta A para enviar dados para a conta B.
  7. Crie o fluxo do Kinesis Data Firehose na conta A.
  8. Teste o streaming entre contas para o cluster do OpenSearch Service.

Resolução

Crie um bucket do Amazon S3 na conta A

Crie um bucket do S3 na conta A. O bucket do Amazon S3 gera um nome do recurso da Amazon (ARN).

Observação: o ARN completo é usado posteriormente para conceder ao Kinesis Data Firehose acesso para salvar e recuperar registros do bucket do Amazon S3.

Crie um grupo de logs do CloudWatch e um fluxo de logs na conta A

Para criar um grupo de logs do CloudWatch, realize as seguintes etapas:

  1. Abra o console do CloudWatch.
  2. No painel de navegação, selecione Logs e, depois, selecione Grupos de logs.
  3. Selecione Criar grupo de logs.
  4. Insira um nome para o grupo de logs.
  5. Selecione o botão Criar grupo de logs para salvar seu novo grupo de logs.
  6. Pesquise seu grupo de logs recém-criado e selecione-o.

Para criar um fluxo de logs do Amazon CloudWatch, realize as seguintes etapas:

  1. Selecione Criar fluxo de logs.
  2. Insira um Nome do fluxo de logs.
  3. Selecione Criar fluxo de logs.
    Importante: os nomes do grupo de logs do CloudWatch e do fluxo de logs do CloudWatch são necessários ao criar políticas de perfil do Kinesis Data Firehose.

Crie um perfil e uma política do Kinesis Data Firehose na conta A

  1. Abra o console do AWS Identity and Access Management (IAM).
  2. Crie uma política de IAM que permita ao Kinesis Data Firehose fazer o seguinte:
    Salva logs de fluxo no CloudWatch
    Salvar dados no Amazon S3
    Transmitir dados para o cluster do OpenSearch Service

Exemplo:

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

Observação: posteriormente, você anexará permissões para transmitir à política do cluster do OpenSearch Service. Entretanto, é preciso primeiro criar o cluster na conta B.

  1. Salve a política.
  2. Selecione Criar um perfil.
  3. Adicione a política ao seu perfil do Kinesis Data Firehose.

Crie um cluster do OpenSearch Service acessível ao público na conta B para o perfil do Kinesis Data Firehose na conta A transmitir dados

  1. Crie um cluster do OpenSearch Service acessível ao público na conta B.
  2. Registre o ARN do domínio do OpenSearch Service. O ARN será usado em uma etapa posterior.
  3. Defina as configurações de segurança do cluster.
    Importante: você deve definir as configurações de segurança do OpenSearch Service para permitir que o perfil do Kinesis Data Firehose na conta A transmita para o cluster do OpenSearch Service.

Para definir as configurações de segurança, realize as seguintes etapas:

  1. No OpenSearch Service, navegue até Política de acesso.

  2. Selecione a política de acesso definida pelo JSON. A política deve ter as seguintes permissões:

    {
      "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 obter mais informações sobre permissões dentro da política do OpenSearch Service, consulte Entrega entre contas para um destino do OpenSearch Service.

  3. (Opcional) Se o FGAC estiver ativado no seu cluster, faça login no OpenSearch Dashboards e adicione um mapeamento de perfis. O mapeamento de perfis permite que o perfil do Kinesis Data Firehose envie solicitações ao OpenSearch Service.

Para fazer login no OpenSearch Dashboards e adicionar um mapeamento de perfis, realize as seguintes etapas:

  1. Abra o Dashboards.
  2. Selecione a guia Segurança.
  3. Selecione Perfis.
  4. Selecione o perfil all_access.
  5. Selecione a guia Usuários mapeados.
  6. Selecione Gerenciar mapeamento.
  7. Na seção Perfis de back-end, insira o perfil do Kinesis Data Firehose.
  8. Selecione Mapear.

Atualize a política de perfil do IAM para seu perfil do Kinesis Data Firehose na conta A para enviar dados para a conta B

Para enviar dados do seu perfil do Kinesis Data Firehose na conta A para o cluster do OpenSearch Service na conta B, atualize a política do Kinesis Data Firehose.

Exemplo:

{
  "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 obter mais informações, consulte Conceder acesso ao Kinesis Data Firehose a um destino do Amazon OpenSearch Service.

Crie o fluxo do Kinesis Data Firehose na conta A

Para criar um fluxo do Kinesis Data Firehose com acesso entre contas para um cluster do OpenSearch Service, use e configure a AWS Command Line Interface (AWS CLI).

Verifique se sua AWS CLI está atualizada:

aws --version

Observação: se você receber erros ao executar comandos da AWS CLI, consulte Solucionar erros da AWS CLI. Além disso, verifique se você está usando a versão mais recente da AWS CLI.

Crie um arquivo chamado input.json com o conteúdo a seguir:

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

Verifique se o valor do endpoint foi inserido corretamente no campo do atributo ClusterEndpoint.

Observação: os tipos estão obsoletos na versão 7.x do Elasticsearch. Para as versões 7.x do Elasticsearch, remova o atributo TypeName do arquivo input.json.

Em seguida, execute o comando a seguir no mesmo diretório do local do arquivo input.json:

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

Essa sintaxe de comando cria um fluxo do Kinesis Data Firehose na conta A com destino a um cluster do OpenSearch Service na conta B.

Teste o streaming entre contas direcionado ao cluster do OpenSearch Service

Use o Kinesis Data Generator (KDG) para transmitir registros para o fluxo do Kinesis Data Firehose na conta A.

O KDG gera muitos registros por segundo. Esse nível de produtividade permite que o OpenSearch Service tenha pontos de dados suficientes para determinar o mapeamento correto de uma estrutura de registro.

Veja a seguir a estrutura do modelo usada no 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")}}"
}

Para verificar se o streaming entre contas obteve êxito, analise as entradas do índice na guia Índices do seu cluster. Verifique se há um nome de índice que usa o prefixo "local" com a data atual. Você também pode verificar se os registros estão presentes no OpenSearch Dashboards.

Observação: o OpenSearch Service leva alguns minutos para determinar o mapeamento correto.

Informações relacionadas

Criação de um fluxo de entrega do Amazon Kinesis Data Firehose

Gravação no Kinesis Data Firehose usando o Kinesis Data Streams

AWS OFICIAL
AWS OFICIALAtualizada há 5 meses