Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migrated to Confluence 5.3
Table of Contents

Bug Reference: CLOUDSTACK-763

ACL Deny Rules

Currently only ACL allow rules are supported as part of Network ACLs. Default is to block all incoming and all outgoing traffic between tiers and between tiers and various gateways (including Public)By default, all incoming traffic to guest networks is blocked. All outgoing traffic from guest networks is allowed, once you add an ACL rule for outgoing traffic, then only outgoing traffic specified in this ACL rule is allowed, the rest is blocked. ACL deny rules will be supported through this feature. New fields "number"  and "action"will be added to rules to resolve conflicting rules.

NetworkACLContainer NetworkACLList will be introduced to manage NetworkACLs (NetworkACLItems).

Terminology

ACL is Access Control List. So ACL container is kind of redundant. Instead we use the below terminology:

NetworkACLItem - Individual ACL Entry (was NetworlACL earlier). Should we call it NetworkAclEntry instead?

NetworkACL - Group of Network ACL Items.

NetworkACLContainer

API will use the term NetworkACLList to differentiate from the existing NetworkACL APIs

NetworkACL

NetworkACLNetworkACLContainer is a numbered list of  NetworkACLs NetworkACLItems that are evaluated in order, starting with the lowest numbered rule, to determine whether traffic is allowed in or out of any tier associated with the network ACL.

Instead of adding NetworkACLs NetworkACLItems directly to the tier,NetworkACLs NetworkACLItems will be added to the NetworkACLContainer. NetworkACLContainer can be assigned to multiple vpc tiers. Each tier can be associated with only one NetworkACLContainer. Tier will NetworkACL.Tier will be associated with a NetworkACLContainer NetworkACL at all times (default NetworkACLContainer NetworkACL will be used when no ACL container is associated. Default behavior will be deny all).

ACL is associated with a VPC and can be assigned to multiple VPC tiers within the VPC. Each tier can be associated with only one ACL. 

Add/Remove networkACL networkACLItem to containerNetworkACL

NetworkACLs NetworkACLItems can be added to or removed from the container using NetworkACL using APIs createNetworkACL createNetworkACLItem and removeNetworkACL APIs. deleteNetworkACLItem APIs. Changes to ACL (add/update/remove aclItems) will be applied to all associated networks.

DefaultNetworkACL

Tier will be associated with default network acl when no ACL is associated. Default network ACL cannot be removed or modified. Contents of default network ACL:

Rule #

protocol

traffic_type

action

cidr

1

all

Ingress

deny

0.0.0.0/0

2

all

Egress

deny

0.0.0.0/0

Sample workflow

Creating Tier with default acl container and assigning a custom acl container later

  1. Create VPC
  2. Create Tier A - tier is associated with default network ACL container
  3. Create custom network ACL Container
  4. Add ACLs ACLItems to the containerACL
  5. Assign ACL container created in step # 3 to tier A using replaceNetworkACLContainer replaceNetworkACLList API

Create Tier with custom acl container in 1 step

  1. Create VPC
  2. Create custom network ACL Container
  3. Add ACLs to the containerACL
  4. Create Tier A with ACL container created in step # 2

API changes

Existing API

createNetworkAclItem (Aliased to createNetworkACL) - async

Adds a networkACLItem to the specified ACL.createNetworkAcl

