Edite dados confidenciais de streaming de dados quase em tempo real usando o Amazon Comprehend e o Amazon Kinesis Data Firehose PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.

Edite dados confidenciais de dados de streaming quase em tempo real usando o Amazon Comprehend e o Amazon Kinesis Data Firehose

A entrega de dados e insights quase em tempo real permite que as empresas respondam rapidamente às necessidades de seus clientes. Os dados em tempo real podem vir de várias fontes, incluindo mídias sociais, dispositivos IoT, monitoramento de infraestrutura, monitoramento de call center e muito mais. Devido à amplitude e profundidade dos dados ingeridos de várias fontes, as empresas procuram soluções para proteger a privacidade de seus clientes e impedir que dados confidenciais sejam acessados ​​de sistemas finais. Anteriormente, você precisava confiar em mecanismos de regras de informações de identificação pessoal (PII) que poderiam sinalizar falsos positivos ou dados ausentes, ou precisava criar e manter modelos personalizados de aprendizado de máquina (ML) para identificar PII em seus dados de streaming. Você também precisava implementar e manter a infraestrutura necessária para dar suporte a esses mecanismos ou modelos.

Para ajudar a agilizar esse processo e reduzir custos, você pode usar Amazon Comprehend, um serviço de processamento de linguagem natural (NLP) que usa ML para encontrar insights e relacionamentos como pessoas, lugares, sentimentos e tópicos em texto não estruturado. Agora você pode usar os recursos do Amazon Comprehend ML para detectar e redigir PII em e-mails de clientes, tíquetes de suporte, análises de produtos, mídias sociais e muito mais. Não é necessária experiência em ML. Por exemplo, você pode analisar tíquetes de suporte e artigos de conhecimento para detectar entidades PII e redigir o texto antes de indexar os documentos. Depois disso, os documentos ficam livres de entidades PII e os usuários podem consumir os dados. A redação de entidades PII ajuda você a proteger a privacidade de seu cliente e a cumprir as leis e regulamentos locais.

Nesta postagem, você aprenderá a implementar o Amazon Comprehend em suas arquiteturas de streaming para redigir entidades PII quase em tempo real usando Mangueira de incêndio de dados do Amazon Kinesis de AWS Lambda.

Esta postagem se concentra na redação de dados de campos selecionados que são ingeridos em uma arquitetura de streaming usando o Kinesis Data Firehose, onde você deseja criar, armazenar e manter cópias derivadas adicionais dos dados para consumo por usuários finais ou aplicativos downstream. Se você estiver usando Fluxos de dados do Amazon Kinesis ou tiver casos de uso adicionais fora da redação de PII, consulte Traduza, redija e analise dados de streaming usando funções SQL com Amazon Kinesis Data Analytics, Amazon Translate e Amazon Comprehend, onde mostramos como você pode usar Estúdio de análise de dados do Amazon Kinesis alimentado por Apache Zepelim e Apache Flink para analisar, traduzir e redigir interativamente campos de texto em dados de streaming.

Visão geral da solução

A figura a seguir mostra um exemplo de arquitetura para executar a redação de PII de dados de streaming em tempo real, usando Serviço de armazenamento simples da Amazon (Amazon S3), Transformação de dados do Kinesis Data Firehose, Amazon Comprehend e AWS Lambda. Além disso, utilizamos o SDK da AWS para Python (Boto3) para as funções do Lambda. Conforme indicado no diagrama, o bucket bruto do S3 contém dados não editados e o bucket editado do S3 contém dados editados após usar o Amazon Comprehend DetectPiiEntities API dentro de uma função Lambda.

Custos envolvidos

Além dos custos do Kinesis Data Firehose, Amazon S3 e Lambda, essa solução incorrerá em custos de uso do Amazon Comprehend. O valor pago é um fator do número total de registros que contêm PII e os caracteres processados ​​pela função do Lambda. Para obter mais informações, consulte Preços do Amazon Kinesis Data Firehose, Preços do Amazon Comprehend e Preços AWS Lambda.

