Configuration et utilisation de variables
Vous devez d’abord créer une variable, puis lui attribuer une valeur ou spécifier l’opération à effectuer sur la variable. Après avoir effectué ces opérations, vous pouvez utiliser l’attribution comme action stratégique.
Remarque : Une fois configurés, les paramètres d’une variable ne peuvent pas être modifiés ou réinitialisés. Si la variable doit être modifiée, la variable et toutes les références à la variable (expressions et affectations) doivent être supprimées. La variable peut ensuite être ajoutée avec de nouveaux paramètres, et les références (expressions et affectations) peuvent être ajoutées à nouveau.
Pour configurer des variables à l’aide de l’interface de ligne de commande
- Créez une variable.
add ns variable <name> -type <string> [-scope global] [-ifFull ( undef | lru )] [-ifValueTooBig ( undef | truncate )] [-ifNoValue ( undef | init )] [-init <string>] [-expires <positive_integer>] [-comment <string>]
<!--NeedCopy-->
Remarque : Reportez-vous à la page de manuel « man add ns variable » pour une description des paramètres de commande.
Exemple 1 : créez une variable ulong nommée « my_counter » et initialisez-la à 1.
add ns variable my_counter –type ulong -init 1
<!--NeedCopy-->
Exemple 2 : créez une carte nommée « user_privilege_map ». La carte contiendra des clés d’une longueur maximale de 15 caractères et des valeurs de texte d’une longueur maximale de 10 caractères, avec un maximum de 10 000 entrées.
add ns variable user_privilege_map -type map(text(15),text(10),10000)
<!--NeedCopy-->
Remarque : Si la carte contient 10 000 entrées non expirées, les attributions des nouvelles clés réutilisent l’une des entrées les moins récemment utilisées. Par défaut, une expression qui essaie d’obtenir la valeur d’une clé inexistante initialise une valeur de texte vide.
Attribuez la valeur ou spécifiez l’opération à effectuer sur la variable. Cela se fait en créant une mission.
add ns assignment <name> -variable <expression> [-set <expression> | -add <expression> | -sub <expression> | -append <expression> | -clear] [-comment <string>]
<!--NeedCopy-->
Remarque : Une variable est référencée à l’aide du sélecteur de variables ($). Par conséquent, $variable1 est utilisé pour faire référence à du texte ou à des variables ulong. De même, $variable2 [key-expression] est utilisé pour faire référence à des variables cartographiques.
Exemple 1 : définissez une affectation nommée « inc_my_counter » qui ajoute automatiquement 1 à la variable « my_counter ».
add ns assignment inc_my_counter -variable $my_counter -add 1
<!--NeedCopy-->
Exemple 2 : définissez une affectation nommée « set_user_privilege » qui ajoute à la variable « user_privilege_map » une entrée pour l’adresse IP du client avec la valeur renvoyée par la légende HTTP « get_user_privilege ».
add ns assignment set_user_privilege -variable $user_privilege_map[client.ip.src.typecast_text_t] -set sys.http.callout(get_user_privilege)
<!--NeedCopy-->
Remarque : Si une entrée pour cette clé existe déjà, la valeur sera remplacée. Sinon, une nouvelle entrée pour la clé et la valeur sera ajoutée. Sur la base de la déclaration précédente pour user_privilege_map, si la carte contient déjà 10 000 entrées, l’une des entrées les moins récemment utilisées sera réutilisée pour la nouvelle clé et la nouvelle valeur.
-
Invoquez l’affectation de variable dans une politique.
Deux fonctions peuvent fonctionner sur des variables cartographiques.
-
$name.valueExists (expression-clé). Renvoie la valeur true si la carte contient une valeur sélectionnée par l’expression clé. Dans le cas contraire, renvoie false. Cette fonction mettra à jour les informations d’expiration et de LRU si l’entrée de carte existe, mais ne créera pas de nouvelle entrée de carte si la valeur n’existe pas.
-
$name.ValueCount. Renvoie le nombre de valeurs actuellement détenues par la variable. Il s’agit du nombre d’entrées dans une carte. Pour une variable singleton, il s’agit de 0 si la variable n’est pas initialisée ou de 1 dans le cas contraire.
Exemple :invoquez l’affectation nommée « set_user_privilege » avec une politique de compression.
-
add cmp policy set_user_privilege_pol -rule $user_privilege_map.valueExists(client.ip.src.typecast_text_t).not -resAction set_user_privilege
<!--NeedCopy-->
Cas d’utilisation pour insérer un en-tête HTTP dans le côté réponse
L’exemple suivant montre un exemple de variable singleton.
Ajoutez une variable singleton de type text. Cette variable peut contenir au maximum 100 octets de données.
add ns variable http_req_data -type text(100) -scope transaction
<!--NeedCopy-->
Ajoutez une action d’attribution, qui sera utilisée pour stocker les données de la requête HTTP dans la variable.
add ns assignment set_http_req_data -variable $http_req_data -set http.req.body(100)
<!--NeedCopy-->
Ajoutez une action de réécriture pour insérer un en-tête HTTP, dont la valeur sera extraite de la variable.
add rewrite action act_ins_header insert_http_header user_name $http_req_data.after_str("user_name").before_str("password")
<!--NeedCopy-->
Ajoutez une politique de réécriture qui sera évaluée au moment de la demande et effectuera des actions d’attribution pour stocker les données. Lorsque nous appliquons cette règle, nous effectuons une action d’affectation et stockons les données dans la variable ns (http_req_data)
add rewrite policy pol_set_variable true set_http_req_data
bind rewrite global pol_set_variable 10 -type req_dEFAULT
<!--NeedCopy-->
Ajoutez une politique de réécriture qui évaluera le temps de réponse et ajoutez un en-tête HTTP dans la réponse.
add rewrite policy pol_ins_header true act_ins_header
bind rewrite global pol_ins_header 10 -type res_dEFAULT
<!--NeedCopy-->
Action d’affectation
Dans une appliance NetScaler, une action d’attribution liée à la stratégie est déclenchée lorsque la règle de stratégie est évaluée comme vraie. L’action met à jour la valeur de la variable qui peut être utilisée dans les évaluations ultérieures des règles de stratégie. De cette façon, la même variable peut être mise à jour et utilisée pour les évaluations de politiques ultérieures dans la même fonctionnalité. Auparavant, l’appliance exécutait des actions d’attribution uniquement après avoir évalué toutes les politiques de la fonctionnalité lorsque les politiques des actions d’attribution associées étaient évaluées comme vraies. Par conséquent, la valeur de variable définie par l’action d’affectation ne peut pas être utilisée dans les évaluations de règles de stratégie suivantes au sein de la fonction.
Cette fonctionnalité peut être mieux comprise à l’aide d’un cas d’utilisation qui contrôle la liste d’accès des clients sur une appliance NetScaler. La décision d’accès est fournie par un service Web distinct, la demande GET /client-access?<client-IP-address>
renvoyant une réponse avec « BLOCK » ou « ALLOW » dans le corps du message. La légende HTTP est configurée pour inclure l’adresse IP du client associée à une demande entrante. Lorsque l’appliance NetScaler reçoit une demande d’un client, elle génère la demande de légende et l’envoie au serveur de légende, qui héberge une base de données d’adresses IP sur liste noire et un agent de légende HTTP qui vérifie si l’adresse IP du client figure dans la base de données. L’agent de légende HTTP reçoit la demande de légende, vérifie si l’adresse IP du client est répertoriée et envoie une réponse. La réponse est un code d’état, 200, 302, suivi de « BLOCK » ou « ALLOW » dans le corps du message. Sur la base du code d’état, l’appliance effectue l’évaluation de la politique. Si l’évaluation de la politique est vraie, l’action d’affectation est déclenchée immédiatement et l’action définit la valeur de la variable. L’appliance utilise et définit cette valeur variable pour une évaluation ultérieure de la politique dans le même module.
Cas d’utilisation pour la configuration d’une action d’attribution
Suivez les étapes ci-dessous pour configurer l’action d’attribution et utiliser une variable pour les politiques suivantes :
-
La décision d’accès est fournie par un service Web distinct, la requête renvoyant une réponse avec BLOCK ou ALLOW dans le corps du message.
GET /url-service>/url-allowed?<URL path>
-
Configurez une variable de carte pour contenir les décisions d’accès aux URL.
add ns variable url_list_map -type 'map(text(1000),text(10),10000)'
-
Configurez une légende HTTP pour envoyer la demande d’accès au service Web.
add policy httpCallout url_list_callout -vserver url_vs -returnType TEXT -urlStemExpr '"/url-allowed?" + HTTP.REQ.URL.PATH' -resultExpr 'HTTP.RES.BODY(10)'
-
Configurez une action d’attribution pour appeler la légende afin d’obtenir la décision d’accès et de l’attribuer à l’entrée cartographique de l’URL.
add ns assignment client_access_assn -variable '$client_access_map[CLIENT.IP.SRC.TYPECAST_TEXT_T]' -set SYS.HTTP_CALLOUT(client_access_callout)
-
Configurez une action de répondeur pour envoyer une réponse 403 si une demande d’URL est bloquée.
add responder action url_list_block_act respondwith '"HTTP/1.1 403 Forbidden\\r\\n\\r\\n"'
-
Configurez une politique de répondeur pour définir l’entrée de carte pour l’URL si elle n’est pas déjà définie. Grâce à l’amélioration de l’action immédiate, la valeur d’entrée de la carte est définie lors de l’évaluation de cette politique. Avant l’amélioration, l’attribution n’était pas effectuée tant que toutes les politiques des intervenants n’avaient pas été évaluées. La décision était fournie par un service Web distinct.
add responder policy url_list_assn_pol '!$url_list_map.VALUEEXISTS(HTTP.REQ.URL.PATH)' url_list_assn
-
Configurez une politique de répondeur pour bloquer l’accès à une URL si la valeur d’entrée de la carte est BLOCK. Avec l’amélioration de l’action immédiate, l’entrée cartographique définie par la stratégie précédente peut être utilisée dans cette stratégie. Avant l’amélioration, l’entrée cartographique n’était toujours pas définie à ce stade.
add responder policy client_access_block_pol '$client_access_map[CLIENT.IP.SRC.TYPECAST_TEXT_T] == "BLOCK"' client_access_block_act
-
Liez les politiques du répondeur au serveur virtuel. Remarque: Nous ne pouvons pas lier les politiques de manière globale car nous ne voulons pas les exécuter pour la légende HTTP sur un serveur virtuel distinct.
bind lb vserver vs -policyName client_access_assn_pol -priority 10 -gotoPriorityExpression NEXT -type REQUEST
bind lb vserver vs -policyName client_access_block_pol -priority 20 -gotoPriorityExpression END -type REQUEST
Pour configurer des variables à l’aide de l’utilitaire de configuration
- Accédez à AppExpert > Variables NSpour créer une variable.
- Accédez à AppExpert > NS Assignmentspour attribuer des valeurs à la variable.
- Accédez à la zone d’entités appropriée dans laquelle vous souhaitez configurer l’affectation en tant qu’action.