Référence Pour: développeurs

Sous-ensemble de l'API NSX Policy

La partie de l'API NSX Policy servie pour le pare-feu distribué : chemins, objets, correspondance avec les objets du pare-feu, différences et limites.

Kyvernon sert un sous-ensemble de l'API NSX Policy au-dessus de son propre pare-feu distribué, afin que des outils écrits pour cette API puissent gérer des groupes, des services, des stratégies de sécurité, des règles et des étiquettes de machines virtuelles. Ce n'est pas NSX. NSX est nommé ici pour décrire l'API que parlent les outils existants, et la compatibilité n'est revendiquée que pour les points d'accès, les champs et les outils listés sur cette page. Les objets écrits par ce point d'accès sont des objets de pare-feu ordinaires : la console, la CLI et l'API native les montrent et les modifient aussi.

Activation du point d'accès

Le point d'accès est désactivé par défaut et dispose de son propre écouteur avec le certificat TLS du contrôleur. La console ne propose pas ces paramètres ; ils font partie de la configuration du contrôleur (voir Configuration), dans la section [facades.nsx].

CléPar défautSignification
enabledfalseServir le point d'accès. Il est indépendant de enabled dans [facades]
listen0.0.0.0:8445L'adresse et le port de l'écouteur
product_version4.1.2.0.0La version que GET /api/v1/node/version indique. Les clients activent des fonctions d'après elle

Les clients se connectent avec HTTP Basic à chaque requête, ou avec POST /api/session/create (j_username et j_password), qui répond par un cookie JSESSIONID ; les écritures portent ensuite l'en-tête X-XSRF-TOKEN. Les deux sont des connexions de façade, la stratégie de connexion des points d'accès de compatibilité s'applique donc : par défaut, le compte a besoin d'une attribution de rôle. Les privilèges sont les privilèges natifs du pare-feu (Kyvernon.Firewall.*), voir Référence du pare-feu.

Portées

PortéePréfixe de chemin sous /policy/api/v1Objets
Fournisseur/infraLes objets du fournisseur
Un locataire, comme projet NSX/orgs/default/projects/{tenant}/infraLes objets d'un locataire. Un utilisateur de locataire travaille dans son propre projet

Seul le domaine default existe. Les locataires sont listés, en lecture seule, sous /orgs/default/projects.

Points d'accès servis

Sous /policy/api/v1, avec {scope} comme dans le tableau ci-dessus.

Point d'accèsMéthodes
{scope}GET ; PATCH et PUT avec un corps hiérarchique
{scope}/domains, {scope}/domains/defaultGET
{scope}/domains/default/groups, .../groups/{id}GET liste ; GET, PUT, PATCH, DELETE
.../groups/{id}/members/virtual-machines, .../members/ip-addressesGET
{scope}/services, {scope}/services/{id}GET liste ; GET, PUT, PATCH, DELETE
{scope}/domains/default/security-policies, .../security-policies/{id}GET liste ; GET, PUT, PATCH, DELETE
.../security-policies/{id}/rules, .../rules/{rid}GET liste ; GET, PUT, PATCH, DELETE
.../security-policies/{id}/statistics, .../rules/{rid}/statisticsGET
{scope}/realized-state/status?intent_path=GET : REALIZED, IN_PROGRESS ou ERROR
{scope}/realized-state/virtual-machines, .../enforcement-points/default/virtual-machinesGET avec external_id ou display_name
.../enforcement-points/default/virtual-machines?action=update_tagsPOST avec {virtual_machine_id, tags}
{scope}/realized-state/virtual-machines/{id}/tagsPOST avec {tags}, remplace les étiquettes
{scope}/realized-state/enforcement-points/default/vifsGET avec owner_vm_id
/search/query?query=, /search?query=GET
/orgs, /orgs/default, /orgs/default/projects, /orgs/default/projects/{id}GET

En dehors de /policy/api/v1 :

Point d'accèsMéthodes
/api/session/create, /api/session/destroyPOST
/api/v1/node/versionGET
/api/v1/fabric/virtual-machinesGET ; POST avec ?action=update_tags, add_tags ou remove_tags et {external_id, tags}

Les listes répondent {results, result_count, cursor} et acceptent page_size et cursor. Chaque objet porte id, display_name, description, path, parent_path, relative_path, unique_id, resource_type, tags, _revision, _create_time, _create_user, _last_modified_time, _system_owned, _protection et marked_for_delete, qui vaut toujours false. PUT répond avec l'objet, PATCH et DELETE avec un 200 vide, et supprimer un objet absent n'est pas une erreur. _revision est la version de l'enregistrement, et un PUT avec une version périmée échoue avec 412.

Objets et correspondance

