Naslag Voor: ontwikkelaars

Subset van de NSX Policy API

Het deel van de NSX Policy API dat voor de gedistribueerde firewall wordt aangeboden: paden, objecten, koppeling, verschillen en beperkingen.

Kyvernon biedt een subset van de NSX Policy API aan bovenop zijn eigen gedistribueerde firewall, zodat tools die voor die API zijn geschreven groepen, services, beveiligingsbeleid, regels en tags van virtuele machines kunnen beheren. Het is geen NSX. NSX wordt hier genoemd om de API te beschrijven die bestaande tools spreken, en compatibiliteit wordt alleen geclaimd voor de endpoints, velden en tools die op deze pagina staan. Objecten die via dit endpoint worden geschreven, zijn gewone firewallobjecten: de console, de CLI en de native API tonen en wijzigen ze ook.

Het endpoint inschakelen

Het endpoint staat standaard uit en heeft een eigen listener met het TLS-certificaat van de controller. De console biedt deze instellingen niet aan; ze horen bij de configuratie van de controller (zie Configuratie), in de sectie [facades.nsx].

SleutelStandaardBetekenis
enabledfalseHet endpoint aanbieden. Het is onafhankelijk van enabled in [facades]
listen0.0.0.0:8445Het adres en de poort van de listener
product_version4.1.2.0.0De versie die GET /api/v1/node/version meldt. Clients schakelen functies in op basis daarvan

Clients melden zich aan met HTTP Basic bij elk verzoek, of met POST /api/session/create (j_username en j_password), dat antwoordt met een JSESSIONID-cookie; schrijfacties dragen daarna de header X-XSRF-TOKEN. Beide zijn facade-aanmeldingen, dus het aanmeldbeleid voor compatibiliteitsendpoints is van toepassing: standaard heeft het account een roltoewijzing nodig. De bevoegdheden zijn de native firewallbevoegdheden (Kyvernon.Firewall.*), zie Firewallreferentie.

Scopes

ScopePadvoorvoegsel onder /policy/api/v1Objecten
Provider/infraDe objecten van de provider
Een tenant, als NSX-project/orgs/default/projects/{tenant}/infraDe objecten van één tenant. Een tenantgebruiker werkt in zijn eigen project

Alleen het domein default bestaat. De tenants staan, alleen-lezen, onder /orgs/default/projects.

Aangeboden endpoints

Onder /policy/api/v1, met {scope} zoals in de tabel hierboven.

EndpointMethoden
{scope}GET; PATCH en PUT met een hiërarchische body
{scope}/domains, {scope}/domains/defaultGET
{scope}/domains/default/groups, .../groups/{id}GET lijst; GET, PUT, PATCH, DELETE
.../groups/{id}/members/virtual-machines, .../members/ip-addressesGET
{scope}/services, {scope}/services/{id}GET lijst; GET, PUT, PATCH, DELETE
{scope}/domains/default/security-policies, .../security-policies/{id}GET lijst; GET, PUT, PATCH, DELETE
.../security-policies/{id}/rules, .../rules/{rid}GET lijst; GET, PUT, PATCH, DELETE
.../security-policies/{id}/statistics, .../rules/{rid}/statisticsGET
{scope}/realized-state/status?intent_path=GET: REALIZED, IN_PROGRESS of ERROR
{scope}/realized-state/virtual-machines, .../enforcement-points/default/virtual-machinesGET met external_id of display_name
.../enforcement-points/default/virtual-machines?action=update_tagsPOST met {virtual_machine_id, tags}
{scope}/realized-state/virtual-machines/{id}/tagsPOST met {tags}, vervangt de tags
{scope}/realized-state/enforcement-points/default/vifsGET met owner_vm_id
/search/query?query=, /search?query=GET
/orgs, /orgs/default, /orgs/default/projects, /orgs/default/projects/{id}GET

Buiten /policy/api/v1:

EndpointMethoden
/api/session/create, /api/session/destroyPOST
/api/v1/node/versionGET
/api/v1/fabric/virtual-machinesGET; POST met ?action=update_tags, add_tags of remove_tags en {external_id, tags}

Lijsten antwoorden met {results, result_count, cursor} en accepteren page_size en cursor. Elk object draagt 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 en marked_for_delete, dat altijd false is. PUT antwoordt met het object, PATCH en DELETE met een lege 200, en het verwijderen van een object dat er niet is, is geen fout. _revision is de versie van het record, en een PUT met een verouderde versie mislukt met 412.

Objecten en hun koppeling

