Les maillages de services routent le trafic HTTP entre les microservices, mais sans politiques d'autorisation, n'importe quel service peut appeler n'importe quel autre. Les politiques d'autorisation vous permettent de contrôler quels services peuvent envoyer des requêtes HTTP à d'autres, en fonction de l'identité (compte de service) et de l'opération (méthode HTTP, chemin). Commencez par une politique de refus par défaut, puis accordez progressivement l'accès pour construire un modèle de sécurité zero-trust.
Cette rubrique explique comment créer des politiques d'autorisation étape par étape en utilisant l'exemple d'application Bookinfo. Vous allez créer quatre politiques qui ouvrent progressivement l'accès à chaque service dans la chaîne de requêtes.
Fonctionnement des politiques d'autorisation
Une politique d'autorisation se compose de trois parties :
| Partie | Objectif | Exemple |
|---|---|---|
| Sélecteur | Cible des charges de travail spécifiques par libellé | app: productpage |
| Action | Spécifie s'il faut autoriser ou refuser les requêtes correspondantes | ALLOW |
| Règles | Définit les critères de correspondance pour la source de la requête (from) et l'opération (to) |
Principal de la source, méthode HTTP |
Comportements clés :
Une spécification vide (
spec: {}) sans sélecteur s'applique à toutes les charges de travail du namespace et refuse toutes les requêtes. Cela sert de base de refus par défaut.L'omission de
fromdans une règle signifie que les requêtes de toutes les sources correspondent, tant que les conditionstosont remplies. Cela a des implications en matière de sécurité : la politique permet effectivement à tous les utilisateurs et charges de travail d'atteindre l'opération cible.
Prérequis
Avant de commencer, assurez-vous d'avoir :
L'application Bookinfo déployée dans l'instance ASM. Pour plus de détails, consultez Déployer une application dans une instance ASM
Les ressources Istio configurées pour le routage du trafic. Pour plus de détails, consultez Utiliser les ressources Istio pour router le trafic vers différentes versions d'un service
Étape 1 : Créer une politique de base de refus par défaut
Créez une politique d'autorisation vide qui refuse toutes les requêtes vers les charges de travail du namespace default. Cela établit la base zero-trust.
Connectez-vous à la console ASM. Dans le volet de navigation de gauche, sélectionnez Service Mesh > Mesh Management.
Sur la page Mesh Management, cliquez sur le nom de l'instance ASM. Dans le volet de navigation de gauche, sélectionnez Mesh Security Center > AuthorizationPolicy. Cliquez sur Create from YAML.
-
Sélectionnez default dans la liste déroulante Namespace, choisissez un modèle, collez le code YAML suivant dans l'éditeur de code, puis cliquez sur Create. La politique allow-nothing apparaît sur la page AuthorizationPolicy.
apiVersion: security.istio.io/v1beta1 kind: AuthorizationPolicy metadata: name: allow-nothing namespace: default spec: {} -
Vérifiez la politique. Ouvrez
http://<ASM-gateway-IP>/productpagedans votre navigateur. La page renvoieRBAC: access denied, confirmant que toutes les requêtes sont désormais bloquées.RemarquePour obtenir des instructions sur la manière d'obtenir l'adresse IP de la passerelle ASM, consultez Utiliser les ressources Istio pour router le trafic vers différentes versions d'un service.
Étape 2 : Autoriser l'accès au service productpage
Créez une politique qui autorise les requêtes HTTP GET vers la charge de travail productpage. Cette politique omet le champ from, elle permet donc les requêtes GET depuis n'importe quelle source, y compris la passerelle ASM qui gère le trafic externe.
Connectez-vous à la console ASM. Dans le volet de navigation de gauche, sélectionnez Service Mesh > Mesh Management.
Sur la page Mesh Management, cliquez sur le nom de l'instance ASM. Dans le volet de navigation de gauche, sélectionnez Mesh Security Center > AuthorizationPolicy.
Créez la politique en utilisant l'une des méthodes suivantes.
Méthode 1 : YAML
Sur la page AuthorizationPolicy, cliquez sur Create from YAML.
-
Sélectionnez default dans la liste déroulante Namespace, choisissez un modèle, collez le code YAML suivant dans l'éditeur de code, puis cliquez sur Create.
apiVersion: security.istio.io/v1beta1 kind: AuthorizationPolicy metadata: name: "productpage-viewer" namespace: default spec: selector: matchLabels: app: productpage action: ALLOW rules: - to: - operation: methods: ["GET"]
Méthode 2 : Interface de la console
Sur la page AuthorizationPolicy, cliquez sur Create.
-
Configurez les paramètres suivants et cliquez sur Create.
Paramètre Valeur Name productpage-viewerPolicy Type ALLOW Namespace (dans l'onglet Workload Scope) default Effective Scope Service Workload productpage Request Matching Rules Activez Methods dans Add Request Target et définissez la valeur sur GET
La politique productpage-viewer apparaît sur la page AuthorizationPolicy.
-
Vérifiez la politique. Ouvrez
http://<ASM-gateway-IP>/productpagedans votre navigateur. La page productpage se charge, mais les sections details et reviews affichent des erreurs. Ceci est normal : vous n'avez autorisé l'accès qu'au service productpage lui-même. Les services en aval (details et reviews) sont toujours bloqués par la politique de refus par défaut.
Étape 3 : Autoriser l'accès au service details
Autorisez le service productpage à appeler le service details en restreignant l'accès aux requêtes provenant du compte de service bookinfo-productpage.
Trouver le compte de service productpage
Connectez-vous à la console ACK. Dans le volet de navigation de gauche, cliquez sur Clusters.
Cliquez sur le nom du cluster. Dans le volet de navigation de gauche, sélectionnez Workloads > Deployments.
-
Trouvez le déploiement productpage-v1. Sélectionnez More > View in YAML dans la colonne Actions. Localisez le champ
serviceAccount. La valeur estbookinfo-productpage.
Créer la politique d'autorisation
Connectez-vous à la console ASM. Dans le volet de navigation de gauche, sélectionnez Service Mesh > Mesh Management.
Sur la page Mesh Management, cliquez sur le nom de l'instance ASM. Dans le volet de navigation de gauche, sélectionnez Mesh Security Center > AuthorizationPolicy.
Créez la politique en utilisant l'une des méthodes suivantes.
Méthode 1 : YAML
Sur la page AuthorizationPolicy, cliquez sur Create from YAML.
-
Sélectionnez default dans la liste déroulante Namespace, choisissez un modèle, collez le code YAML suivant dans l'éditeur de code, puis cliquez sur Create.
kind: AuthorizationPolicy apiVersion: security.istio.io/v1beta1 metadata: name: details-viewer namespace: default spec: action: ALLOW rules: - to: - operation: methods: - GET - from: - source: principals: - cluster.local/ns/default/sa/bookinfo-productpage # Service account from the previous step selector: matchLabels: app: details
Méthode 2 : Interface de la console
Sur la page AuthorizationPolicy, cliquez sur Create.
-
Configurez les paramètres suivants et cliquez sur Create.
Remarquebookinfo-productpageest la valeurserviceAccountobtenue à l'étape précédente.Paramètre Valeur Name details-viewerPolicy Type ALLOW Namespace (dans l'onglet Workload Scope) default Effective Scope Service Workload details Request Matching Rules Dans Add Request Source, activez Principals et définissez la valeur sur cluster.local/ns/default/sa/bookinfo-productpage. Dans Add Request Target, activez Methods et définissez la valeur surGET.
La politique details-viewer apparaît sur la page AuthorizationPolicy.
-
Vérifiez la politique. Ouvrez
http://<ASM-gateway-IP>/productpagedans votre navigateur. La section details à gauche se charge maintenant correctement. La section reviews à droite affiche toujours une erreur car aucune politique n'a encore été créée pour le service reviews.
Étape 4 : Autoriser l'accès au service reviews
Créez une politique d'autorisation pour le service reviews en utilisant le même compte de service bookinfo-productpage comme source autorisée.
Connectez-vous à la console ASM. Dans le volet de navigation de gauche, sélectionnez Service Mesh > Mesh Management.
Sur la page Mesh Management, cliquez sur le nom de l'instance ASM. Dans le volet de navigation de gauche, sélectionnez Mesh Security Center > AuthorizationPolicy.
Créez la politique en utilisant l'une des méthodes suivantes.
Méthode 1 : YAML
Sur la page AuthorizationPolicy, cliquez sur Create from YAML.
-
Sélectionnez default dans la liste déroulante Namespace, choisissez un modèle, collez le code YAML suivant dans l'éditeur de code, puis cliquez sur Create.
kind: AuthorizationPolicy apiVersion: security.istio.io/v1beta1 metadata: name: reviews-viewer namespace: default spec: action: ALLOW rules: - to: - operation: methods: - GET - from: - source: principals: - cluster.local/ns/default/sa/bookinfo-productpage selector: matchLabels: app: reviews
Méthode 2 : Interface de la console
Sur la page AuthorizationPolicy, cliquez sur Create.
-
Configurez les paramètres suivants et cliquez sur Create.
Remarquebookinfo-productpageest la valeurserviceAccountobtenue à l'étape 3.Paramètre Valeur Name reviews-viewerPolicy Type ALLOW Namespace (dans l'onglet Workload Scope) default Effective Scope Service Workload reviews Request Matching Rules Dans Add Request Source, activez Principals et définissez la valeur sur cluster.local/ns/default/sa/bookinfo-productpage. Dans Add Request Target, activez Methods et définissez la valeur surGET.
La politique reviews-viewer apparaît sur la page AuthorizationPolicy.
-
Vérifiez la politique. Ouvrez
http://<ASM-gateway-IP>/productpagedans votre navigateur. Les sections details (à gauche) et reviews (à droite) se chargent maintenant correctement. Tous les services de la chaîne de requêtes Bookinfo sont autorisés.
Nettoyage
Pour supprimer les politiques d'autorisation créées dans cette rubrique, supprimez-les depuis la page AuthorizationPolicy de la console ASM. Sélectionnez chaque politique et supprimez-la :
allow-nothingproductpage-viewerdetails-viewerreviews-viewer
Le maintien de la politique de refus par défaut allow-nothing bloque tout le trafic vers les services du namespace default. Supprimez-la toujours lorsque vous n'en avez plus besoin.
Rubriques connexes
Tester les politiques en toute sécurité : Exécutez les politiques d'autorisation en mode essai pour vérifier leur comportement avant leur application. Consultez Exécuter une politique d'autorisation ASM en mode essai.
Sécuriser le trafic TCP : Configurez des politiques d'autorisation pour les requêtes TCP afin de contrôler le trafic de niveau 4. Consultez Configurer des politiques d'autorisation pour les requêtes TCP.
Contrôler l'accès externe : Restreignez le trafic sortant des services du maillage vers des endpoints externes. Consultez Contrôler l'accès à un site web externe et Contrôler l'accès à une base de données externe.
Surveiller les journaux d'accès : Personnalisez les journaux d'accès de la passerelle ASM pour détecter les risques de sécurité. Consultez Configurer la collecte des journaux d'accès pour une passerelle ASM.
Activer les pistes d'audit : Suivez les opérations sur les ressources ASM et configurez des alertes. Consultez Utiliser la fonctionnalité d'audit des opérations KubeAPI dans ASM et Configurer des alertes d'audit pour les opérations sur les ressources ASM.