Como exemplo, vamos supor que você tenha 10,000 registros de logs e o valor da chave do qual você deseja redigir PII seja de 500 caracteres. Dos 10,000 registros de log, 50 são identificados como contendo PII. Os detalhes dos custos são os seguintes:

Contém Custo de PII:

  • Tamanho de cada valor de chave = 500 caracteres (1 unidade = 100 caracteres)
  • Número de unidades (100 caracteres) por registro (mínimo de 3 unidades) = 5
  • Total de unidades = 10,000 (registros) x 5 (unidades por registro) x 1 (solicitações do Amazon Comprehend por registro) = 50,000
  • Preço por unidade = $ 0.000002
    • Custo total para identificar registros de log com PII usando a API ContainsPiiEntities = US$ 0.1 [50,000 unidades x US$ 0.000002] 

Custo de redação de PII:

  • Total de unidades contendo PII = 50 (registros) x 5 (unidades por registro) x 1 (solicitações do Amazon Comprehend por registro) = 250
  • Preço por unidade = $ 0.0001
    • Custo total para identificar a localização de PII usando a API DetectPiiEntities = [número de unidades] x [custo por unidade] = 250 x $ 0.0001 = $ 0.025

Custo total para identificação e redação:

  • Custo total: US$ 0.1 (validação se o campo contiver PII) + US$ 0.025 (editar campos que contenham PII) = US$ 0.125

Implante a solução com o AWS CloudFormation

Para este post, oferecemos uma Formação da Nuvem AWS redação de dados de streaming modelo, que fornece todos os detalhes da implementação para permitir implantações repetíveis. Após a implantação, esse modelo cria dois buckets do S3: um para armazenar os dados brutos de amostra ingeridos do Amazon Kinesis Data Generator (KDG) e outro para armazenar os dados editados. Além disso, ele cria um fluxo de entrega do Kinesis Data Firehose com DirectPUT como entrada e uma função Lambda que chama o Amazon Comprehend ContémPiiEntities e Detectar PiiEntities API para identificar e redigir dados PII. A função do Lambda depende da entrada do usuário nas variáveis ​​de ambiente para determinar quais valores de chave precisam ser inspecionados para PII.

A função Lambda nesta solução limitou os tamanhos de carga útil a 100 KB. Se uma carga útil for fornecida em que o texto for maior que 100 KB, a função do Lambda a ignorará.

Para implantar a solução, conclua as seguintes etapas:

  1. Inicie a pilha do CloudFormation no Leste dos EUA (Norte da Virgínia) us-east-1:
    Edite dados confidenciais de streaming de dados quase em tempo real usando o Amazon Comprehend e o Amazon Kinesis Data Firehose PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.
  2. Insira um nome de pilha e deixe outros parâmetros em seu padrão
  3. Selecionar Eu reconheço que o AWS CloudFormation pode criar recursos IAM com nomes personalizados.
  4. Escolha Criar pilha.

Implantar recursos manualmente

Se você preferir construir a arquitetura manualmente em vez de usar o AWS CloudFormation, conclua as etapas nesta seção.

Crie os depósitos S3

Crie seus buckets do S3 com as seguintes etapas:

  1. No console do Amazon S3, escolha Baldes no painel de navegação.
  2. Escolha Criar balde.
  3. Crie um bucket para seus dados brutos e outro para seus dados editados.
  4. Anote os nomes dos buckets que você acabou de criar.

Criar a função Lambda