New parameters

  • action (requiredoptional- allow/deny - default allow
  • number (requiredoptional- rule number. ACL rules are ordered by this number. Default - current max number + 1
  • aclId container_id (optional) - id of the network ACL container

network_id parameter is not required when container_id is specified.

createNetwork

New parameters

For backward compatibility, if network_id is specified instead of acl_id, networkACLItem will added to the ACL assigned to the network.

deleteNetworkACLItem (Aliased to removeNetworkACL) - async

Deletes specifed network acl item from network ACL. No changes to the params. 

createNetwork

In VPC case, createNetwork is used to create a tier within VPC. Tier can be associated with a ACL during creation. If acl_id is not specified default ACL will be used. Network creation with acl_id will fail if ACL service is not present.

New parameters

  • aclcontainer_id (optional) - id of the network ACL container. Default NetworkACLContainer NetworkACL will be used when not specified. 

new API

updateNetworkACLItem (aliased to updateNetworkACL) - async

Updates an existing NetworkACLItem

Parameters:

  • id (required) - Id of the network ACL Item
  • trafficType (optional) - can be ingress/egress (defaulted to ingress if not specified)
  • cidrlist (optional) - List of the coma separated CIDRs for the rule. If not specified, defaulted to 0.0.0.0/0
  • startPort (optional)
  • endPort (optional)
  • protocol (optional). TCP/UDP/ICMP protocol types are supported
  • icmpType (optional) - type of the icmp message being sent
  • icmpCode (optional) - error code for this icmp message
  • action (optional) - allow/deny
  • number (optional) - rule number

createNetworkAclList - sync

Creates network ACLcreateNetworkAclContainer

Parameters:

  • name - Name of the Network Acl Container Acl (required)
  • description - Description of the Network ACL Container ACL (required)
  • vpcId - Id of the VPC (required)

Response:

  • name - Name of the Network Acl Container
  • id - uuid of the Network Acl Container
  • description - Description of the Network ACL Container
  • vpcId - VPC Id

deleteNetworkAclList - sync

Deletes network ACL. If the container is assigned to any network, deletion will fail. ACL should not contain any ACLItems for deletion to succeed.deleteNetworkAclContainer

Parameters:

  • id - uuid of the Network Acl Container Acl (required)

Response:

  • success - True if Network ACL container is successfully removed, false otherwise

listNetworkAclLists - sync

ACLs can be listed by id or tierlistNetworkAclContainers

Parameters:

  • id - uuid of the Network Acl Container Acl (optional)
  • network_id - list by network_id (Tier) (optional)
  • vpcId - list ACLs associated with specified vpc (optional)
  • acl_item_id: List ACL containing specified acl_item_id

Response:

  • List of network ACLs
  • success - True if Network ACL container is successfully removed, false otherwise

replaceNetworkACLContainer

replaceNetworkACLList - async

Assigns specified ACL to a tier (network)

Parameters:

  • network_id - Id of the network (Tier) (required)
  • containeracl_id: Id of the network ACL container to be associated with the network (required)

Response:

  • success -  True when container ACL is successfully assigned to network, false otherwise

DB

Gliffy Diagram
sizeL
nameNetwork ACL Container ER
alignleft
version3

New Tables

1. network_acl_container

  • New Columns
    • id (long): auto-generated id
    • uuid (string): auto-generated uuid
    • account_id: Account to which the ACL belongs
    • vpc_id: Id of the VPC
    • name: name of the network acl container
    • description: network acl container description

Changes to existing tables

1. firewall_rules

  • New Columns
    • action (String) - Action allow/deny
    • number (long) - Rule priority
    • container_id (long) - Id of the container, this ACL is part of

action, number, container_id are mandatory for rule with purpose NetworkACL.

2. network_acl_item

  • New columns
    • id
    • uuid
    • acl_id
    • action
    • number
    • traffic_type
    • start_port
    • end_port
    • protocol
    • state

Changes to existing tables

12. networks

  • New Columns
    • containeracl_id (long) - network acl container associated with this Tier

...

  • Support ACL action and number
  • Create Network ACL Container
  • Add/Remove ACLs ACLItemss to Network ACL Container
  • Assign Network ACL Container to a Tier

Upgrade

For each tier, a new network acl container is created during the upgrade, All ACLs ACLItems that were assigned to this tier, will be part of the newly created network acl container. If there are no ACLs for any tier, it'll be associated with the default containerACL.

All existing rules in firewall_rules table of type NetworkACL will be moved to network_acl_item table and will have action "allow". Rule number will be sequentially assigned for all rules in each tier.