NSX-objectGeaccepteerde veldenKyvernon-object en limieten
Groupexpression, group_type, tagsEen firewallgroep. Een Condition op VirtualMachine met de sleutel Tag en de operator EQUALS (waarde scope|tag) wordt een tagcriterium; AND is toegestaan tussen tagcondities, OR tussen criteria, en er zijn ten hoogste 64 criteria. NestedExpression wordt een geneste groep. IPAddressExpression accepteert adressen, prefixen en bereiken a-b. MACAddressExpression somt MAC-adressen op. PathExpression accepteert groepspaden van dezelfde scope of die van de provider en /infra/segments/network-N (een hostbridge-netwerk). ExternalIDExpression accepteert instantie-UUID's van virtuele machines, en adapters als <instance UUID>-<device key>. group_type wordt opgeslagen zonder effect
Serviceservice_entries, service_type, tagsEen benoemde firewallservice. L4PortSetServiceEntry (TCP, UDP, met destination_ports en source_ports), ICMPTypeServiceEntry (ICMPv4, ICMPv6, icmp_type, icmp_code) en IPProtocolServiceEntry (protocol_number)
SecurityPolicycategory, sequence_number, stateful, tcp_strict, scope, locked, comments, rules, tagsEen firewallbeleid. De categorieën zijn Emergency en Infrastructure (alleen provider), Environment en Application. scope is de lijst van toepassing: ANY of groepspaden. Het sequence_number n van een tenant is de volgorde 1.000.000 + n van het beleid; providerbeleid blijft onder 1.000.000. tcp_strict en comments worden opgeslagen zonder effect
Rulesequence_number, source_groups, destination_groups, sources_excluded, destinations_excluded, services, service_entries, action, direction, ip_protocol, logged, disabled, scope, profiles, notes, tag, tags; alleen-lezen: rule_idEen firewallregel. Groepen zijn paden, ANY, of letterlijke adressen, prefixen en bereiken. ALLOW, DROP, REJECT en JUMP_TO_APPLICATION komen overeen met allow, drop, reject en pass. ip_protocol is IPV4, IPV6 of IPV4_IPV6. profiles moet leeg zijn of ANY. Regels worden geordend op sequence_number, en rule_id is het regelnummer
VirtualMachineexternal_id, display_name, power_state, tags, compute_idsEen virtuele machine. external_id is haar instantie-UUID. Een tag met scope en tag is de inventaristag tag in de categorie scope; een lege scope gebruikt de categorie nsx
Statisticspacket_count, byte_count, hit_countDe tellers van de regel. hit_count is gelijk aan de pakketten, en de sessievelden zijn 0

Een adresbereik wordt de kleinste lijst prefixen die precies dat bereik dekt, ten hoogste 256, en het endpoint geeft het bereik terug zoals het is geschreven.

