{ "description": "Ordered list of Rules.", "extends": { "$ref": "Policy }, "id": "SecurityPolicy", "module_id": "Policy", "policy_hierarchical_children": [ "ChildRule", "ChildSecurityPolicyContainerCluster" ], "properties": { "_create_time": { "$ref": "EpochMsTimestamp, "can_sort": true, "description": "Timestamp of resource creation", "readonly": true }, "_create_user": { "description": "ID of the user who created this resource", "readonly": true, "type": "string" }, "_last_modified_time": { "$ref": "EpochMsTimestamp, "can_sort": true, "description": "Timestamp of last modification", "readonly": true }, "_last_modified_user": { "description": "ID of the user who last modified this resource", "readonly": true, "type": "string" }, "_links": { "description": "The server will populate this field when returing the resource. Ignored on PUT and POST.", "items": { "$ref": "ResourceLink }, "readonly": true, "title": "References related to this resource", "type": "array" }, "_protection": { "description": "Protection status is one of the following: PROTECTED - the client who retrieved the entity is not allowed to modify it. NOT_PROTECTED - the client who retrieved the entity is allowed to modify it REQUIRE_OVERRIDE - the client who retrieved the entity is a super user and can modify it, but only when providing the request header X-Allow-Overwrite=true. UNKNOWN - the _protection field could not be determined for this entity.", "readonly": true, "title": "Indicates protection status of this resource", "type": "string" }, "_revision": { "description": "The _revision property describes the current revision of the resource. To prevent clients from overwriting each other's changes, PUT operations must include the current _revision of the resource, which clients should obtain by issuing a GET operation. If the _revision provided in a PUT request is missing or stale, the operation will be rejected.", "title": "Generation of this resource config", "type": "int" }, "_schema": { "readonly": true, "title": "Schema for this resource", "type": "string" }, "_self": { "$ref": "SelfResourceLink, "readonly": true, "title": "Link to this resource" }, "_system_owned": { "description": "Indicates system owned resource", "readonly": true, "type": "boolean" }, "application_connectivity_strategy": { "description": "This field indicates the application connectivity policy for the security policy.", "items": { "$ref": "ApplicationConnectivityStrategy }, "maxItems": 3, "required": false, "title": "List of Application Connectivity strategy for this SecurityPolicy", "type": "array" }, "category": { "description": "- Distributed Firewall - Policy framework provides five pre-defined categories for classifying a security policy. They are \"Ethernet\",\"Emergency\", \"Infrastructure\" \"Environment\" and \"Application\". There is a pre-determined order in which the policy framework manages the priority of these security policies. Ethernet category is for supporting layer 2 firewall rules. The other four categories are applicable for layer 3 rules. Amongst them, the Emergency category has the highest priority followed by Infrastructure, Environment and then Application rules. Administrator can choose to categorize a security policy into the above categories or can choose to leave it empty. If empty it will have the least precedence w.r.t the above four categories. - Edge Firewall - Policy Framework for Edge Firewall provides six pre-defined categories \"Emergency\", \"SystemRules\", \"SharedPreRules\", \"LocalGatewayRules\", \"AutoServiceRules\" and \"Default\", in order of priority of rules. All categories are allowed for Gatetway Policies that belong to 'default' Domain. However, for user created domains, category is restricted to \"SharedPreRules\" or \"LocalGatewayRules\" only. Also, the users can add/modify/delete rules from only the \"SharedPreRules\" and \"LocalGatewayRules\" categories. If user doesn't specify the category then defaulted to \"Rules\". System generated category is used by NSX created rules, for example BFD rules. Autoplumbed category used by NSX verticals to autoplumb data path rules. Finally, \"Default\" category is the placeholder default rules with lowest in the order of priority.", "required": false, "title": "A way to classify a security policy, if needed.", "type": "string" }, "children": { "description": "subtree for this type within policy tree containing nested elements.", "items": { "$ref": "ChildPolicyConfigResource }, "required": false, "title": "subtree for this type within policy tree", "type": "array" }, "comments": { "description": "Comments for security policy lock/unlock.", "readonly": false, "required": false, "title": "SecurityPolicy lock/unlock comments", "type": "string" }, "connectivity_preference": { "description": "This field indicates the default connectivity policy for the security policy. Based on the connectivitiy preference, a default rule for this security policy will be created. An appropriate action will be set on the rule based on the value of the connectivity preference. If NONE is selected or no connectivity preference is specified, then no default rule for the security policy gets created. The default rule that gets created will be a any-any rule and applied to entities specified in the scope of the security policy. Specifying the connectivity_preference without specifying the scope is not allowed. The scope has to be a Group and one cannot specify IPAddress directly in the group that is used as scope. This default rule is only applicable for the Layer3 security policies. ALLOWLIST - Adds a default drop rule. Administrator can then use \"allow\" rules to allow traffic between groups DENYLIST - Adds a default allow rule. Admin can then use \"drop\" rules to block traffic between groups ALLOWLIST_ENABLE_LOGGING - Allowlisting with logging enabled DENYLIST_ENABLE_LOGGING - Denylisting with logging enabled NONE - No default rule is created.", "enum": [ "ALLOWLIST", "DENYLIST", "ALLOWLIST_ENABLE_LOGGING", "DENYLIST_ENABLE_LOGGING", "NONE" ], "required": false, "title": "Connectivity preference applicable for this SecurityPolicy", "type": "string" }, "connectivity_strategy": { "deprecated": true, "description": "This field indicates the default connectivity policy for the security policy. Based on the connectivity strategy, a default rule for this security policy will be created. An appropriate action will be set on the rule based on the value of the connectivity strategy. If NONE is selected or no connectivity strategy is specified, then no default rule for the security policy gets created. The default rule that gets created will be a any-any rule and applied to entities specified in the scope of the security policy. Specifying the connectivity_strategy without specifying the scope is not allowed. The scope has to be a Group and one cannot specify IPAddress directly in the group that is used as scope. This default rule is only applicable for the Layer3 security policies. This property is deprecated. Use the type connectivity_preference instead. WHITELIST - Adds a default drop rule. Administrator can then use \"allow\" rules (aka whitelist) to allow traffic between groups BLACKLIST - Adds a default allow rule. Admin can then use \"drop\" rules (aka blacklist) to block traffic between groups WHITELIST_ENABLE_LOGGING - Whitelising with logging enabled BLACKLIST_ENABLE_LOGGING - Blacklisting with logging enabled NONE - No default rule is created.", "enum": [ "WHITELIST", "BLACKLIST", "WHITELIST_ENABLE_LOGGING", "BLACKLIST_ENABLE_LOGGING", "NONE" ], "required": false, "title": "Connectivity strategy applicable for this SecurityPolicy", "type": "string" }, "default_rule_id": { "description": "Based on the value of the connectivity strategy, a default rule is created for the security policy. The rule id is internally assigned by the system for this default rule.", "readonly": true, "required": false, "title": "Default rule ID associated with the connectivity_preference", "type": "integer" }, "description": { "can_sort": true, "maxLength": 1024, "title": "Description of this resource", "type": "string" }, "display_name": { "can_sort": true, "description": "Defaults to ID if not set", "maxLength": 255, "title": "Identifier to use when displaying entity in logs or GUI", "type": "string" }, "id": { "can_sort": true, "title": "Unique identifier of this resource", "type": "string" }, "internal_sequence_number": { "description": "This field is to indicate the internal sequence number of a policy with respect to the policies across categories.", "readonly": true, "title": "Internal sequence number", "type": "int" }, "is_default": { "description": "A flag to indicate whether policy is a default policy.", "readonly": true, "required": false, "title": "Default policy flag", "type": "boolean" }, "lock_modified_by": { "description": "ID of the user who last modified the lock for the secruity policy.", "readonly": true, "required": false, "title": "User who locked the security policy", "type": "string" }, "lock_modified_time": { "$ref": "EpochMsTimestamp, "description": "SecurityPolicy locked/unlocked time in epoch milliseconds.", "readonly": true, "required": false, "title": "SecuirtyPolicy locked/unlocked time" }, "locked": { "default": false, "description": "Indicates whether a security policy should be locked. If the security policy is locked by a user, then no other user would be able to modify this security policy. Once the user releases the lock, other users can update this security policy.", "required": false, "title": "Lock a security policy", "type": "boolean" }, "logging_enabled": { "default": false, "deprecated": true, "description": "This property is deprecated. Flag to enable logging for all the rules in the security policy. If the value is true then logging will be enabled for all the rules in the security policy. If the value is false, then the rule level logging value will be honored.", "readonly": false, "required": false, "title": "Enable logging flag", "type": "boolean" }, "marked_for_delete": { "default": false, "description": "Intent objects are not directly deleted from the system when a delete is invoked on them. They are marked for deletion and only when all the realized entities for that intent object gets deleted, the intent object is deleted. Objects that are marked for deletion are not returned in GET call. One can use the search API to get these objects.", "readonly": true, "required": false, "title": "Indicates whether the intent object is marked for deletion", "type": "boolean" }, "overridden": { "default": false, "description": "Global intent objects cannot be modified by the user. However, certain global intent objects can be overridden locally by use of this property. In such cases, the overridden local values take precedence over the globally defined values for the properties.", "readonly": true, "required": false, "title": "Indicates whether this object is the overridden intent object", "type": "boolean" }, "parent_path": { "description": "Path of its parent", "readonly": true, "required": false, "title": "Path of its parent", "type": "string" }, "path": { "description": "Absolute path of this object", "readonly": true, "required": false, "title": "Absolute path of this object", "type": "string" }, "realization_id": { "description": "This is a UUID generated by the system for realizing the entity object. In most cases this should be same as 'unique_id' of the entity. However, in some cases this can be different because of entities have migrated thier unique identifier to NSX Policy intent objects later in the timeline and did not use unique_id for realization. Realization id is helpful for users to debug data path to correlate the configuration with corresponding intent.", "readonly": true, "required": false, "title": "A unique identifier assigned by the system for realizing intent", "type": "string" }, "relative_path": { "description": "Path relative from its parent", "readonly": true, "required": false, "title": "Relative path of this object", "type": "string" }, "resource_type": { "description": "The type of this resource.", "readonly": false, "type": "string" }, "rule_count": { "description": "The count of rules in the policy.", "readonly": true, "title": "Rule count", "type": "int" }, "rules": { "items": { "$ref": "Rule }, "required": false, "title": "Rules that are a part of this SecurityPolicy", "type": "array" }, "scheduler_path": { "description": "Provides a mechanism to apply the rules in this policy for a specified time duration.", "readonly": false, "required": false, "title": "Path to the scheduler for time based scheduling", "type": "string", "x-vmw-cross-reference": [ { "leftType": [ "ForwardingPolicy", "SecurityPolicy" ], "relationshipType": "COMMUNICATION_MAP_SECURITY_POLICY_SCHEDULER_RELATIONSHIP", "rightType": [ "PolicyFirewallScheduler" ] } ] }, "scope": { "description": "The list of group paths where the rules in this policy will get applied. This scope will take precedence over rule level scope. Supported only for security and redirection policies. In case of RedirectionPolicy, it is expected only when the policy is NS and redirecting to service chain.", "items": { "type": "string" }, "maxItems": 128, "required": false, "type": "array", "x-vmw-cross-reference": [ { "leftType": [ "ForwardingPolicy", "SecurityPolicy" ], "relationshipType": "COMMUNICATION_MAP_SCOPE_RELATIONSHIP", "rightType": [ "Group", "PolicyLabel" ] }, { "leftType": [ "RedirectionPolicy" ], "relationshipType": "REDIRECTION_COMMUNICATION_MAP_SCOPE_RELATIONSHIP", "rightType": [ "Group", "Tier1", "Tier0" ] } ] }, "sequence_number": { "description": "This field is used to resolve conflicts between security policies across domains. In order to change the sequence number of a policy one can fire a POST request on the policy entity with a query parameter action=revise The sequence number field will reflect the value of the computed sequence number upon execution of the above mentioned POST request. For scenarios where the administrator is using a template to update several security policies, the only way to set the sequence number is to explicitly specify the sequence number for each security policy. If no sequence number is specified in the payload, a value of 0 is assigned by default. If there are multiple policies with the same sequence number then their order is not deterministic. If a specific order of policies is desired, then one has to specify unique sequence numbers or use the POST request on the policy entity with a query parameter action=revise to let the framework assign a sequence number. The value of sequence number must be between 0 and 999,999.", "minimum": 0, "title": "Sequence number to resolve conflicts across Domains", "type": "int" }, "stateful": { "description": "Stateful or Stateless nature of security policy is enforced on all rules in this security policy. When it is stateful, the state of the network connects are tracked and a stateful packet inspection is performed. Layer3 security policies can be stateful or stateless. By default, they are stateful. Layer2 security policies can only be stateless.", "readonly": false, "required": false, "title": "Stateful nature of the entries within this security policy.", "type": "boolean" }, "tags": { "items": { "$ref": "Tag }, "maxItems": 30, "title": "Opaque identifiers meaningful to the API user", "type": "array" }, "tcp_strict": { "description": "Ensures that a 3 way TCP handshake is done before the data packets are sent. tcp_strict=true is supported only for stateful security policies. If the tcp_strict flag is not specified and the security policy is stateful, then tcp_strict will be set to true.", "readonly": false, "required": false, "title": "Enforce strict tcp handshake before allowing data packets", "type": "boolean" }, "unique_id": { "description": "This is a UUID generated by the GM/LM to uniquely identify entites in a federated environment. For entities that are stretched across multiple sites, the same ID will be used on all the stretched sites.", "readonly": true, "required": false, "title": "A unique identifier assigned by the system", "type": "string" } }, "title": "Contains ordered list of Rules", "type": "object" }