À l'échelle mondiale, de nombreuses organisations disposent de données commerciales critiques dispersées dans divers référentiels de contenu, ce qui rend difficile l'accès à ces informations de manière rationalisée et cohérente. La création d'une expérience de recherche unifiée et sécurisée est un défi important pour les organisations, car chaque référentiel contient un large éventail de formats de documents et de mécanismes de contrôle d'accès.
Amazone Kendra est un service de recherche d'entreprise intelligent qui permet aux utilisateurs d'effectuer des recherches dans différents référentiels de contenu. Les clients sont responsables de l'authentification et de l'autorisation des utilisateurs à accéder à leur application de recherche, et Amazon Kendra permet la recherche sécurisée d'applications d'entreprise, en s'assurant que les résultats de la requête de recherche d'un utilisateur incluent uniquement les documents que l'utilisateur est autorisé à lire. Amazon Kendra peut facilement valider l'identité des utilisateurs individuels ainsi que des groupes d'utilisateurs qui effectuent des recherches grâce à l'ajout de jetons de recherche sécurisés. En ajoutant des jetons d'utilisateur pour une recherche sécurisée, l'exécution de recherches filtrées basées sur l'accès dans Amazon Kendra est simplifiée et sécurisée. Vous pouvez transmettre en toute sécurité les informations d'accès utilisateur dans la charge utile de la requête au lieu d'utiliser des filtres d'attributs pour ce faire. Grâce à cette fonctionnalité, Amazon Kendra peut valider les informations de jeton et les appliquer automatiquement aux résultats de la recherche pour un filtrage précis et sécurisé basé sur l'accès.
Amazon Kendra prend en charge le contrôle d'accès utilisateur basé sur les jetons à l'aide des types de jetons suivants :
- Ouvrir l'identifiant
- JWT avec un secret partagé
- JWT avec une clé publique
- JSON
Auparavant, nous avons vu une démonstration de contrôle d'accès utilisateur basé sur des jetons dans Amazon Kendra avec Open ID. Dans cet article, nous démontrons le contrôle d'accès utilisateur basé sur des jetons dans Amazon Kendra avec JWT avec un secret partagé. JWT, ou JSON Web Token, est une norme ouverte utilisée pour partager des informations de sécurité entre un client et un serveur. Il contient des objets JSON encodés, y compris un ensemble de revendications. Les JWT sont signés à l'aide d'un algorithme cryptographique pour garantir que les revendications ne peuvent pas être modifiées après l'émission du jeton. Les jetons JWT sont utiles dans les scénarios concernant l'autorisation et l'échange d'informations.
Les JWT se composent de trois parties séparées par des points (.) :
- En-tête – Il contient des parties telles que le type du jeton, qui est JWT, l'algorithme de signature utilisé, tel que HMAC SHA256 ou RSA, et un identifiant de clé facultatif.
- Charge utile – Celui-ci contient plusieurs paires clé-valeur, appelées prétentions, qui sont émis par le fournisseur d'identité. En plus de plusieurs réclamations relatives à l'émission et à l'expiration du jeton, le jeton peut également contenir des informations sur le principal et le locataire individuels.
- Signature – Pour créer la partie signature, vous prenez l'en-tête encodé, la charge utile encodée, un secret, l'algorithme spécifié dans l'en-tête et vous le signez.
Par conséquent, un JWT ressemble à ceci :
Voici un exemple d'en-tête :
Voici l'exemple de charge utile :
Le JWT est créé avec une clé secrète, et cette clé secrète vous est privée, ce qui signifie que vous ne la révélerez jamais au public ni ne l'injecterez dans le JWT. Lorsque vous recevez un JWT du client, vous pouvez vérifier le JWT avec la clé secrète stockée sur le serveur. Toute modification du JWT entraînera un échec de vérification (validation JWT).
Cet article montre l'exemple d'utilisation d'un JWT à l'aide d'une clé d'accès partagée et son utilisation pour sécuriser les index Amazon Kendra avec des contrôles d'accès. En production, vous utilisez un fournisseur de services d'authentification sécurisé de votre choix et en fonction de vos besoins pour générer des JWT.
Pour en savoir plus sur les JWT, consultez Présentation des jetons Web JSON.
Vue d'ensemble de la solution
Semblable à la poster avec Open ID, cette solution est conçue pour qu'un ensemble d'utilisateurs et de groupes effectuent des requêtes de recherche dans un référentiel de documents, et les résultats sont renvoyés uniquement à partir des documents dont l'accès est autorisé au sein de ce groupe. Le tableau suivant décrit les documents auxquels chaque utilisateur est autorisé à accéder pour notre cas d'utilisation. Les documents utilisés dans cet exemple sont un sous-ensemble de documents publics AWS.
Utilisateur | Réservation de groupe | Type de document autorisé pour l'accès |
GUEST | . | Blogs |
Patricia | Témoignages | Blogs, guides de l'utilisateur |
James | Ventes | Blogs, guides d'utilisation, études de cas |
John | Stratégie | Blogs, guides d'utilisation, études de cas, rapports d'analystes |
Marie | Architecte de solutions | Blogs, guides d'utilisation, études de cas, rapports d'analystes, livres blancs |
Le schéma suivant illustre la création d'un JWT avec une clé d'accès partagée pour contrôler l'accès des utilisateurs aux documents spécifiques de l'index Amazon Kendra.
Lorsqu'un index Amazon Kendra reçoit un appel d'API de requête avec un jeton d'accès utilisateur, il valide le jeton à l'aide d'une clé secrète partagée (stockée en toute sécurité dans AWS Secrets Manager) et obtient des paramètres tels que le nom d'utilisateur et les groupes dans la charge utile. L'index Amazon Kendra filtre les résultats de la recherche en fonction de la liste de contrôle d'accès (ACL) stockée et des informations reçues dans le JWT de l'utilisateur. Ces résultats filtrés sont renvoyés en réponse à l'appel d'API de requête effectué par l'application.
Pré-requis
Afin de suivre les étapes décrites dans cet article, assurez-vous que vous disposez des éléments suivants :
Générer un JWT avec une clé secrète partagée
L'exemple de code Java suivant montre comment créer un JWT avec une clé secrète partagée à l'aide de l'open-source jsonwebtoken emballer. En production, vous utiliserez un fournisseur de services d'authentification sécurisé de votre choix et en fonction de vos besoins pour générer des JWT.
Nous transmettons le nom d'utilisateur et les informations sur les groupes en tant que revendications dans la charge utile, signons le JWT avec le secret partagé et générons un JWT spécifique à cet utilisateur. Fournissez une chaîne de 256 bits comme secret et conservez la valeur du secret partagé encodé en URL base64 à utiliser dans une étape ultérieure.
Créer un index Amazon Kendra avec un secret partagé JWT
Pour obtenir des instructions sur la création d'un index Amazon Kendra, reportez-vous à Création d'un index. Notez le Gestion des identités et des accès AWS (IAM) que vous avez créé au cours du processus. Fournissez au rôle l'accès au compartiment S3 et au gestionnaire de secrets en suivant le principe du moindre privilège. Pour des exemples de politiques, reportez-vous à Exemples de stratégies IAM basées sur l'identité. Après avoir créé l'index, votre console Amazon Kendra devrait ressembler à la capture d'écran suivante.
Suivez les étapes suivantes pour ajouter votre secret :
- Sur la console Amazon Kendra, accédez au Contrôle d'accès utilisateur onglet sur la page de détail de votre index.
- Selectionnez Modifier les paramètres.
- Étant donné que nous mettons en œuvre un contrôle d'accès basé sur des jetons, sélectionnez Oui sous Paramètres de contrôle d'accès.
- Sous Configuration du jeton, choisissez JWT avec secret partagé en Type de jeton.
- Pour Type de secret, choisissez Nouveauté.
- Pour Nom secret, Entrer
AmazonKendra-jwt-shared-secret
ou tout autre nom de votre choix. - Pour ID de clé, entrez l'ID de clé correspondant à votre JWT que vous avez créé dans l'exemple de code Java.
- Pour Algorithme, choisissez l'algorithme HS256.
- Pour Secret partagé, entrez votre URL secrète encodée en base64 conservée générée à partir du code Java précédemment.
- Selectionnez Enregistrer le secret.
Le secret sera désormais stocké dans Secrets Manager en tant qu'ensemble de clés Web JSON (JWKS). Vous pouvez le localiser sur la console Secrets Manager. Pour plus de détails, reportez-vous à Utilisation d'un jeton Web JSON (JWT) avec un secret partagé.
- Élargir la Configuration avancée .
Dans cette étape, nous configurons le nom d'utilisateur et les groupes qui seront extraits des revendications JWT et mis en correspondance avec l'ACL lorsque la signature est valide.
- Pour Nom d'utilisateurSaisissez votre nom d'utilisateur.
- Pour Groupes, entrez des groupes.
- Laissez les champs optionnels par défaut.
- Selectionnez Suivant, Puis choisissez Mises à jour.
Préparez votre compartiment S3 en tant que source de données
Pour préparer un compartiment S3 en tant que source de données, créez un compartiment S3. Dans le terminal avec le Interface de ligne de commande AWS (AWS CLI) ou AWS Cloud Shell, exécutez les commandes suivantes pour importer les documents et les métadonnées dans le bucket de la source de données :
Les documents interrogés sont stockés dans un compartiment S3. Chaque type de document a un dossier séparé : blogs, études de cas, rapports d'analystes, guides d'utilisation et livres blancs. Cette structure de dossiers est contenue dans un dossier nommé Data. Les fichiers de métadonnées, y compris les ACL, se trouvent dans un dossier nommé Meta.
Nous utilisons le connecteur Amazon Kendra S3 pour configurer ce compartiment S3 en tant que source de données. Lorsque la source de données est synchronisée avec l'index Amazon Kendra, elle explore et indexe tous les documents et collecte les ACL et les attributs de document à partir des fichiers de métadonnées. Pour en savoir plus sur les ACL utilisant des fichiers de métadonnées, reportez-vous à Métadonnées de document Amazon S3. Pour cet exemple, nous utilisons l'attribut personnalisé DocumentType
pour indiquer le type de document. Après le téléchargement, la structure de votre compartiment S3 devrait ressembler à la capture d'écran suivante.
Pour définir l'attribut personnalisé DocumentType
, complétez les étapes suivantes:
- Choisissez votre indice Kendra et choisissez Définition des facettes dans le volet de navigation.
- Selectionnez Ajouter le champ.
- Pour Nom de domaine, Entrer
DocumentType
. - Pour Type de données, choisissez Chaîne.
- Selectionnez Ajouter.
Vous pouvez désormais ingérer des documents du compartiment que vous avez créé dans l'index Amazon Kendra à l'aide du connecteur S3. Pour des instructions complètes, reportez-vous à Ingestion de documents via le connecteur Amazon Kendra S3.
- Dans le Configurer les paramètres de synchronisation section, pour Entrez l'emplacement de la source de données, entrez votre compartiment S3 (
s3://kendra-demo-bucket/
). - Pour Emplacement du dossier de préfixe des fichiers de métadonnées, Entrer
Meta/
. - Développer vous Configuration supplémentaire.
- Sur le Inclure des modèles onglet, pour Préfixe, Entrer
Data/
.
Pour plus d'informations sur les connecteurs pris en charge, voir Connecteurs RF.
- Selectionnez Suivant, puis Suivant encore une fois Mises à jour.
- Attendez que la source de données soit créée, puis sélectionnez la source de données et choisissez Synchroniser maintenant.
La synchronisation de la source de données peut prendre 10 à 15 minutes. Lorsque votre synchronisation est terminée, État de la dernière synchronisation devrait apparaître comme Réussi.
Interroger un index Amazon Kendra
Pour exécuter une requête test sur votre index, procédez comme suit :
- Sur la console Amazon Kendra, choisissez Rechercher du contenu indexé dans le volet de navigation.
- Développer vous Tester la requête avec un jeton d'accès.
- Selectionnez Appliquer le jeton.
- Nous pouvons générer un JWT pour l'utilisateur et le groupe. Dans cet exemple, nous créons un JWT pour le
AWS-SA
groupe. Nous remplaçons le nom d'utilisateur par Marie et les groupes parAWS-SA
dans l'étape de génération JWT. - Entrez le jeton généré et choisissez Appliquer.
Sur la base de l'ACL, nous devrions être les résultats de tous les dossiers : blogs, guides d'utilisation, études de cas, rapports d'analystes et livres blancs.
De même, lorsque vous êtes connecté en tant que James à partir du AWS-Sales
groupe et en passant le JWT correspondant, nous n'avons accès qu'aux blogs, guides d'utilisation et études de cas.
Nous pouvons également rechercher l'index en tant qu'invité sans passer de jeton. L'invité ne peut accéder qu'au contenu du dossier blogs.
Expérimentez en utilisant d'autres requêtes auxquelles vous pouvez penser lorsque vous êtes connecté en tant qu'utilisateurs et groupes différents et observez les résultats.
Nettoyer
Pour éviter d'engager des coûts futurs, nettoyez les ressources que vous avez créées dans le cadre de cette solution. Pour supprimer l'index Amazon Kendra et le compartiment S3 créés lors du test de la solution, reportez-vous à Nettoyer. Pour supprimer le secret Secrets Manager, reportez-vous à Supprimer un secret AWS Secrets Manager.
Conclusion
Dans cet article, nous avons vu comment Amazon Kendra peut effectuer des recherches sécurisées qui ne renvoient que des résultats de recherche basés sur l'accès de l'utilisateur. Avec l'ajout d'un JWT avec une clé secrète partagée, nous pouvons facilement valider l'identité des utilisateurs individuels ainsi que des groupes d'utilisateurs qui effectuent des recherches. Cette approche similaire peut être étendue à un JWT avec une clé publique. Pour en savoir plus, consultez Utilisation d'un jeton Web JSON (JWT) avec un secret partagé.
À propos des auteurs
Nitin Eusèbe est un architecte senior de solutions d'entreprise chez AWS avec plus de 18 ans d'expérience en génie logiciel et en architecture d'entreprise. Il travaille avec les clients pour les aider à créer des applications bien architecturées sur la plate-forme AWS. Il est passionné par la résolution de problèmes technologiques et aide les clients dans leur parcours vers le cloud.
Kruthi Jayasimha Rao est un architecte de solutions partenaires spécialisé dans l'IA et le ML. Elle fournit des conseils techniques aux partenaires AWS pour suivre les meilleures pratiques afin de créer des solutions sécurisées, résilientes et hautement disponibles dans le cloud AWS.
Baie d'Ishaan est ingénieur logiciel chez Amazon Web Services, travaillant sur Amazon Kendra, un moteur de recherche d'entreprise. Il est passionné par la sécurité et a travaillé sur les composants clés des fonctionnalités de contrôle d'accès de Kendra au cours des 2 dernières années.
Akash Bhatia est un architecte principal de solutions avec AWS. Son objectif actuel est d'aider les entreprises clientes à atteindre leurs résultats commerciaux en concevant et en mettant en œuvre des solutions innovantes et résilientes à grande échelle. Il travaille dans le domaine de la technologie depuis plus de 15 ans dans des entreprises allant de Fortune 100 à des start-ups dans les secteurs de la fabrication, de l'aérospatiale et de la vente au détail.
- Contenu propulsé par le référencement et distribution de relations publiques. Soyez amplifié aujourd'hui.
- Platoblockchain. Intelligence métaverse Web3. Connaissance Amplifiée. Accéder ici.
- Frapper l'avenir avec Adryenn Ashley. Accéder ici.
- La source: https://aws.amazon.com/blogs/machine-learning/secure-your-amazon-kendra-indexes-with-the-acl-using-a-jwt-shared-secret-key/
- :est
- $UP
- 10
- 100
- 11
- 15 ans
- 420
- 7
- 8
- 9
- a
- Capable
- A Propos
- accès
- accomplir
- Avec cette connaissance vient le pouvoir de prendre
- atteindre
- à travers
- ajout
- Industrie aerospatiale
- Après
- AI
- algorithme
- Tous
- permet
- Amazon
- Amazone Kendra
- Amazon Web Services
- parmi
- analyste
- et les
- api
- Application
- applications
- Appliquer
- une approche
- architecture
- SONT
- AS
- At
- attributs
- Authentification
- autorisation
- automatiquement
- disponibles
- AWS
- basé
- BE
- car
- va
- LES MEILLEURS
- les meilleures pratiques
- jusqu'à XNUMX fois
- Bit
- blogue
- construire
- la performance des entreprises
- by
- Appelez-nous
- appelé
- CAN
- maisons
- Études de cas
- challenge
- globaux
- le choix
- Selectionnez
- prétentions
- classe
- client
- le cloud
- code
- Sociétés
- complet
- composants électriques
- configuration
- Console
- contiennent
- contient
- contenu
- contenu
- des bactéries
- contrôles
- Correspondant
- Costs
- engendrent
- créée
- La création
- création
- critique
- Crypto
- cryptographique
- Courant
- Customiser
- Clients
- données
- Date
- Réglage par défaut
- démontrer
- démontre
- un
- détail
- détails
- différent
- difficile
- Dispersé
- document
- INSTITUTIONNELS
- down
- pendant
- chacun
- même
- permet
- Moteur
- ingénieur
- ENGINEERING
- assurer
- Entrer
- Entreprise
- exemple
- échange
- d'experience
- Échec
- Fonctionnalité
- Fonctionnalités:
- Des champs
- Fichiers
- filtration
- filtres
- Focus
- suivre
- Abonnement
- Pour
- fortune
- De
- plein
- avenir
- Gain
- générer
- généré
- génération
- Réservation de groupe
- Groupes
- GUEST
- l'orientation
- Guides
- Vous avez
- têtes
- aider
- très
- Comment
- How To
- HTML
- http
- HTTPS
- ID
- identifiant
- Identite
- la mise en œuvre
- importer
- in
- comprendre
- Y compris
- indice
- index
- individuel
- d'information
- technologie innovante
- instantané
- plutôt ;
- Des instructions
- Intelligent
- ISS
- émission
- Publié
- IT
- SES
- Java
- John
- chemin
- json
- Jwt
- ACTIVITES
- clés
- Enfant
- APPRENTISSAGE
- comme
- Gamme
- Liste
- Style
- ressembler
- LOOKS
- LES PLANTES
- a prendre une
- Fabrication
- manager
- manière
- fabrication
- de nombreuses
- Match
- appariés
- veux dire
- Meta
- Métadonnées
- Minutes
- ML
- PLUS
- prénom
- Nommé
- NAVIGUER
- Navigation
- Nouveauté
- objets
- observer
- of
- on
- ouvert
- open source
- de commander
- organisations
- Autre
- grandes lignes
- paquet
- page
- paires
- pain
- paramètres
- partie
- les partenaires
- partenaires,
- les pièces
- pass
- En passant
- passionné
- passé
- Effectuer
- effectuer
- plateforme
- Platon
- Intelligence des données Platon
- PlatonDonnées
- politiques
- Post
- pratiques
- Préparer
- précédemment
- Directeur
- Privé
- processus
- Vidéo
- fournir
- de voiture.
- fournit
- public
- requêtes
- gamme
- allant
- Lire
- recevoir
- reçu
- reçoit
- en ce qui concerne
- remplacer
- Rapports
- dépôt
- Exigences
- résilient
- Resources
- réponse
- responsables
- résultat
- Résultats
- détail
- conserver
- retourner
- révéler
- Rôle
- rsa
- Courir
- Escaliers intérieurs
- scénarios
- Rechercher
- moteur de recherche
- secret
- Section
- sécurisé
- sécurisé
- en toute sécurité
- sécurité
- séparé
- service
- Prestataire de services
- Services
- set
- plusieurs
- SHA256
- Partager
- commun
- devrait
- montrer
- Spectacles
- signer
- signé
- significative
- signature
- similaires
- simplifié
- Logiciels
- Software Engineer
- génie logiciel
- sur mesure
- Solutions
- Résoudre
- Identifier
- groupe de neurones
- spécifié
- Standard
- start-ups
- étapes
- Étapes
- stockée
- rationalisé
- Chaîne
- structure
- études
- tel
- Appareils
- Les soutiens
- combustion propre
- table
- Prenez
- Technique
- Technologie
- locataire
- terminal
- tester
- Essais
- qui
- Le
- les informations
- leur
- Les
- Ces
- trois
- Avec
- fiable
- à
- jeton
- Tokens
- types
- unifiée
- URL
- Utilisation
- utilisé
- cas d'utilisation
- Utilisateur
- utilisateurs
- VALIDER
- validation
- Plus-value
- divers
- Vérification
- vérifier
- verticales
- web
- services Web
- WELL
- qui
- tout en
- Livres blancs
- WHO
- large
- Large gamme
- sera
- comprenant
- dans les
- sans
- travaillé
- de travail
- vos contrats
- Ateliers
- années
- Vous n'avez
- Votre
- zéphyrnet
- Zip