Para criar e implantar a função do Lambda, conclua as etapas a seguir:

  1. No console do Lambda, escolha Criar função.
  2. Escolha Autor do zero.
  3. Escolha Nome da Função, entrar AmazonComprehendPII-Redact.
  4. Escolha Runtime, escolha Python 3.9.
  5. Escolha Arquitetura, selecione x86_64.
  6. Escolha Função de execução, selecione Criar uma nova função com permissões do Lambda.
  7. Depois de criar a função, digite o seguinte código:
    import json
    import boto3
    import os
    import base64
    import sys
    
    def lambda_handler(event, context):
        
        output = []
        
        for record in event['records']:
            
            # Gathers keys from enviroment variables and makes a list of desired keys to check for PII
            rawkeys = os.environ['keys']
            splitkeys = rawkeys.split(", ")
            print(splitkeys)
            #decode base64
            #Kinesis data is base64 encoded so decode here
            payloadraw=base64.b64decode(record["data"]).decode('utf-8')
            #Loads decoded payload into json
            payloadjsonraw = json.loads(payloadraw)
            
            # Creates Comprehend client
            comprehend_client = boto3.client('comprehend')
            
            
            # This codes handles the logic to check for keys, identify if PII exists, and redact PII if available. 
            for i in payloadjsonraw:
                # checks if the key found in the message matches a redact
                if i in splitkeys:
                    print("Redact key found, checking for PII")
                    payload = str(payloadjsonraw[i])
                    # check if payload size is less than 100KB
                    if sys.getsizeof(payload) < 99999:
                        print('Size is less than 100KB checking if value contains PII')
                        # Runs Comprehend ContainsPiiEntities API call to see if key value contains PII
                        pii_identified = comprehend_client.contains_pii_entities(Text=payload, LanguageCode='en')
                        
                        # If PII is not found, skip over key
                        if (pii_identified['Labels']) == []:
                            print('No PII found')
                        else:
                        # if PII is found, run through redaction logic
                            print('PII found redacting')
                            # Runs Comprehend DetectPiiEntities call to find exact location of PII
                            response = comprehend_client.detect_pii_entities(Text=payload, LanguageCode='en')
                            entities = response['Entities']
                            # creates redacted_payload which will be redacted
                            redacted_payload = payload
                            # runs through a loop that gathers necessary values from Comprehend API response and redacts values
                            for entity in entities:
                                char_offset_begin = entity['BeginOffset']
                                char_offset_end = entity['EndOffset']
                                redacted_payload = redacted_payload[:char_offset_begin] + '*'*(char_offset_end-char_offset_begin) + redacted_payload[char_offset_end:]
                            # replaces original value with redacted value
                            payloadjsonraw[i] = redacted_payload
                            print(str(payloadjsonraw[i]))
                    else:
                        print ('Size is more than 100KB, skipping inspection')
                else:
                    print("Key value not found in redaction list")
            
            redacteddata = json.dumps(payloadjsonraw)
            
            # adds inspected record to record
            output_record = {
                'recordId': record['recordId'],
                'result': 'Ok',
                'data' : base64.b64encode(redacteddata.encode('utf-8'))
            }
            output.append(output_record)
            print(output_record)
            
        print('Successfully processed {} records.'.format(len(event['records'])))
        
        return {'records': output}

  8. Escolha Implantação.
  9. No painel de navegação, escolha Configuração.
  10. Navegar para Variáveis ​​ambientais.
  11. Escolha Editar.
  12. Escolha Chave, entrar keys.
  13. Escolha Valor, insira os valores de chave dos quais deseja redigir PII, separados por vírgula e espaço. Por exemplo, digite Tweet1, Tweet2 se você estiver usando os dados de teste de amostra fornecidos na próxima seção desta postagem.
  14. Escolha Salvar.
  15. Navegar para Configuração geral.
  16. Escolha Editar.
  17. Altere o valor de Timeout a 1 minuto.
  18. Escolha Salvar.
  19. Navegar para Permissões.
  20. Escolha o nome da função em Função de execução.
    Você é redirecionado para o Gerenciamento de acesso e identidade da AWS (IAM).
  21. Escolha Adicionar permissões, escolha Anexar políticas.
  22. Entrar Comprehend na barra de pesquisa e escolha a política ComprehendFullAccess.
  23. Escolha Anexar políticas.

Crie o fluxo de entrega do Firehose

