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].
| Sleutel | Standaard | Betekenis |
|---|---|---|
enabled | false | Het endpoint aanbieden. Het is onafhankelijk van enabled in [facades] |
listen | 0.0.0.0:8445 | Het adres en de poort van de listener |
product_version | 4.1.2.0.0 | De 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
| Scope | Padvoorvoegsel onder /policy/api/v1 | Objecten |
|---|---|---|
| Provider | /infra | De objecten van de provider |
| Een tenant, als NSX-project | /orgs/default/projects/{tenant}/infra | De 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.
| Endpoint | Methoden |
|---|---|
{scope} | GET; PATCH en PUT met een hiërarchische body |
{scope}/domains, {scope}/domains/default | GET |
{scope}/domains/default/groups, .../groups/{id} | GET lijst; GET, PUT, PATCH, DELETE |
.../groups/{id}/members/virtual-machines, .../members/ip-addresses | GET |
{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}/statistics | GET |
{scope}/realized-state/status?intent_path= | GET: REALIZED, IN_PROGRESS of ERROR |
{scope}/realized-state/virtual-machines, .../enforcement-points/default/virtual-machines | GET met external_id of display_name |
.../enforcement-points/default/virtual-machines?action=update_tags | POST met {virtual_machine_id, tags} |
{scope}/realized-state/virtual-machines/{id}/tags | POST met {tags}, vervangt de tags |
{scope}/realized-state/enforcement-points/default/vifs | GET 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:
| Endpoint | Methoden |
|---|---|
/api/session/create, /api/session/destroy | POST |
/api/v1/node/version | GET |
/api/v1/fabric/virtual-machines | GET; 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-object | Geaccepteerde velden | Kyvernon-object en limieten |
|---|---|---|
| Group | expression, group_type, tags | Een 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 |
| Service | service_entries, service_type, tags | Een benoemde firewallservice. L4PortSetServiceEntry (TCP, UDP, met destination_ports en source_ports), ICMPTypeServiceEntry (ICMPv4, ICMPv6, icmp_type, icmp_code) en IPProtocolServiceEntry (protocol_number) |
| SecurityPolicy | category, sequence_number, stateful, tcp_strict, scope, locked, comments, rules, tags | Een 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 |
| Rule | sequence_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_id | Een 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 |
| VirtualMachine | external_id, display_name, power_state, tags, compute_ids | Een 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 |
| Statistics | packet_count, byte_count, hit_count | De 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_namehoeft 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 voorafgaandesys:krijgt het voorvoegselnsx-, 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
_revisionvan 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.
Zoeken
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-id | Betekenis |
|---|---|
error.nsx.unsupported | Het verzoek gebruikt een veld of gebied buiten de subset. Het bericht noemt het |
error.nsx.invalid | Een veld heeft een ongeldige waarde |
error.nsx.not_found | Het pad noemt geen object dat het account kan zien |
error.nsx.revision | De _revision van de schrijfactie is verouderd |
error.nsx.read_only | Een ingebouwd object, of een tenantgebruiker die in /infra schrijft |
error.nsx.xsrf | Een schrijfactie zonder geldige X-XSRF-TOKEN |
Fouten van de native API behouden hun error.firewall.*-id; zie Firewallfouten.
Verschillen en beperkingen
| Onderdeel | Gedrag |
|---|---|
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 expressies | Condities op andere sleutels of lidtypen, en expressies voor segmentpoorten, worden geweigerd met het veld genoemd |
tcp_strict, comments, group_type | Opgeslagen en teruggegeven, zonder effect |
locked: true, connectivity_strategy, schema's | Geweigerd |
Categorie Ethernet | Geweigerd |
profiles van een regel | Moet leeg zijn of ANY |
source_ports | Geaccepteerd in services en in de service_entries van een regel |
| Gebieden buiten de subset | Antwoorden 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 |
| Realisatiestatus | REALIZED als elke verbonden host de wijziging heeft toegepast, ERROR zolang een host een firewallfout meldt, anders IN_PROGRESS |
| Sessietellers | De sessievelden van de statistieken zijn altijd 0 |
| Na een hernoeming via een ander oppervlak | Het endpoint toont de native naam, die een achtervoegsel kan dragen |
| PowerCLI | Scripts 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.
| Onderdeel | Bewerkingen 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_policy | Aanmaken, lezen, bijwerken, verwijderen |
nsxt_policy_parent_security_policy | Aanmaken, lezen, verwijderen |
nsxt_policy_security_policy_rule | Aanmaken, lezen, verwijderen |
nsxt_policy_vm_tags | Aanmaken, lezen, verwijderen |
Gegevensbronnen nsxt_policy_service, nsxt_policy_group, nsxt_policy_vm, nsxt_policy_project | Lezen |
De vSphere-kant van Terraform staat beschreven in Terraform vSphere-provider.
Zie ook
Versie 0.1. Laatst gewijzigd: 2026-11-14