Objet NSXChamps acceptésObjet Kyvernon et limites
Groupexpression, group_type, tagsUn groupe de pare-feu. Une Condition sur VirtualMachine avec la clé Tag et l'opérateur EQUALS (valeur scope|tag) devient un critère d'étiquette ; AND est permis entre conditions d'étiquettes, OR entre critères, et les critères sont au nombre de 64 au plus. NestedExpression devient un groupe imbriqué. IPAddressExpression accepte des adresses, des préfixes et des plages a-b. MACAddressExpression liste des adresses MAC. PathExpression accepte des chemins de groupes de la même portée ou de celle du fournisseur et /infra/segments/network-N (un réseau sur pont d'hôte). ExternalIDExpression accepte des UUID d'instance de machines virtuelles, et des cartes réseau sous la forme <instance UUID>-<device key>. group_type est enregistré sans effet
Serviceservice_entries, service_type, tagsUn service de pare-feu nommé. L4PortSetServiceEntry (TCP, UDP, avec destination_ports et source_ports), ICMPTypeServiceEntry (ICMPv4, ICMPv6, icmp_type, icmp_code) et IPProtocolServiceEntry (protocol_number)
SecurityPolicycategory, sequence_number, stateful, tcp_strict, scope, locked, comments, rules, tagsUne stratégie de pare-feu. Les catégories sont Emergency et Infrastructure (fournisseur seulement), Environment et Application. scope est la liste des cibles : ANY ou des chemins de groupes. Le sequence_number n d'un locataire est la séquence 1 000 000 + n de la stratégie ; les stratégies du fournisseur restent sous 1 000 000. tcp_strict et comments sont enregistrés sans effet
Rulesequence_number, source_groups, destination_groups, sources_excluded, destinations_excluded, services, service_entries, action, direction, ip_protocol, logged, disabled, scope, profiles, notes, tag, tags ; en lecture seule : rule_idUne règle de pare-feu. Les groupes sont des chemins, ANY, ou des adresses, préfixes et plages littéraux. ALLOW, DROP, REJECT et JUMP_TO_APPLICATION correspondent à allow, drop, reject et pass. ip_protocol vaut IPV4, IPV6 ou IPV4_IPV6. profiles doit être vide ou ANY. Les règles sont ordonnées par sequence_number, et rule_id est le numéro de la règle
VirtualMachineexternal_id, display_name, power_state, tags, compute_idsUne machine virtuelle. external_id est son UUID d'instance. Une étiquette avec scope et tag est l'étiquette d'inventaire tag dans la catégorie scope ; une portée vide utilise la catégorie nsx
Statisticspacket_count, byte_count, hit_countLes compteurs de la règle. hit_count égale les paquets, et les champs de sessions valent 0

Une plage d'adresses devient la plus petite liste de préfixes qui couvre exactement cette plage, 256 au plus, et le point d'accès renvoie la plage telle qu'elle a été écrite.

Les services intégrés sont en lecture seule (_system_owned vaut true) : SSH, HTTP, HTTPS, DNS, DNS-UDP, NTP, SMTP, SMTP_TLS, SMTP-Submission, IMAP, IMAPS, POP3, POP3S, RDP, VNC, FTP, TFTP, LDAP, LDAP-UDP, LDAP-over-SSL, KERBEROS, KERBEROS-UDP, SNMP, SNMP-Trap, Syslog-UDP, Syslog-TCP, MySQL, PostgreSQL, MS-SQL-S, DHCP-Server, DHCP-Client, ICMP_Echo_Request, ICMP_Echo_Reply, ICMPv6_Echo_Request, ICMPv6_Echo_Reply, ICMP-ALL et ICMPv6-ALL.

Identité, noms et écritures simultanées

  • L'identifiant est choisi par le client, comme dans NSX, et est unique par portée. Un objet créé par l'API native apparaît sous son identifiant natif, tel que fwgroup-3, et les clients ne peuvent pas créer d'objets sous des identifiants de cette forme.
  • display_name n'a pas besoin d'être unique et peut compter jusqu'à 255 caractères. Le point d'accès le renvoie tel qu'il a été écrit. L'objet de pare-feu qui se trouve derrière a un nom unique que Kyvernon dérive : les caractères de contrôle, / et \ deviennent _, un sys: initial reçoit le préfixe nsx-, et un nom déjà pris ou de plus de 80 caractères est raccourci et suivi de l'identifiant entre crochets. Après une modification par une autre surface, le point d'accès affiche le nom natif.
  • Les champs pour lesquels le modèle du pare-feu n'a pas de place, comme tcp_strict, sont conservés tels que le client les a écrits et renvoyés inchangés tant que l'objet n'est pas modifié par une autre surface.
  • Les écritures simultanées, comme les ressources parallèles de Terraform, sont chacune calculées à partir de l'état qu'elles ont lu. Une écriture qui perd la course contre un autre auteur est rejouée sur le nouvel état, jusqu'à 12 fois. Seule une _revision périmée du client est refusée.
  • Une écriture par le point d'accès déclenche les mêmes événements que l'API native, par exemple quand une règle est ajoutée, modifiée, supprimée ou déplacée.
  • Les étiquettes que ce point d'accès a créées pour des machines virtuelles sont supprimées avec leur dernier usage, sauf si un groupe de pare-feu les nomme. Les étiquettes portent la description Created for NSX tags. Les utilisateurs de locataire ne voient ni ne modifient les catégories d'étiquettes que le fournisseur gère.