Para criar seu fluxo de entrega do Firehose, conclua as etapas a seguir:

  1. No console Kinesis Data Firehose, escolha Criar fluxo de entrega.
  2. Escolha fonte, selecione PUT direto.
  3. Escolha Destino, selecione Amazon S3.
  4. Escolha Nome do fluxo de entrega, entrar ComprehendRealTimeBlog.
  5. Debaixo Transforme registros de origem com AWS Lambda, selecione ativado.
  6. Escolha Função AWS Lambda, insira o ARN da função que você criou ou navegue até a função AmazonComprehendPII-Redact.
  7. Escolha Tamanho do buffer, defina o valor para 1 MB.
  8. Escolha Intervalo de buffer, deixe como 60 segundos.
  9. Debaixo Configurações de destino, selecione o bucket do S3 que você criou para os dados editados.
  10. Debaixo Configurações de backup, selecione o bucket do S3 que você criou para os registros brutos.
  11. Debaixo Permissão, crie ou atualize uma função do IAM ou escolha uma função existente com as permissões adequadas.
  12. Escolha Criar fluxo de entrega.

Implante a solução de dados de streaming com o Kinesis Data Generator

Você pode usar o Kinesis Data Generator (KDG) para ingerir dados de amostra para o Kinesis Data Firehose e testar a solução. Para simplificar esse processo, fornecemos uma função Lambda e um modelo CloudFormation para criar um Amazon Cognito usuário e atribuir as permissões apropriadas para usar o KDG.

  1. No Página do Amazon Kinesis Data Generator, escolha Criar um usuário do Cognito com o CloudFormation.Você é redirecionado para o console do AWS CloudFormation para criar sua pilha.
  2. Forneça um nome de usuário e uma senha para o usuário com o qual você faz login no KDG.
  3. Deixe as outras configurações em seus padrões e crie sua pilha.
  4. No Saídas guia, escolha o link KDG UI.
  5. Digite seu nome de usuário e senha para fazer login.

Envie registros de teste e valide a redação no Amazon S3

Para testar a solução, conclua as seguintes etapas:

  1. Faça login na URL do KDG que você criou na etapa anterior.
  2. Escolha a região em que a pilha do AWS CloudFormation foi implantada.
  3. Escolha Transmissão/transmissão de transmissão, escolha o fluxo de entrega que você criou (se você usou o modelo, ele tem o formato accountnumber-awscomprehend-blog).
  4. Deixe as outras configurações em seus padrões.
  5. Para o modelo de registro, você pode criar seus próprios testes ou usar o modelo a seguir.Se estiver usando os dados de amostra fornecidos abaixo para teste, você deve ter atualizado as variáveis ​​de ambiente no AmazonComprehendPII-Redact Função lambda para Tweet1, Tweet2. Se implantado via CloudFormation, atualize as variáveis ​​de ambiente para Tweet1, Tweet2 dentro da função Lambda criada. Os dados de teste de amostra estão abaixo:
    {"User":"12345", "Tweet1":" Good morning, everybody. My name is Van Bokhorst Serdar, and today I feel like sharing a whole lot of personal information with you. Let's start with my Email address SerdarvanBokhorst@dayrep.com. My address is 2657 Koontz Lane, Los Angeles, CA. My phone number is 818-828-6231.", "Tweet2": "My Social security number is 548-95-6370. My Bank account number is 940517528812 and routing number 195991012. My credit card number is 5534816011668430, Expiration Date 6/1/2022, my C V V code is 121, and my pin 123456. Well, I think that's it. You know a whole lot about me. And I hope that Amazon comprehend is doing a good job at identifying PII entities so you can redact my personal information away from this streaming record. Let's check"}

  6. Escolha Enviar dadose aguarde alguns segundos para que os registros sejam enviados ao seu stream.
  7. Após alguns segundos, pare o gerador KDG e verifique seus buckets do S3 para os arquivos entregues.

Veja a seguir um exemplo dos dados brutos no bucket bruto do S3:

{"User":"12345", "Tweet1":" Good morning, everybody. My name is Van Bokhorst Serdar, and today I feel like sharing a whole lot of personal information with you. Let's start with my Email address SerdarvanBokhorst@dayrep.com. My address is 2657 Koontz Lane, Los Angeles, CA. My phone number is 818-828-6231.", "Tweet2": "My Social security number is 548-95-6370. My Bank account number is 940517528812 and routing number 195991012. My credit card number is 5534816011668430, Expiration Date 6/1/2022, my C V V code is 121, and my pin 123456. Well, I think that's it. You know a whole lot about me. And I hope that Amazon comprehend is doing a good job at identifying PII entities so you can redact my personal information away from this streaming record. Let's check"}

