What are AWS Security Groups?
An AWS security group acts as a virtual firewall for your EC2 instances to control incoming and outgoing traffic. Both inbound and outbound rules control the flow of traffic to and traffic from your instance, respectively.
How AWS Security Groups Work
AWS Security Groups help you secure your cloud environment by controlling how traffic will be allowed into your EC2 machines. With Security Groups, you can ensure that all the traffic that flows at the instance level is only through your established ports and protocols.
When launching an instance on Amazon EC2, you need to assign it to a particular security group. You can add rules to each security group that allow traffic to or from designated services including associated instances.
Like whitelists, security group rules are always permissive. It’s not possible to create rules that deny access. For example, you may have traffic coming from an Elastic Load Balancer [ELB] to a subnet with web servers. You AWS Security Group can list that ELB as their sole permitted source.
Security groups are stateful, which means that if an inbound request passes, then the outbound request will pass as well.
Using Multiple AWS Security Groups
You can specify one or more security groups for each EC2 instance, with a maximum of five per network interface. Additionally, each instance in a subnet in your VPC can be assigned to a different set of security groups. In allowing traffic to reach an instance, Amazon EC2 evaluates all of the rules from all of the security groups associated.
Once rules are added or modified, they will be automatically applied to all instances that are associated with the security group.
With tools like CloudGuard, you can visualize your cloud security posture at the infrastructure level [VPCs, security groups, EC2 and RDS instances, Amazon S3 buckets, Elastic Load Balancers, etc.] and interactively detect configuration drift.
Security Groups and Network ACLs
A network access control list [NACL] is an additional way to control traffic in and out of one or more subnets. Unlike AWS Security Groups, NACLs are stateless, so both inbound and outbound rules will get evaluated. Network ACLs can be set up as an optional, additional layer of security to your VPC.
New AWS Security Groups Functionality
AWS Firewall Manager allows you to centrally configure and manage your firewall rules across AWS accounts and applications. On July 8, 2020, AWS Firewall Manager launched, “new pre-configured rules to help customers audit their VPC security groups and get detailed reports of non-compliance from a central administrator account. This feature makes it easier for customers to centrally audit their security groups,” while “taking away the heavy-lifting of configuring custom audit checks manually.”
Check Point AWS Security Solutions
Like any point solution, AWS Security groups are unlikely to meet all security requirements for most organizations. It’s possible to maintain your own firewall on any of your instances.
Checkpoint CloudGuard platform is a cloud native security solution for Amazon AWS environments. CloudGuard Cloud Network Security provides advanced threat prevention and automated network security with unified management across cloud and on-prem environments. CloudGuard also extends as a security orchestration platform that offers visibility and management into the security posture [CSPM], compliance automation and intrusion detection in the public cloud.
CloudGuard has a native API integration with Amazon Security Hub to provide enhanced visibility into vulnerabilities in an organization’s cloud security and compliance posture from a consolidated security console.
CloudGuard Cloud Network Security actively prevents cyber-attacks and network vulnerabilities and feeds these threat alerts into the AWS Security Hub console. This continuous threat prevention is driven by the platform’s native firewall, IPS, application control, IPsec VPN, antivirus and anti-both capabilities.
Cloud security posture management delivered through Cloudguard helps you visualize your cloud security posture at the infrastructure level [VPCs, security groups, EC2 and RDS instances, Amazon S3 buckets, Elastic Load Balancers, etc.] With CloudGuard, you can interactively detect configuration drift, assess impact of new vulnerabilities and spot firewall rule misconfigurations quickly.
Virtual Private Cloud [VPC] firewall rules apply to a given project and network. If you want to apply firewall rules to multiple VPC networks in an organization, see Firewall policies. The rest of this page covers VPC firewall rules only.
VPC firewall rules let you allow or deny connections to or from your virtual machine [VM] instances based on a configuration that you specify. Enabled VPC firewall rules are always enforced, protecting your instances regardless of their configuration and operating system, even if they have not started up.
Every VPC network functions as a distributed firewall. While firewall rules are defined at the network level, connections are allowed or denied on a per-instance basis. You can think of the VPC firewall rules as existing not only between your instances and other networks, but also between individual instances within the same network.
For more information about firewalls, see Firewall [computing].
Best practices for firewall rules
When designing and evaluating your firewall rules, keep in mind the following best practices:
- Implement least-privilege principles. Block all traffic by default and only allow the specific traffic you need. This includes limiting the rule to just the protocols and ports you need.
- Use hierarchical firewall policy rules to block traffic that should never be allowed at an organization or folder level.
- For "allow" rules, restrict them to specific VMs by specifying the service account of the VMs.
- If you need to create rules based on IP addresses, try to minimize the number of rules. It's easier to track one rule that allows traffic to a range of 16 VMs than it is to track 16 separate rules.
- Turn on Firewall Rules Logging and use Firewall Insights to verify that firewall rules are being used in the intended way. Firewall Rules Logging can incur costs, so you might want to consider using it selectively.
Firewall rules in Google Cloud
When you create a VPC firewall rule, you specify a VPC network and a set of components that define what the rule does. The components enable you to target certain types of traffic, based on the traffic's protocol, destination ports, sources, and destinations. For more information, see firewall rule components.
You create or modify VPC firewall rules by using the Google Cloud console, Google Cloud CLI, and REST API. When you create or modify a firewall rule, you can specify the instances to which it is intended to apply by using the target component of the rule.
In addition to firewall rules that you create, Google Cloud has other rules that can affect incoming [ingress] or outgoing [egress] connections:
Google Cloud blocks or limits certain traffic. For more information, see Blocked and limited traffic.
Google Cloud always allows communication between a VM instance and its corresponding metadata server at
169.254.169.254
. For more information, see always allowed traffic.Every network has two implied firewall rules that permit outgoing connections and block incoming connections. Firewall rules that you create can override these implied rules.
The default network is pre-populated with firewall rules that you can delete or modify.
Specifications
VPC firewall rules have the following characteristics:
Each firewall rule applies to incoming [ingress] or outgoing [egress] connections, not both. For more information, see direction of connection.
Firewall rules support IPv4 connections. IPv6 connections are also supported in VPC networks that have IPv6 enabled. When specifying a source or destination for an ingress or egress rule by address, you can specify IPv4 or IPv6 addresses or blocks in CIDR notation.
Each firewall rule can contain either IPv4 or IPv6 ranges, but not both.
Each firewall rule's action is either
allow
ordeny
. The rule applies to connections as long as it is enforced. For example, you can disable a rule for troubleshooting purposes.When you create a firewall rule, you must select a VPC network. While the rule is enforced at the instance level, its configuration is associated with a VPC network. This means that you cannot share firewall rules among VPC networks, including networks connected by VPC Network Peering or by using Cloud VPN tunnels.
VPC firewall rules are stateful.
- When a connection is allowed through the firewall in either direction, return traffic matching this connection is also allowed. You cannot configure a firewall rule to deny associated response traffic.
- Return traffic must match the 5-tuple [source IP, destination IP, source port, destination port, protocol] of the accepted request traffic, but with the source and destination addresses and ports reversed.
- Google Cloud associates incoming packets with corresponding outbound packets by using a connection tracking table.
- Google Cloud implements connection tracking regardless of whether the protocol supports connections. If a connection is allowed between a source and a target [for an ingress rule] or between a target and a destination [for an egress rule], all response traffic is allowed as long as the firewall's connection tracking state is active. A firewall rule's tracking state is considered active if at least one packet is sent every 10 minutes.
- ICMP response traffic, such as "ICMP TYPE 3, DESTINATION UNREACHABLE", generated in response to an allowed TCP/UDP connection is allowed through the firewall. This behavior is consistent with RFC 792.
VPC firewall rules do not reassemble fragmented TCP packets. Therefore, a firewall rule applicable to the TCP protocol can only apply to the first fragment because it contains the TCP header. Firewall rules applicable to the TCP protocol do not apply to the subsequent TCP fragments.
The maximum number of tracked connections in the firewall rule table depends on the number of stateful connections supported by the machine type of the instance. If the maximum number of tracked connections is exceeded, tracking is stopped for the connections that have the longest idle interval to let new connections be tracked.
Instance machine typeMaximum number of stateful connections Shared-core machine types 130,000 Instances with 1–8 vCPUs 130,000 connections per vCPU Instances with more than 8 vCPUs 1,040,000 [130,000×8] connections total
Implied rules
Every VPC network has two implied IPv4 firewall rules. If IPv6 is enabled in a VPC network, the network also has two implied IPv6 firewall rules. These rules are not shown in the Google Cloud console.
Implied IPv4 firewall rules are present in all VPC networks, regardless of how the networks are created, and whether they are auto mode or custom mode VPC networks. The default network has the same implied rules.
Implied IPv4 allow egress rule. An egress rule whose action is
allow
, destination is0.0.0.0/0
, and priority is the lowest possible [65535
] lets any instance send traffic to any destination, except for traffic blocked by Google Cloud. A higher priority firewall rule may restrict outbound access. Internet access is allowed if no other firewall rules deny outbound traffic and if the instance has an external IP address or uses a Cloud NAT instance. For more information, see Internet access requirements.Implied IPv4 deny ingress rule. An ingress rule whose action is
deny
, source is0.0.0.0/0
, and priority is the lowest possible [65535
] protects all instances by blocking incoming connections to them. A higher priority rule might allow incoming access. The default network includes some additional rules that override this one, allowing certain types of incoming connections.
If IPv6 is enabled, the VPC network also has these two implied rules:
Implied IPv6 allow egress rule. An egress rule whose action is
allow
, destination is::/0
, and priority is the lowest possible [65535
] lets any instance send traffic to any destination, except for traffic blocked by Google Cloud. A higher priority firewall rule may restrict outbound access. Internet access is allowed if no other firewall rules deny outbound traffic and if the instance has an external IP address.Implied IPv6 deny ingress rule. An ingress rule whose action is
deny
, source is::/0
, and priority is the lowest possible [65535
] protects all instances by blocking incoming connections to them. A higher priority rule might allow incoming access.
The implied rules cannot be removed, but they have the lowest possible
priorities. You can create rules that override them as long as your rules have higher priorities [priority numbers less than 65535
]. Because deny
rules take precedence over allow
rules of the same priority, an ingress allow
rule with a priority of 65535
never takes effect.
Pre-populated rules in the default network
The default network is pre-populated with firewall rules that allow incoming connections to instances. These rules can be deleted or modified as necessary:
default-allow-internal
| ingress
| 65534
| 10.128.0.0/9
| allow
| tcp:0-65535
| Permits incoming connections to VM instances from other instances within the same VPC network. |
default-allow-ssh
| ingress
| 65534
| 0.0.0.0/0
| allow
| tcp:22
| Lets you connect to instances with tools such as ssh , scp , or sftp .
|
default-allow-rdp
| ingress
| 65534
| 0.0.0.0/0
| allow
| tcp:3389
| Lets you connect to instances using the Microsoft Remote Desktop Protocol [RDP]. |
default-allow-icmp
| ingress
| 65534
| 0.0.0.0/0
| allow
| icmp
| Lets you use tools such as ping .
|
You can create similar firewall rules for networks other than the default network. See Configure firewall rules for common use cases for more information.
Blocked and limited traffic
Separate from VPC firewall rules and hierarchical firewall policies, Google Cloud blocks or limits certain traffic as described in the following table.
Packet rate and bandwidth Applies to:
| Google Cloud accounts for bandwidth per VM instance, for each network interface [NIC] or IP address. A VM's machine type defines its maximum possible egress rate; however, you can only achieve that maximum possible egress rate in specific situations. For details, see Network bandwidth in the Compute Engine documentation. |
DHCP offers and acknowledgments Applies to:
| Google Cloud blocks incoming DHCP offers and acknowledgments from all sources except for DHCP packets coming from the metadata server. |
Protocols supported by Google Cloud external IP addresses Applies to:
| External IPv4 and IPv6 addresses only accept TCP, UDP, ICMP, IPIP, AH, ESP, SCTP, and GRE packets. Resources that use external IP addresses impose additional protocol restrictions:
|
SMTP [port 25] traffic Applies to:
| By default, Google Cloud blocks egress packets sent to TCP destination port 25 of an external IP address [including an external IP address of another Google Cloud resource]. However, this traffic is not blocked in projects owned by select Google Cloud customers. In the Google Cloud console, the VPC networks page and the Firewall page both display a message that indicates if SMTP port 25 is allowed or disallowed in your project. This block does not apply to egress packets sent to TCP destination port 25 of an internal IP address, including a privately used public IP address in a VPC network or an on-premises network. If external SMTP egress on port 25 is allowed in your project, and you want to send this type of traffic, the following additional conditions must be met:
You can prevent external SMTP egress by creating egress deny VPC firewall rules or hierarchical firewall policies. |
Always allowed traffic
For VM instances, VPC firewall rules and hierarchical firewall policies do not apply to the following:
- Packets sent to and received from the Google Cloud metadata server
Packets sent to an IP address assigned to one of the instance's own network interfaces [NICs] where packets stay within the VM itself. IP addresses assigned to an instance's NIC include:
- The primary internal IPv4 address of the NIC
- Any internal IPv4 address from an alias IP range of the NIC
- If IPv6 is configured on the subnet, any of the IPv6 addresses assigned to the NIC
- An internal or external IPv4 address associated with a forwarding rule, for load balancing or protocol forwarding, if the instance is a backend for the load balancer or is a target instance for protocol forwarding
- Loopback addresses
- Addresses configured as part of networking overlay software you run within the instance itself
Google Cloud metadata server
Google Cloud runs a local metadata server alongside each instance at
169.254.169.254
. This server is essential to the operation of the instance, so the instance can access it regardless of any firewall rules that you configure. The metadata server provides the following basic services to the instance:
- DHCP
- DNS resolution, following the DNS name resolution order for the VPC network.
- Instance metadata
- Network Time Protocol [NTP]
Product interactions
The following sections describe how firewall rules and hierarchical firewall policies interact with other Google Cloud products.
Firewall rules and pass-through load balancers
VPC firewall rules and hierarchical firewall policies do control which of the forwarding rule's supported protocols and ports are allowed to the Network Load Balancing and Internal TCP/UDP Load Balancing backends. For details, see:
- Firewall rules in the Network Load Balancing documentation
- Firewall rules in the Internal TCP/UDP Load Balancing documentation
Firewall rules and proxy load balancers
For external HTTP[S] Load Balancing, Internal HTTP[S] Load Balancing, External SSL Proxy Load Balancing, and External TCP Proxy Load Balancing, VPC firewall rules and hierarchical firewall policies do not control which protocols and ports are accepted by the proxy load balancer's forwarding rule IP address. The forwarding rule alone determines which protocols and ports are accepted by the proxy load balancer.
VPC firewall rules and hierarchical firewall policies do control how these proxy load balancers communicate to their backends. For details, see:
- Firewall rules in the external HTTP[S] Load Balancing documentation
- Firewall rules in the Internal HTTP[S] Load Balancing documentation
- Firewall rules in the External SSL Proxy Load Balancing documentation
- Firewall rules in the External TCP Proxy Load Balancing documentation
Firewall rules and Cloud VPN
Firewall rules and hierarchical firewall policies do not control which protocols and ports are accepted by the Cloud VPN gateway.
Cloud VPN gateways only accept packets for the protocols and ports described in the Cloud VPN specifications.
Firewall rules and GKE
Google Kubernetes Engine creates and manages firewall rules automatically when you create a cluster or resources in the cluster [including Services and Ingresses]. For more information, see Automatically created firewall rules in the Google Kubernetes Engine documentation.
Firewall rule components
Each firewall rule consists of the following configuration components:
A direction from the perspective of the target. Direction can be either ingress or egress.
A numerical priority, which determines whether the rule is applied. Only the highest priority [lowest priority number] rule whose other components match traffic is applied; conflicting rules with lower priorities are ignored.
An action on match, either
allow
ordeny
, which determines whether the rule permits or blocks connections.The enforcement status of the firewall rule: You can enable and disable firewall rules without deleting them.
A target, which defines the instances [including GKE clusters and App Engine flexible environment instances] to which the rule applies.
A source or destination filter for packet characteristics.
The protocol [such as TCP, UDP, or ICMP] and destination port.
A boolean logs option which logs connections that match the rule into Cloud Logging.
Components summary
Priority | Action | Enforcement | Target [receives packets] | Source filter | Destination filter | Protocols and ports |
Integer from 0 to 65535 , inclusive; default 1000 | allow or deny
| enabled [default] or disabled
| The target parameter specifies the instances that receive packets. | Sources for ingress rules | Destinations for ingress rules | Specify a protocol, or a protocol and a destination port. If not set, the rule applies to all protocols and destination ports. For more information, see Protocols and ports. |
Priority | Action | Enforcement | Target [sends packets] | Source filter | Destination filter | Protocols and ports |
Integer from 0 to 65535 , inclusive; default 1000 | allow or deny
| enabled [default] or disabled
| The target parameter specifies the instances that send packets. | Sources for egress rules | Destinations for egress rules | Specify a protocol or a protocol and a destination port. If not set, the rule applies to all protocols and destination ports. For more information, see Protocols and ports. |
Direction of traffic
You can create firewall rules that apply to ingress or egress traffic. A single rule cannot apply to both ingress and egress traffic. However, you can create multiple rules to define the ingress and egress traffic that you allow or deny through the firewall.
Ingress [inbound] describes packets entering a network interface of a target.
Egress [outbound] describes packets leaving a network interface of a target.
If you don't specify a direction, Google Cloud uses ingress.
Priority
The firewall rule priority is an integer
from 0
to 65535
, inclusive. Lower integers indicate higher priorities. If you do not specify a priority when creating a rule, it is assigned a priority of 1000
.
The relative priority of a firewall rule determines whether it is applicable when evaluated against others. The evaluation logic works as follows:
The highest priority rule applicable to a target for a given type of traffic takes precedence. Target specificity does not matter. For example, a higher priority ingress rule for certain destination ports and protocols intended for all targets overrides a similarly defined rule with lower priority for the same destination ports and protocols intended for specific targets.
The highest priority rule applicable for a given protocol and destination port definition takes precedence, even when the protocol and destination port definition is more general. For example, a higher priority ingress rule allowing traffic for all protocols and destination ports intended for given targets overrides a lower priority ingress rule denying TCP 22 for the same targets.
A rule with a
deny
action overrides another with anallow
action only if the two rules have the same priority. Using relative priorities, it is possible to buildallow
rules that overridedeny
rules, anddeny
rules that overrideallow
rules.Rules with the same priority and the same action have the same result. However, the rule that is used during the evaluation is indeterminate. Normally, it doesn't matter which rule is used except when you enable Firewall Rules Logging. If you want your logs to show firewall rules being evaluated in a consistent and well- defined order, assign them unique priorities.
Consider the following example where two firewall rules exist:
An ingress rule from sources
0.0.0.0/0
[any IPv4 address] applicable to all targets, all protocols, and all destination ports, having adeny
action and a priority of1000
.An ingress rule from sources
0.0.0.0/0
[any IPv4 address] applicable to specific targets with the tagwebserver
, for traffic on TCP 80, with anallow
action.
The priority of the second rule determines whether TCP traffic to port 80 is allowed for the webserver
targets:
If the priority of the second rule is set to a number greater than
1000
, it has a lower priority, so the first rule denying all traffic applies.If the priority of the second rule is set to
1000
, the two rules have identical priorities, so the first rule denying all traffic applies.If the priority of the second rule is set to a number less than
1000
, it has a higher priority, thus allowing traffic on TCP 80 for thewebserver
targets. Absent other rules, the first rule would still deny other types of traffic to thewebserver
targets, and it would also deny all traffic, including TCP 80, to instances without thewebserver
tag.
The previous example demonstrates how you can use priorities to create selective allow
rules and global deny
rules to implement a security best practice of least privilege.
Action on match
The action component of a firewall rule determines whether it permits or blocks traffic, subject to the other components of the rule:
An
allow
action permits connections that match the other specified components.A
deny
action blocks connections that match the other specified components.
Enforcement
You can choose whether a firewall rule is enforced by setting its state to enabled
or disabled
. You set the
enforcement state when you create a rule or when you update a rule.
If you don't set an enforcement state when you create a new firewall rule, the firewall rule is automatically enabled
.
Use cases
Disabling and enabling are useful for troubleshooting and performing maintenance. Consider changing the enforcement of a firewall rule in the following situations:
For troubleshooting: In conjunction with Firewall Rules Logging, you can temporarily disable a firewall rule to determine if the rule is responsible for blocking or allowing traffic. This is useful for situations where multiple firewall rules apply to the same traffic. Disabling and enabling rules is more useful than deleting and re-creating rules because none of the other components of the rule are lost.
For maintenance: Disabling firewall rules can simplify periodic maintenance. For example, you might choose to enable an ingress firewall rule that allows SSH access only at times when you need to perform maintenance using SSH. When you're not performing maintenance, you can disable the rule.
Effects on existing traffic
When you change the enforcement state of a firewall rule, or when you create a new rule that is enforced
, the change applies to new connections only. Existing connections are not affected by the change.
Source, destination, target
You can specify both source and destination parameters that apply to the packet sources or destinations for both ingress and egress firewall rules. The direction of the firewall rule determines the possible values for the source and destination parameters.
Targets identify the network interfaces of instances to which the firewall rule applies.
Target parameter
The target parameter identifies the network interfaces of the Compute Engine instances, including GKE nodes and App Engine flexible environment instances.
You can define the following targets for both ingress or egress rules. The target, source, and destination parameters work together as described in Source, destination, target.
Default target—all instances in the VPC network. When you omit a target specification, the firewall rule applies to all instances in the VPC network.
-
Instances by target tags. The firewall rule applies only to instances in the VPC network with a matching network tag. For the maximum number of target tags that you can apply per firewall rule, see VPC resource quotas.
Instances by target service accounts. The firewall rule applies only to instances in the VPC network that use a specific service account. For the maximum number of target service accounts that you can apply per firewall rule, see VPC resource quotas.
For information about the benefits and limitations of target tags and target service accounts, see filtering by service account versus network tag.
Targets and IP addresses for ingress rules
The packets routed to the network interface of a target VM are processed based on the following conditions:
If the ingress firewall rule includes a destination IP address range, the packet's destination must fit within one of the explicitly defined destination IP address ranges [preview feature].
If the ingress firewall rule does not include a destination IP address range, the packet's destination must match one of the following IP addresses:
The primary internal IPv4 address assigned to the instance's NIC.
Any configured alias IP ranges on the instance's NIC.
The external IPv4 address that's associated with the instance's NIC.
If IPv6 is configured on the subnet, any of the IPv6 addresses assigned to the NIC.
An internal or external IP address associated with a forwarding rule used for pass-through load balancing, where the instance is a backend for an internal TCP/UDP load balancer or a network load balancer.
An internal or external IP address associated with a forwarding rule used for protocol forwarding, where the instance is referenced by a target instance.
An IP address within the destination range of a custom static route that uses the instance as a next hop VM [
next-hop-instance
ornext-hop-address
].An IP address within the destination range of a custom static route using an internal TCP/UDP load balancer [
next-hop-ilb
] next hop, if the VM is a backend for that load balancer.
Targets and IP addresses for egress rules
The processing of packets emitted from the network interface of a target depends on the IP forwarding configuration on the target VM. IP forwarding is disabled by default.
When the target VM has IP forwarding disabled, the VM can emit packets with the following sources:
The primary internal IPv4 address of an instance's NIC.
Any configured alias IP range on an instance's NIC.
If IPv6 is configured on the subnet, any of the IPv6 addresses assigned to the NIC.
An internal or external IP address associated with a forwarding rule, for pass-through load balancing or protocol forwarding, if the instance is a backend for an internal TCP/UDP load balancer, a network load balancer, or is referenced by a target instance.
If the egress firewall rule includes source IP address ranges, the target VMs are still limited to the source IP addresses mentioned previously, but the source parameter can be used to refine that set [preview feature]. Use of a source parameter without enabling IP forwarding does not expand the set of possible packet source addresses.
If the egress firewall rule does not include a source IP address range, all the source IP addresses mentioned previously are permitted.
When the target VM has IP forwarding enabled, the VM can emit packets with arbitrary source addresses. You can use the source parameter to more precisely define the set of allowed packet sources.
Sources
Source parameter values depend on the direction of the firewall rule.
Sources for ingress rules
You can use the following sources for ingress firewall rules:
Default source range: When you omit a source specification in an ingress rule, Google Cloud uses the default source IPv4 address range
0.0.0.0/0
[any IPv4 address]. The default value does not include IPv6 sources.Source IPv4 ranges: A list of IPv4 addresses in CIDR format.
Source IPv6 ranges: A list of IPv6 addresses in CIDR format.
Source tags: One or more network tags that identify network interfaces of VM instances in the same VPC network as the firewall rule. For the maximum number of source tags per firewall rule, see VPC resource quotas. For details about packet source addresses when using this implicit source specification, see How source tags and source service accounts imply packet sources.
Source service accounts: One or more service accounts that identify network interfaces of VM instances in the same VPC network as the firewall rule. For the maximum number of source service accounts per firewall rule, see VPC resource quotas. For details about packet source addresses when using this implicit source specification, see How source tags and source service accounts imply packet sources.
A valid source combination: For all of the following combinations, the effective source set is the union of the IPv4 or IPv6 addresses that are explicitly specified and the IP address ranges that are implied by source tag or source service account:
- A combination of source IPv4 ranges and source tags.
- A combination of source IPv6 ranges and source tags.
- A combination of source IPv4 ranges and source service accounts.
- A combination of source IPv6 ranges and source service accounts.
How source tags and source service accounts imply packet sources
When an ingress firewall rule uses a source tag, the packets must be emitted from a network interface that meets the following criteria:
- Network interface uses the same VPC network as the firewall rule.
- Network interface is associated with a VM that has a network tag that matches the firewall rule's source tag.
When an ingress firewall rule uses a source service account, the packets must be emitted from a network interface that meets the following criteria:
- Network interface uses the same VPC network as the firewall rule.
- Network interface is associated with a VM that has a service account that matches the firewall rule's source service account.
In addition to specifying a network interface, when an ingress firewall rule uses either a source tag or a source service account, packets emitted from the network interface of the VM must use one of the following valid source IP addresses:
- The primary internal IPv4 address of that network interface.
- Any IPv6 addresses assigned to that network interface.
No other packet source IP addresses are implied when using source tags or source service accounts. For example, alias IP ranges and external IPv4 address associated with the network interface are excluded. If you need to create ingress firewall rules whose sources include alias IP address ranges or external IPv4 addresses, use source IPv4 ranges.
Sources for egress rules
You can use the following sources for egress firewall rules:
Default—implied by target. If you omit the source parameter from an egress rule, packet sources are defined implicitly as described in Targets and IP addresses for egress rules.
Source IPv4 ranges. A list of IPv4 addresses in CIDR format [preview feature].
Source IPv6 ranges. A list of IPv6 addresses in CIDR format [preview feature].
Destinations
Destinations can be specified by using IP address ranges, which are supported by both ingress and egress rules. The default destination behavior depends on the direction of the rule.
Destinations for ingress rules
You can use the following destinations for ingress firewall rules:
Default—implied by target. If you omit the destination parameter from an ingress rule, packet destinations are defined implicitly as described in Targets and IP addresses for ingress rules.
Destination IPv4 ranges. A list of IPv4 addresses in CIDR format [preview feature].
Destination IPv6 ranges. A list of IPv6 addresses in CIDR format [preview feature].
Destinations for egress rules
You can use the following destinations for egress firewall rules:
Default destination range. When you omit a destination specification in an egress rule, Google Cloud uses the default destination IPv4 address range
0.0.0.0/0
[any IPv4 address]. The default value does not include IPv6 destinations.Destination IPv4 ranges. A list of IPv4 addresses in CIDR format.
Destination IPv6 ranges. A list of IPv6 addresses in CIDR format.
Protocols and ports
You can narrow the scope of a firewall rule by specifying protocols or protocols and destination ports. You can specify a protocol or a combination of protocols and their destination ports. If you omit both protocols and ports, the firewall rule is applicable for all traffic on any protocol and any destination port. Rules based on source ports are not supported.
Not all protocols support ports. For example, ports exist for TCP and UDP, but not for ICMP. ICMP does have different ICMP types, but they are not ports and cannot be specified in a firewall rule.
You can use the following protocol names in
firewall rules: tcp
, udp
, icmp
[for IPv4 ICMP], esp
, ah
, sctp
, and ipip
. For all other protocols, you must use the IANA protocol numbers.
Many protocols use the same name and number in both IPv4 and IPv6, but some protocols, such as ICMP, do not.
The IPv6 Hop-by-Hop protocol is not supported in firewall rules.
The following table summarizes valid protocol and destination port specification combinations for Google Cloud firewall rules.
No protocol and port | — | If you do not specify a protocol, the firewall rule applies to all protocols and their applicable destination ports. |
Protocol | tcp
| If you specify a protocol without any port information, the firewall rule applies to that protocol and all its applicable ports. |
Protocol and single port | tcp:80
| If you specify a protocol and a single destination port, the firewall rule applies to that destination port of the protocol. |
Protocol and port range | tcp:20-22
| If you specify a protocol and a port range, the firewall rule applies to that destination port range for the protocol. |
Combinations | icmp,tcp:80 tcp:443 udp:67-69
| You can specify various combinations of protocols and destination ports to which the firewall rule applies. For more information, see Create firewall rules. |
Source and target filtering by service account
You can use service accounts to create firewall rules that are more specific in nature:
For both ingress and egress rules, you can use service accounts to specify targets.
For ingress rules, you can specify the source for incoming packets as the primary internal IP address of any VM in the network where the VM uses a particular service account.
The service account must be created in the same project as the firewall rule before you create a firewall rule that relies on it. While the system does not stop you from creating a rule that uses a service account from a different project, the rule is not enforced if the service account doesn't exist in the firewall rule's project.
Firewall rules that use service accounts to identify instances apply to both new instances created and associated with the service account and existing instances if you change their service accounts. Changing the service account associated with an instance requires that you stop and restart it. You can associate service accounts with individual instances and with instance templates used by managed instance groups.
Filter by service account versus network tag
This section highlights key points to consider when deciding if you should use service accounts or network tags to define targets and sources [for ingress rules].
If you need strict control over how firewall rules are applied to VMs, use target service accounts and source service accounts instead of target tags and source tags:
A network tag is an arbitrary attribute. One or more network tags can be associated with an instance by any Identity and Access Management [IAM] principal who has permission to edit it. IAM principals with the Compute Engine Instance Admin role to a project have this permission. IAM principals who can edit an instance can change its network tags, which could change the set of applicable firewall rules for that instance.
A service account represents an identity associated with an instance. Only one service account can be associated with an instance. You control access to the service account by controlling the grant of the Service Account User role for other IAM principals. For an IAM principal to start an instance by using a service account, that principal must have the Service Account User role to at least use that service account and appropriate permissions to create instances [for example, having the Compute Engine Instance Admin role to the project].
You cannot mix and match service accounts and network tags in any firewall rule:
You cannot use target service accounts and target tags together in any firewall rule [ingress or egress].
If you specify targets by target tag or target service account, the following are invalid sources for ingress firewall rules.
TargetsInvalid sources Target tags Source service accounts Combination of source IP ranges and source service accounts
Target service account Source tags Combination of source IP ranges and source tags
Following are operational considerations for service accounts and network tags:
Changing a service account for an instance requires stopping and restarting it. Adding or removing tags can be done while the instance is running.
There are a maximum number of target service accounts, source service accounts, target network tags, and source network tags that can be specified for firewall rules. For more information, see VPC resource quotas.
If you identify instances by network tag, the firewall rule applies to the primary internal IP address of the instance.
Service account firewall rules apply to the GKE node, not the GKE Pod.
Roles and permissions
The following table describes the Identity and Access Management [IAM] permissions that you need for working with VPC firewall rules.
Create a firewall rule | compute.firewalls.create
| Compute Security Admin [ roles/compute.securityAdmin ]
|
Delete a firewall rule | compute.firewalls.delete
| Compute Security Admin [ roles/compute.securityAdmin ]
|
Make changes to firewall rules | compute.firewalls.update
| Compute Security Admin [ roles/compute.securityAdmin ]
|
View details about a firewall rule | compute.firewalls.get
| Compute Network Viewer [ roles/compute.networkViewer ]
|
View a list of firewall rules | compute.firewalls.list
| Compute Network Viewer [ roles/compute.networkViewer ]
|
Use cases
The following use cases demonstrate how firewall rules work. In these examples, all the firewall rules are enabled.
Ingress cases
Ingress firewall rules control incoming connections from a source to target instances in your VPC network. The source for an ingress rule can be defined as one of the following:
- A range of IPv4 or IPv6
addresses; the default is any IPv4 address [
0.0.0.0/0
] - Other instances in your VPC network identified by network tags
- Other instances in your VPC network identified by service account
- Other instances in your VPC network identified by range of IPv4 or IPv6 address and by network tag
- Other instances in your VPC network identified by range of IPv4 or IPv6 addresses and by service account
The default source is any IPv4 address [0.0.0.0/0
].
If you want to control incoming connections for sources outside your VPC network, including other sources on the internet, use a range of IP addresses in CIDR format.
Ingress rules with an allow
action permit incoming traffic based on the other components of the rule. In addition to specifying the source and target for the rule, you can limit the rule to apply to specific protocols and
destination ports. Similarly, ingress rules with a deny
action can be used to protect instances by blocking incoming traffic based on the firewall rule components.
Ingress examples
The following diagram illustrates some examples where firewall rules can control ingress connections. The examples use the target parameter in rule assignments to apply rules to specific instances.
Ingress firewall rules example [click to enlarge]An ingress rule with priority
1000
is applicable to VM 1. This rule allows incoming TCP traffic from any IPv4 source [0.0.0.0/0
]. TCP traffic from other instances in the VPC network is allowed, subject to applicable egress rules for those other instances. VM 4 is able to communicate with VM 1 over TCP because VM 4 has no egress rule blocking such communication [only the implied allow egress rule is applicable]. Because VM 1 has an external IP, this rule also permits incoming TCP traffic from external hosts on the internet and from VM 2 via external IP addresses.VM 2 has no specified ingress firewall rule, so the implied deny ingress rule blocks all incoming traffic. Connections from other instances in the network are blocked, regardless of egress rules for the other instances. Because VM 2 has an external IP, there is a path to it from external hosts on the internet, but the implied deny ingress rule blocks external incoming traffic as well.
An ingress rule with priority
1000
is applicable to VM 3. This rule allows TCP traffic from instances in the network with the network tagclient
, such as VM 4. TCP traffic from VM 4 to VM 3 is allowed because VM 4 has no egress rule blocking such communication [only the implied allow egress rule is applicable]. Because VM 3 does not have an external IP, there is no path to it from external hosts on the internet.
Egress cases
Egress firewall rules control outgoing connections from target instances in your VPC network. Egress rules with an allow
action permit traffic from instances based on the other components of the rule. For example, you can permit outbound traffic to specific
destinations, such as a range of IPv4 addresses, on protocols and destination ports that you specify. Similarly, egress rules with a deny
action block traffic based on the other components of the rule.
Every egress rule needs a destination. The default destination is any IPv4 address [0.0.0.0/0
], but you can create a more specific destination by using a range of IPv4 or IPv6 addresses in CIDR format. When specifying a range of IP addresses, you can control traffic to instances
in your network and to destinations outside your network, including destinations on the internet.
Egress examples
The following diagram illustrates some examples where firewall rules can control egress connections. The examples use the target parameter in rule assignments to apply rules to specific instances.
Egress firewall rules example [click to enlarge]VM 1 has no specified egress firewall rule, so the implied allow egress rule lets it send traffic to any destination. Connections to other instances in the VPC network are allowed, subject to applicable ingress rules for those other instances. VM 1 is able to send traffic to VM 4 because VM 4 has an ingress rule allowing incoming traffic from any IP address range. Because VM 1 has an external IP address, it is able to send traffic to external hosts on the internet. Incoming responses to traffic sent by VM 1 are allowed because firewall rules are stateful.
An egress rule with priority
1000
is applicable to VM 2. This rule denies all outgoing traffic to all IPv4 destinations [0.0.0.0/0
]. Outgoing traffic to other instances in the VPC network is blocked, regardless of the ingress rules applied to the other instances. Even though VM 2 has an external IP address, this firewall rule blocks its outgoing traffic to external hosts on the internet.An egress rule with priority
1000
is applicable to VM 3. This rule blocks its outgoing TCP traffic to any destination in the192.168.1.0/24
IP range. Even though ingress rules for VM 4 permit all incoming traffic, VM 3 cannot send TCP traffic to VM 4. However, VM 3 is free to send UDP traffic to VM 4 because the egress rule only applies to the TCP protocol.Also, VM 3 can send any traffic to other instances in the VPC network outside the
192.168.1.0/24
IP range, as long as those other instances have ingress rules to permit such traffic. Because it does not have an external IP address, it has no path to send traffic outside the VPC network.
What's next
- To create and work with firewall rules, see Use VPC firewall rules.
Try it for yourself
If you're new to Google Cloud, create an account to evaluate how VPC performs in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
Try VPC free