De ingebouwde services zijn alleen-lezen (_system_owned is 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 en ICMPv6-ALL.

Identiteit, namen en gelijktijdige schrijfacties

  • Het id wordt door de client gekozen, zoals in NSX, en is uniek per scope. Een object dat de native API heeft gemaakt, verschijnt onder zijn native id, zoals fwgroup-3, en clients kunnen geen objecten maken onder id's van die vorm.
  • display_name hoeft niet uniek te zijn en kan tot 255 tekens bevatten. Het endpoint geeft het terug zoals het is geschreven. Het firewallobject erachter heeft een unieke naam die Kyvernon afleidt: stuurtekens, / en \ worden _, een voorafgaande sys: krijgt het voorvoegsel nsx-, en een naam die al bestaat of langer is dan 80 tekens wordt ingekort en gevolgd door het id tussen haakjes. Na een wijziging via een ander oppervlak toont het endpoint de native naam.
  • Velden waarvoor het firewallmodel geen plaats heeft, zoals tcp_strict, worden bewaard zoals de client ze schreef en ongewijzigd teruggegeven zolang het object niet via een ander oppervlak wordt gewijzigd.
  • Schrijfacties die tegelijk lopen, zoals de parallelle resources van Terraform, worden elk berekend uit de status die ze lazen. Een schrijfactie die de race van een andere schrijver verliest, draait opnieuw op de nieuwe status, tot 12 keer. Alleen een verouderde _revision van de client wordt geweigerd.
  • Een schrijfactie via het endpoint veroorzaakt dezelfde gebeurtenissen als de native API, bijvoorbeeld wanneer een regel wordt toegevoegd, gewijzigd, verwijderd of verplaatst.
  • Tags die dit endpoint voor virtuele machines heeft gemaakt, worden met hun laatste gebruik verwijderd, tenzij een firewallgroep ze noemt. De tags dragen de beschrijving Created for NSX tags. Tenantgebruikers zien of wijzigen geen tagcategorieën die de provider beheert.

Hiërarchische aanroep

PATCH en PUT op {scope} accepteren een Infra-body met ChildResourceReference of ChildDomain van het domein default. Daaronder worden ChildGroup, ChildSecurityPolicy met ChildRule-kinderen en ChildService op het hoogste niveau aangeboden; marked_for_delete verwijdert een object. Elk ander kind wordt geweigerd met zijn positie in de body. De hele body wordt als één geheel gecontroleerd: Kyvernon valideert de objecten en het resultaat, en voert alles of niets door. Objecten die de body aanmaakt, mogen naar elkaar verwijzen. Dit is de aanroep die de Terraform NSX-provider gebruikt om beveiligingsbeleid te schrijven.

GET /policy/api/v1/search/query?query= accepteert termen verbonden met AND : field:value op resource_type, id, display_name, path, parent_path, marked_for_delete, external_id, tags.scope, tags.tag of een tekstveld op het hoogste niveau, en losse waarden, die overeenkomen met het id, de weergavenaam, het externe id en het pad. * is een jokerteken, \ is het ontsnappingsteken en aanhalingstekens zijn toegestaan. De resourcetypen zijn Group, Service, SecurityPolicy, Rule, VirtualMachine, Domain en Project. OR, NOT, haakjes en bereiken worden geweigerd.

Fouten

Het endpoint antwoordt met de NSX-foutbody (httpStatus, error_code, module_name, error_message, related_errors) en het native bericht-id in details.

Bericht-idBetekenis
error.nsx.unsupportedHet verzoek gebruikt een veld of gebied buiten de subset. Het bericht noemt het
error.nsx.invalidEen veld heeft een ongeldige waarde
error.nsx.not_foundHet pad noemt geen object dat het account kan zien
error.nsx.revisionDe _revision van de schrijfactie is verouderd
error.nsx.read_onlyEen ingebouwd object, of een tenantgebruiker die in /infra schrijft
error.nsx.xsrfEen schrijfactie zonder geldige X-XSRF-TOKEN

Fouten van de native API behouden hun error.firewall.*-id; zie Firewallfouten.

Verschillen en beperkingen

OnderdeelGedrag
Identiteitsgroepen (IdentityGroupExpression)Geweigerd. Ze vereisen een directoryservice en een agent in elke gast die gebruikersaanmeldingen meldt, wat het platform niet heeft. Groepeer virtuele machines in plaats daarvan met tags
Andere expressiesCondities op andere sleutels of lidtypen, en expressies voor segmentpoorten, worden geweigerd met het veld genoemd
tcp_strict, comments, group_typeOpgeslagen en teruggegeven, zonder effect
locked: true, connectivity_strategy, schema'sGeweigerd
Categorie EthernetGeweigerd
profiles van een regelMoet leeg zijn of ANY
source_portsGeaccepteerd in services en in de service_entries van een regel
Gebieden buiten de subsetAntwoorden 400 error.nsx.unsupported met de functie genoemd: gatewaybeleid, segmenten, tier-0- en tier-1-gateways, contextprofielen, IDS, omleiding, endpoint- en forwardingbeleid, de uitsluitingslijst en infrastructuurinstellingen, load balancers, IP-pools en -blokken, schema's, de firewallsecties van de Manager API, en andere domeinen dan default
RealisatiestatusREALIZED als elke verbonden host de wijziging heeft toegepast, ERROR zolang een host een firewallfout meldt, anders IN_PROGRESS
SessietellersDe sessievelden van de statistieken zijn altijd 0
Na een hernoeming via een ander oppervlakHet endpoint toont de native naam, die een achtervoegsel kan dragen
PowerCLIScripts die dezelfde paden aanroepen, werken voor zover de paden en velden hierboven reiken; ze zijn niet tegen het endpoint uitgevoerd

Geverifieerd met Terraform

De Terraform NSX-provider vmware/nsxt 3.12.2 is tegen het endpoint uitgevoerd voor aanmaken, lezen, bijwerken, importeren en vernietigen.

OnderdeelBewerkingen die werken
nsxt_policy_service (poortverzameling, ICMP- en IP-protocolonderdelen, tags)Aanmaken, lezen, bijwerken, verwijderen
nsxt_policy_group (tagcondities, adressen en bereiken, MAC-adressen, paden, externe id's, projectcontext)Aanmaken, lezen, bijwerken, importeren, verwijderen
nsxt_policy_security_policyAanmaken, lezen, bijwerken, verwijderen
nsxt_policy_parent_security_policyAanmaken, lezen, verwijderen
nsxt_policy_security_policy_ruleAanmaken, lezen, verwijderen
nsxt_policy_vm_tagsAanmaken, lezen, verwijderen
Gegevensbronnen nsxt_policy_service, nsxt_policy_group, nsxt_policy_vm, nsxt_policy_projectLezen

De vSphere-kant van Terraform staat beschreven in Terraform vSphere-provider.

Versie 0.1. Laatst gewijzigd: 2026-11-14