Como configurar o streaming entre contas do Kinesis Data Firehose para o Amazon OpenSearch Service?
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:
- Crie um bucket do Amazon S3 na conta A.
- Crie um grupo de logs do CloudWatch e um fluxo de logs na conta A.
- Crie um perfil e uma política do Kinesis Data Firehose na conta A.
- 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.
- (Opcional) Se o FGAC estiver ativado, faça login no OpenSearch Dashboards e adicione um mapeamento de perfis.
- 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.
- Crie o fluxo do Kinesis Data Firehose na conta A.
- 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:
- Abra o console do CloudWatch.
- No painel de navegação, selecione Logs e, depois, selecione Grupos de logs.
- Selecione Criar grupo de logs.
- Insira um nome para o grupo de logs.
- Selecione o botão Criar grupo de logs para salvar seu novo grupo de logs.
- Pesquise seu grupo de logs recém-criado e selecione-o.
Para criar um fluxo de logs do Amazon CloudWatch, realize as seguintes etapas:
- Selecione Criar fluxo de logs.
- Insira um Nome do fluxo de logs.
- 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
- Abra o console do AWS Identity and Access Management (IAM).
- 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.
- Salve a política.
- Selecione Criar um perfil.
- 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
- Crie um cluster do OpenSearch Service acessível ao público na conta B.
- Registre o ARN do domínio do OpenSearch Service. O ARN será usado em uma etapa posterior.
- 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:
-
No OpenSearch Service, navegue até Política de acesso.
-
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.
-
(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:
- Abra o Dashboards.
- Selecione a guia Segurança.
- Selecione Perfis.
- Selecione o perfil all_access.
- Selecione a guia Usuários mapeados.
- Selecione Gerenciar mapeamento.
- Na seção Perfis de back-end, insira o perfil do Kinesis Data Firehose.
- 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
Conteúdo relevante
- AWS OFICIALAtualizada há 2 anos
- AWS OFICIALAtualizada há um ano