Appel hiérarchique

PATCH et PUT sur {scope} acceptent un corps Infra avec ChildResourceReference ou ChildDomain du domaine default. En dessous, ChildGroup, ChildSecurityPolicy avec des enfants ChildRule, et ChildService au niveau supérieur sont servis ; marked_for_delete supprime un objet. Tout autre enfant est refusé avec sa position dans le corps. Le corps entier est vérifié comme un tout : Kyvernon valide les objets et le résultat, et applique tout ou rien. Les objets que le corps crée peuvent se référencer entre eux. C'est l'appel que le fournisseur Terraform NSX utilise pour écrire les stratégies de sécurité.

GET /policy/api/v1/search/query?query= accepte des termes joints par AND  : field:value sur resource_type, id, display_name, path, parent_path, marked_for_delete, external_id, tags.scope, tags.tag ou tout champ de texte de premier niveau, et des valeurs seules, qui correspondent à l'identifiant, au nom affiché, à l'identifiant externe et au chemin. * est un caractère générique, \ échappe, et les guillemets sont permis. Les types de ressource sont Group, Service, SecurityPolicy, Rule, VirtualMachine, Domain et Project. OR, NOT, les parenthèses et les intervalles sont refusés.

Erreurs

Le point d'accès répond avec le corps d'erreur NSX (httpStatus, error_code, module_name, error_message, related_errors) et l'identifiant de message natif dans details.

Identifiant de messageSignification
error.nsx.unsupportedLa requête utilise un champ ou une zone hors du sous-ensemble. Le message le nomme
error.nsx.invalidUn champ a une valeur non valide
error.nsx.not_foundLe chemin ne désigne aucun objet que le compte puisse voir
error.nsx.revisionLa _revision de l'écriture est périmée
error.nsx.read_onlyUn objet intégré, ou un utilisateur de locataire qui écrit dans /infra
error.nsx.xsrfUne écriture sans X-XSRF-TOKEN valide

Les erreurs de l'API native gardent leur identifiant error.firewall.* ; voir Erreurs du pare-feu.

Différences et limites

ÉlémentComportement
Groupes d'identité (IdentityGroupExpression)Refusés. Ils exigent un service d'annuaire et un agent dans chaque invité qui signale les connexions d'utilisateurs, que la plateforme n'a pas. Groupez plutôt les machines virtuelles par étiquette
Autres expressionsLes conditions sur d'autres clés ou types de membres, et les expressions de ports de segment, sont refusées avec le champ nommé
tcp_strict, comments, group_typeEnregistrés et renvoyés, sans effet
locked: true, connectivity_strategy, planningsRefusés
Catégorie EthernetRefusée
profiles d'une règleDoit être vide ou ANY
source_portsAccepté dans les services et dans les service_entries d'une règle
Zones hors du sous-ensembleRépondent 400 error.nsx.unsupported avec la fonction nommée : stratégies de passerelle, segments, passerelles tier-0 et tier-1, profils de contexte, IDS, redirection, stratégies de point de terminaison et de transfert, liste d'exclusion et paramètres d'infrastructure, répartiteurs de charge, pools et blocs d'adresses IP, plannings, sections de pare-feu de l'API Manager, et domaines autres que default
État d'applicationREALIZED quand chaque hôte connecté a appliqué la modification, ERROR tant qu'un hôte signale une erreur de pare-feu, IN_PROGRESS sinon
Nombres de sessionsLes champs de sessions des statistiques valent toujours 0
Après un renommage par une autre surfaceLe point d'accès affiche le nom natif, qui peut porter un suffixe
PowerCLILes scripts qui appellent les mêmes chemins fonctionnent dans les limites des chemins et champs ci-dessus ; ils n'ont pas été exécutés contre le point d'accès

Vérifié avec Terraform

Le fournisseur Terraform NSX vmware/nsxt 3.12.2 a été exécuté contre le point d'accès pour la création, la lecture, la mise à jour, l'import et la destruction.

ÉlémentOpérations qui fonctionnent
nsxt_policy_service (ensemble de ports, entrées ICMP et de protocole IP, étiquettes)Création, lecture, mise à jour, suppression
nsxt_policy_group (conditions d'étiquettes, adresses et plages, adresses MAC, chemins, identifiants externes, contexte de projet)Création, lecture, mise à jour, import, suppression
nsxt_policy_security_policyCréation, lecture, mise à jour, suppression
nsxt_policy_parent_security_policyCréation, lecture, suppression
nsxt_policy_security_policy_ruleCréation, lecture, suppression
nsxt_policy_vm_tagsCréation, lecture, suppression
Sources de données nsxt_policy_service, nsxt_policy_group, nsxt_policy_vm, nsxt_policy_projectLecture

Le côté vSphere de Terraform est décrit dans Fournisseur Terraform vSphere.

Version 0.1. Dernière modification : 2026-11-14