Globalmente, muitas organizações possuem dados críticos de negócios dispersos em vários repositórios de conteúdo, dificultando o acesso a essas informações de maneira simplificada e coesa. Criar uma experiência de pesquisa unificada e segura é um desafio significativo para as organizações porque cada repositório contém uma ampla gama de formatos de documentos e mecanismos de controle de acesso.
Amazona Kendra é um serviço de pesquisa empresarial inteligente que permite aos usuários pesquisar em diferentes repositórios de conteúdo. Os clientes são responsáveis por autenticar e autorizar os usuários a obter acesso ao seu aplicativo de pesquisa, e o Amazon Kendra permite a pesquisa segura para aplicativos corporativos, garantindo que os resultados da consulta de pesquisa de um usuário incluam apenas documentos que o usuário está autorizado a ler. O Amazon Kendra pode validar facilmente a identidade de usuários individuais, bem como grupos de usuários que realizam pesquisas com a adição de tokens de pesquisa segura. Ao adicionar tokens de usuário para pesquisa segura, a realização de pesquisas filtradas com base em acesso no Amazon Kendra é simplificada e segura. Você pode passar com segurança as informações de acesso do usuário na carga útil da consulta em vez de usar filtros de atributo para fazer isso. Com esse recurso, o Amazon Kendra pode validar as informações do token e aplicá-las automaticamente aos resultados da pesquisa para uma filtragem baseada em acesso precisa e segura.
O Amazon Kendra oferece suporte ao controle de acesso do usuário baseado em token usando os seguintes tipos de token:
- Abrir ID
- JWT com um segredo compartilhado
- JWT com uma chave pública
- JSON
Anteriormente, vimos uma demonstração de controle de acesso de usuário baseado em token no Amazon Kendra com Open ID. Nesta postagem, demonstramos o controle de acesso do usuário baseado em token no Amazon Kendra com JWT com um segredo compartilhado. JWT, ou JSON Web Token, é um padrão aberto usado para compartilhar informações de segurança entre um cliente e um servidor. Ele contém objetos JSON codificados, incluindo um conjunto de declarações. Os JWTs são assinados usando um algoritmo criptográfico para garantir que as declarações não possam ser alteradas após a emissão do token. Os JWTs são úteis em cenários de autorização e troca de informações.
Os JWTs consistem em três partes separadas por pontos (.):
- cabeçalho – Contém partes como o tipo do token, que é JWT, o algoritmo de assinatura que está sendo usado, como HMAC SHA256 ou RSA, e um identificador de chave opcional.
- carga paga – Contém vários pares chave-valor, chamados reivindicações, que são emitidos pelo provedor de identidade. Além de várias reivindicações relacionadas à emissão e expiração do token, o token também pode conter informações sobre o principal e o inquilino individuais.
- Assinatura – Para criar a parte da assinatura, pegue o cabeçalho codificado, a carga útil codificada, um segredo, o algoritmo especificado no cabeçalho e assine-o.
Portanto, um JWT se parece com o seguinte:
O seguinte é um exemplo de cabeçalho:
Veja a seguir a carga útil de amostra:
O JWT é criado com uma chave secreta, e essa chave secreta é privada para você, o que significa que você nunca a revelará ao público ou a injetará dentro do JWT. Ao receber um JWT do cliente, você pode verificar o JWT com a chave secreta armazenada no servidor. Qualquer modificação no JWT resultará em falha na verificação (validação do JWT).
Esta postagem demonstra o uso de amostra de um JWT usando uma chave de acesso compartilhada e seu uso para proteger os índices do Amazon Kendra com controles de acesso. Na produção, você usa um provedor de serviços de autenticação segura de sua escolha e com base em seus requisitos para gerar JWTs.
Para saber mais sobre JWTs, consulte Introdução aos tokens da Web JSON.
Visão geral da solução
Semelhante ao postar com Open ID, esta solução está desenhada para um conjunto de utilizadores e grupos fazerem consultas a um repositório documental, sendo devolvidos resultados apenas dos documentos que estão autorizados a aceder dentro desse grupo. A tabela a seguir descreve quais documentos cada usuário está autorizado a acessar para nosso caso de uso. Os documentos usados neste exemplo são um subconjunto de documentos públicos da AWS.
Utilizador | Grupo | Tipo de Documento Autorizado para Acesso |
Locatário | . | Blogs |
Patricia | Experiência e dinâmica de loja | Blogs, guias do usuário |
James | Vendas | Blogs, guias do usuário, estudos de caso |
banheiro | Marketing | Blogs, guias do usuário, estudos de caso, relatórios de analistas |
Maria | Arquiteto de Soluções | Blogs, guias do usuário, estudos de caso, relatórios de analistas, whitepapers |
O diagrama a seguir ilustra a criação de um JWT com uma chave de acesso compartilhada para controlar o acesso dos usuários a documentos específicos no índice do Amazon Kendra.
Quando um índice do Amazon Kendra recebe uma chamada de API de consulta com um token de acesso do usuário, ele valida o token usando uma chave secreta compartilhada (armazenada com segurança em Gerenciador de segredos da AWS) e obtém parâmetros como nome de usuário e grupos na carga útil. O índice do Amazon Kendra filtra os resultados da pesquisa com base na lista de controle de acesso (ACL) armazenada e nas informações recebidas no JWT do usuário. Esses resultados filtrados são retornados em resposta à chamada de API de consulta feita pelo aplicativo.
Pré-requisitos
Para seguir as etapas deste post, certifique-se de ter o seguinte:
Gere um JWT com uma chave secreta compartilhada
O exemplo de código Java a seguir mostra como criar um JWT com uma chave secreta compartilhada usando o código-fonte aberto jsonwebtoken pacote. Na produção, você usará um provedor de serviços de autenticação segura de sua escolha e com base em seus requisitos para gerar JWTs.
Passamos as informações de nome de usuário e grupos como declarações na carga útil, assinamos o JWT com o segredo compartilhado e geramos um JWT específico para esse usuário. Forneça uma string de 256 bits como seu segredo e retenha o valor do segredo compartilhado codificado em URL base64 para usar em uma etapa posterior.
Crie um índice Amazon Kendra com um segredo compartilhado JWT
Para obter instruções sobre como criar um índice do Amazon Kendra, consulte Criando um índice. Anote o Gerenciamento de acesso e identidade da AWS (IAM) que você criou durante o processo. Forneça o acesso de função ao bucket S3 e ao Secrets Manager seguindo o princípio do menor privilégio. Para exemplos de políticas, consulte Exemplo de políticas baseadas em identidade do IAM. Depois de criar o índice, seu console do Amazon Kendra deve se parecer com a captura de tela a seguir.
Conclua as etapas a seguir para adicionar seu segredo:
- No console do Amazon Kendra, navegue até o Controle de acesso do usuário guia na página de detalhes do índice.
- Escolha Editar Configurações.
- Como estamos implementando o controle de acesso baseado em token, selecione Sim para Configurações de controle de acesso.
- Debaixo Configuração de token, escolha JWT com segredo compartilhado para Tipo de token.
- Escolha Tipo de segredo, escolha Novo.
- Escolha Nome secreto, entrar
AmazonKendra-jwt-shared-secret
ou qualquer nome de sua escolha. - Escolha Código da chave, insira o ID da chave para corresponder ao seu JWT que você criou no código Java de amostra.
- Escolha Algoritmo, escolha o algoritmo HS256.
- Escolha Segredo partilhado, insira seu segredo codificado de URL base64 retido gerado a partir do código Java anteriormente.
- Escolha Salvar segredo.
O segredo agora será armazenado no Secrets Manager como um JSON Web Key Set (JWKS). Você pode localizá-lo no console do Secrets Manager. Para mais detalhes, consulte Usando um JSON Web Token (JWT) com um segredo compartilhado.
- Expandir o Configuração avançada seção.
Nesta etapa, configuramos o nome de usuário e os grupos que serão extraídos das declarações JWT e combinados com a ACL quando a assinatura for válida.
- Escolha Nome de Utilizadorinsira nome de usuário.
- Escolha Grupos, insira grupos.
- Deixe os campos opcionais como padrão.
- Escolha Próximo, Em seguida, escolha Atualizar.
Prepare seu bucket S3 como uma fonte de dados
Para preparar um bucket S3 como fonte de dados, crie um bucket S3. No terminal com o Interface de linha de comando da AWS (AWS CLI) ou AWS CloudShell, execute os seguintes comandos para fazer upload dos documentos e metadados para o bucket da fonte de dados:
Os documentos que estão sendo consultados são armazenados em um bucket S3. Cada tipo de documento tem uma pasta separada: blogs, estudos de caso, relatórios de analistas, guias de usuário e white papers. Essa estrutura de pastas está contida em uma pasta chamada Data. Os arquivos de metadados, incluindo as ACLs, estão em uma pasta chamada Meta.
Usamos o conector Amazon Kendra S3 para configurar esse bucket S3 como fonte de dados. Quando a fonte de dados é sincronizada com o índice do Amazon Kendra, ela rastreia e indexa todos os documentos, bem como coleta as ACLs e atributos de documentos dos arquivos de metadados. Para saber mais sobre ACLs usando arquivos de metadados, consulte Metadados do documento Amazon S3. Para este exemplo, usamos o atributo personalizado DocumentType
para denotar o tipo do documento. Após o upload, sua estrutura de bucket do S3 deve se parecer com a captura de tela a seguir.
Para definir o atributo personalizado DocumentType
, conclua as seguintes etapas:
- Escolha o seu índice Kendra e escolha Definição de faceta no painel de navegação.
- Escolha Adicionar campo.
- Escolha nome do campo, entrar
DocumentType
. - Escolha Tipo de dados, escolha Tanga.
- Escolha Adicionar.
Agora você pode ingerir documentos do bucket criado para o índice Amazon Kendra usando o conector S3. Para obter instruções completas, consulte Ingestão de documentos por meio do Amazon Kendra S3 Connector.
- No Definir as configurações de sincronização seção, para Insira o local da fonte de dados, insira seu bucket S3 (
s3://kendra-demo-bucket/
). - Escolha Localização da pasta do prefixo dos arquivos de metadados, entrar
Meta/
. - Expandir Configuração adicional.
- No Incluir padrões guia, para Prefixo, entrar
Data/
.
Para obter mais informações sobre conectores compatíveis, consulte conectores.
- Escolha Próximo, Em seguida Próximo novamente, então Atualizar.
- Aguarde até que a fonte de dados seja criada, selecione a fonte de dados e escolha Sincronize agora.
A sincronização da fonte de dados pode levar de 10 a 15 minutos para ser concluída. Quando a sincronização estiver concluída, Último status de sincronização deve mostrar como Bem sucedido.
Consultar um índice do Amazon Kendra
Para executar uma consulta de teste em seu índice, conclua as seguintes etapas:
- No console Amazon Kendra, escolha Pesquisar conteúdo indexado no painel de navegação.
- Expandir Consulta de teste com um token de acesso.
- Escolha Aplicar token.
- Podemos gerar um JWT para o usuário e grupo. Neste exemplo, criamos um JWT para o
AWS-SA
grupo. Substituímos o nome de usuário como Mary e os grupos comoAWS-SA
na etapa de geração do JWT. - Digite o token gerado e escolha Aplicar.
Com base na ACL, devemos obter resultados de todas as pastas: blogs, guias do usuário, estudos de caso, relatórios de analistas e whitepapers.
Da mesma forma, quando logado como James no AWS-Sales
group e passando o JWT correspondente, temos acesso apenas a blogs, guias de usuário e estudos de caso.
Também podemos pesquisar o índice como um convidado sem passar um token. O convidado só pode acessar o conteúdo da pasta de blogs.
Experimente usar outras consultas que você possa imaginar enquanto estiver conectado como usuários e grupos diferentes e observe os resultados.
limpar
Para evitar custos futuros, limpe os recursos que você criou como parte desta solução. Para excluir o índice Amazon Kendra e o bucket S3 criados durante o teste da solução, consulte Limpar. Para excluir o segredo do Secrets Manager, consulte Excluir um segredo do AWS Secrets Manager.
Conclusão
Nesta postagem, vimos como o Amazon Kendra pode realizar pesquisas seguras que retornam apenas resultados de pesquisa com base no acesso do usuário. Com a adição de um JWT com uma chave secreta compartilhada, podemos validar facilmente a identidade de usuários individuais, bem como grupos de usuários que realizam pesquisas. Esta abordagem semelhante pode ser estendida a um JWT com uma chave pública. Para saber mais, consulte Usando um JSON Web Token (JWT) com um segredo compartilhado.
Sobre os autores
Nitin Eusébio See More é arquiteto sênior de soluções corporativas na AWS com mais de 18 anos de experiência em engenharia de software e arquitetura corporativa. Ele trabalha com os clientes para ajudá-los a criar aplicativos bem arquitetados na plataforma AWS. Ele é apaixonado por resolver desafios tecnológicos e ajudar os clientes em sua jornada para a nuvem.
Kruthi Jayasimha Rao é arquiteto de soluções de parceiros com foco em IA e ML. Ela fornece orientação técnica aos parceiros da AWS para seguir as práticas recomendadas para criar soluções seguras, resilientes e altamente disponíveis na Nuvem AWS.
Ishaan Berry é um engenheiro de software na Amazon Web Services, trabalhando no Amazon Kendra, um mecanismo de pesquisa empresarial. Ele é apaixonado por segurança e trabalhou nos principais componentes dos recursos de controle de acesso da Kendra nos últimos 2 anos.
Akash Bhatia é arquiteto de soluções principais da AWS. Seu foco atual é ajudar os clientes corporativos a alcançar seus resultados de negócios por meio da arquitetura e implementação de soluções inovadoras e resilientes em escala. Ele trabalha com tecnologia há mais de 15 anos em empresas que vão desde a Fortune 100 até start-ups nos setores verticais de Manufatura, Aeroespacial e Varejo.
- Conteúdo com tecnologia de SEO e distribuição de relações públicas. Seja amplificado hoje.
- Platoblockchain. Inteligência Metaverso Web3. Conhecimento Ampliado. Acesse aqui.
- Cunhando o Futuro com Adryenn Ashley. Acesse aqui.
- Fonte: https://aws.amazon.com/blogs/machine-learning/secure-your-amazon-kendra-indexes-with-the-acl-using-a-jwt-shared-secret-key/
- :é
- $UP
- 10
- 100
- 11
- 15 anos
- 420
- 7
- 8
- 9
- a
- Capaz
- Sobre
- Acesso
- realizar
- preciso
- Alcançar
- em
- Adição
- Indústria aeroespacial
- Depois de
- AI
- algoritmo
- Todos os Produtos
- permite
- Amazon
- Amazona Kendra
- Amazon Web Services
- entre
- analista
- e
- api
- Aplicação
- aplicações
- Aplicar
- abordagem
- arquitetura
- SOMOS
- AS
- At
- atributos
- Autenticação
- autorização
- automaticamente
- disponível
- AWS
- baseado
- BE
- Porque
- ser
- MELHOR
- melhores práticas
- entre
- Pouco
- Blogs
- construir
- negócio
- by
- chamada
- chamado
- CAN
- casas
- Estudos de Caso
- desafiar
- desafios
- escolha
- Escolha
- reivindicações
- classe
- cliente
- Na nuvem
- código
- Empresas
- completar
- componentes
- Configuração
- cônsul
- não contenho
- contém
- conteúdo
- conteúdo
- ao controle
- controles
- Correspondente
- custos
- crio
- criado
- Criar
- criação
- crítico
- cripto
- criptografia
- Atual
- personalizadas
- Clientes
- dados,
- Data
- Padrão
- demonstrar
- demonstra
- projetado
- detalhe
- detalhes
- diferente
- difícil
- disperso
- documento
- INSTITUCIONAIS
- down
- durante
- cada
- facilmente
- permite
- Motor
- engenheiro
- Engenharia
- garantir
- Entrar
- Empreendimento
- exemplo
- exchange
- vasta experiência
- Falha
- Característica
- Funcionalidades
- Campos
- Arquivos
- filtragem
- filtros
- Foco
- seguir
- seguinte
- Escolha
- Fortune
- da
- cheio
- futuro
- Ganho
- gerar
- gerado
- geração
- Grupo
- Do grupo
- Locatário
- orientações
- Guias
- Ter
- cabeçalhos
- ajuda
- altamente
- Como funciona o dobrador de carta de canal
- Como Negociar
- HTML
- http
- HTTPS
- ID
- identificador
- Identidade
- implementação
- importar
- in
- incluir
- Incluindo
- índice
- índices
- Individual
- INFORMAÇÕES
- inovadores
- instantâneos
- em vez disso
- instruções
- Inteligente
- ISS
- emissão
- Emitido
- IT
- ESTÁ
- Java
- banheiro
- viagem
- json
- jwt
- Chave
- chaves
- Criança
- APRENDER
- como
- Line
- Lista
- olhar
- parece
- OLHARES
- moldadas
- fazer
- Fazendo
- Gerente
- maneira
- fabrica
- muitos
- Match
- correspondido
- significa
- Meta
- metadados
- Minutos
- ML
- mais
- nome
- Nomeado
- Navegar
- Navegação
- Novo
- objetos
- observar
- of
- on
- aberto
- open source
- ordem
- organizações
- Outros
- contornos
- pacote
- página
- pares
- pão
- parâmetros
- parte
- parceiro
- Parceiros
- peças
- passar
- Passagem
- apaixonado
- passado
- Realizar
- realização
- plataforma
- platão
- Inteligência de Dados Platão
- PlatãoData
- políticas
- Publique
- práticas
- Preparar
- anteriormente
- Diretor
- privado
- processo
- Produção
- fornecer
- provedor
- fornece
- público
- consultas
- alcance
- variando
- Leia
- receber
- recebido
- recebe
- em relação a
- substituir
- Relatórios
- repositório
- Requisitos
- resiliente
- Recursos
- resposta
- responsável
- resultar
- Resultados
- varejo
- reter
- retorno
- revelar
- Tipo
- rsa
- Execute
- Escala
- cenários
- Pesquisar
- motor de busca
- Segredo
- Seção
- seguro
- Secured
- firmemente
- segurança
- separado
- serviço
- Provedor de Serviço
- Serviços
- conjunto
- vários
- SHA256
- Partilhar
- compartilhado
- rede de apoio social
- mostrar
- Shows
- assinar
- assinado
- periodo
- assinatura
- semelhante
- simplificada
- Software
- Engenheiro de Software
- Engenharia de software
- solução
- Soluções
- Resolvendo
- fonte
- específico
- especificada
- padrão
- start-ups
- Passo
- Passos
- armazenadas
- simplificada
- Tanga
- estrutura
- caso
- tal
- Suportado
- suportes
- .
- mesa
- Tire
- Dados Técnicos:
- Tecnologia
- inquilino
- terminal
- teste
- ensaio
- que
- A
- as informações
- deles
- Eles
- Este
- três
- Através da
- tempo
- para
- token
- Tokens
- tipos
- unificado
- URL
- Uso
- usar
- caso de uso
- Utilizador
- usuários
- VALIDAR
- validação
- valor
- vário
- Verificação
- verificar
- Verticais
- web
- serviços web
- BEM
- qual
- enquanto
- Whitepapers
- QUEM
- Largo
- Ampla variedade
- precisarão
- de
- dentro
- sem
- trabalhou
- trabalhar
- trabalho
- Workshops
- anos
- Vocês
- investimentos
- zefirnet
- Zip