Veja a seguir um exemplo dos dados editados no bucket do S3 editado:

{"User":"12345", "Tweet1":"Good morning, everybody. My name is *******************, and today I feel like sharing a whole lot of personal information with you. Let's start with my Email address ****************************. My address is ********************************** My phone number is ************.", "Tweet"2: "My Social security number is ***********. My Bank account number is ************ and routing number *********. My credit card number is ****************, Expiration Date ********, my C V V code is ***, and my pin ******. Well, I think that's it. You know a whole lot about me. And I hope that Amazon comprehend is doing a good job at identifying PII entities so you can redact my personal information away from this streaming record. Let's check"}

As informações confidenciais foram removidas das mensagens editadas, proporcionando confiança de que você pode compartilhar esses dados com os sistemas finais.

Limpar

Quando terminar de experimentar esta solução, limpe seus recursos usando o console do AWS CloudFormation para excluir todos os recursos implantados neste exemplo. Se você seguiu as etapas manuais, precisará excluir manualmente os dois buckets, o AmazonComprehendPII-Redact função, o ComprehendRealTimeBlog stream, o grupo de logs para o ComprehendRealTimeBlog stream e quaisquer funções do IAM que foram criadas.

Conclusão

Esta postagem mostrou como integrar a redação de PII em sua arquitetura de streaming quase em tempo real e reduzir o tempo de processamento de dados executando a redação em voo. Nesse cenário, você fornece os dados editados aos usuários finais e um administrador do data lake protege o bucket bruto para uso posterior. Você também pode criar processamento adicional com o Amazon Comprehend para identificar tom ou sentimento, identificar entidades nos dados e classificar cada mensagem.

Fornecemos etapas individuais para cada serviço como parte desta postagem e também incluímos um modelo do CloudFormation que permite provisionar os recursos necessários em sua conta. Este modelo deve ser usado apenas para prova de conceito ou cenários de teste. Consulte os guias do desenvolvedor para Amazon Comprehend, Lambda e Mangueira de dados Kinesis para quaisquer limites de serviço.

Para começar com a identificação e redação de PII, consulte Informações de identificação pessoal (PII). Com a arquitetura de exemplo desta postagem, você pode integrar qualquer uma das APIs do Amazon Comprehend com dados quase em tempo real usando a transformação de dados do Kinesis Data Firehose. Para saber mais sobre o que você pode criar com seus dados quase em tempo real com o Kinesis Data Firehose, consulte o Guia do desenvolvedor do Amazon Kinesis Data Firehose. Essa solução está disponível em todas as regiões da AWS onde o Amazon Comprehend e o Kinesis Data Firehose estão disponíveis.


Sobre os autores

Edite dados confidenciais de streaming de dados quase em tempo real usando o Amazon Comprehend e o Amazon Kinesis Data Firehose PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai. Joe Morotti é Arquiteto de Soluções da Amazon Web Services (AWS), ajudando clientes corporativos no Centro-Oeste dos EUA. Ele ocupou uma ampla gama de funções técnicas e gosta de mostrar a arte do possível para o cliente. Em seu tempo livre, ele gosta de passar um tempo de qualidade com sua família explorando novos lugares e analisando o desempenho de sua equipe esportiva

Edite dados confidenciais de streaming de dados quase em tempo real usando o Amazon Comprehend e o Amazon Kinesis Data Firehose PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.Sriharsh Adari é Arquiteto de Soluções Sênior na Amazon Web Services (AWS), onde ajuda os clientes a trabalhar de trás para frente a partir dos resultados de negócios para desenvolver soluções inovadoras na AWS. Ao longo dos anos, ele ajudou vários clientes em transformações de plataformas de dados em verticais do setor. Sua principal área de especialização inclui Estratégia de Tecnologia, Análise de Dados e Ciência de Dados. Em seu tempo livre, ele gosta de jogar tênis, assistir a programas de TV e jogar Tabla.

Carimbo de hora:

Mais de Aprendizado de máquina da AWS