Firewall rule components (target, source, protocol) in GCP - Time & Space Complexity
Start learning this pattern below
Jump into concepts and practice - no test required
We want to understand how the time to apply firewall rules changes as we add more rules or targets.
Specifically, how does the system handle checking rules with different targets, sources, and protocols?
Analyze the time complexity of applying firewall rules with multiple components.
gcloud compute firewall-rules create allow-custom \
--direction=INGRESS \
--priority=1000 \
--network=default \
--action=ALLOW \
--rules=tcp:80,udp:53 \
--source-ranges=10.0.0.0/24,192.168.1.0/24 \
--target-tags=web-server,db-server
This command creates a firewall rule allowing TCP port 80 and UDP port 53 from two source ranges to two target tags.
Look at what repeats when the firewall processes traffic against these rules.
- Primary operation: Checking each packet against the lists of source ranges (OR match), protocols/ports (OR match), and target tags (AND match).
- How many times: For each incoming packet and each rule, proportional to the sum of source ranges + protocols + targets in the rule.
As you add more source ranges, protocols, or target tags across rules, the total checks add up linearly.
| Total Components (n) | Approx. Checks per Packet |
|---|---|
| 10 | 10 |
| 100 | 100 |
| 1000 | 1000 |
Pattern observation: The number of checks grows linearly with the total number of rule components across all rules.
Time Complexity: O(n)
This means the time to process each packet grows linearly with the total number of rule components (sources + protocols + targets).
[X] Wrong: "Adding more source ranges or targets won't affect processing time much because rules are simple."
[OK] Correct: Each added source, protocol, or target increases the checks the firewall must do per rule, so total processing time grows linearly with these additions.
Understanding how firewall rules scale helps you design efficient security policies and shows you can think about system performance in real cloud environments.
"What if we combined multiple protocols into one rule instead of separate rules? How would the time complexity change?"
Practice
source component specify in a GCP firewall rule?Solution
Step 1: Understand the role of source in firewall rules
The source defines where the incoming traffic comes from, such as specific IP addresses or ranges.Step 2: Differentiate source from target and protocol
The target specifies which machines are affected, and protocol defines the communication type, so source is about origin.Final Answer:
The IP addresses or ranges where traffic originates -> Option CQuick Check:
Source = traffic origin [OK]
- Confusing source with target machines
- Mixing source with protocol type
- Thinking source is about rule priority
Solution
Step 1: Review GCP firewall rule syntax for protocol
Protocols are specified as strings, so they must be enclosed in quotes like "tcp" or "udp".Step 2: Identify correct syntax among options
"tcp" uses quotes correctly. tcp lacks quotes, protocol: tcp and "protocol:tcp" include extra text or wrong format.Final Answer:
"tcp" -> Option AQuick Check:
Protocol strings need quotes [OK]
- Omitting quotes around protocol
- Adding extra text inside protocol string
- Using incorrect syntax like key:value inside quotes
{"sourceRanges": ["192.168.1.0/24"], "targetTags": ["web-server"], "allowed": [{"IPProtocol": "tcp", "ports": ["80"]}]}Which machines will this rule apply to?
Solution
Step 1: Identify the target component in the rule
The rule uses "targetTags": ["web-server"], meaning it applies only to machines tagged "web-server".Step 2: Understand sourceRanges and allowed fields
SourceRanges limits traffic origin; allowed defines protocol and ports. TargetTags define which machines are affected.Final Answer:
Machines tagged with "web-server" -> Option AQuick Check:
TargetTags = affected machines [OK]
- Confusing sourceRanges with target machines
- Thinking sourceRanges limits target machines
- Assuming all machines are affected
{"sourceRanges": ["10.0.0.0/16"], "targetTags": ["db-server"], "allowed": [{"IPProtocol": tcp, "ports": ["5432"]}]}Why does this rule fail to deploy?
Solution
Step 1: Check the protocol field syntax
The protocol name "tcp" must be a string enclosed in quotes. Here, tcp is unquoted, causing syntax error.Step 2: Verify other fields
sourceRanges format is correct, targetTags accept tags, ports can be strings representing port numbers.Final Answer:
Missing quotes around protocol name "tcp" -> Option DQuick Check:
Protocol names need quotes [OK]
- Leaving protocol unquoted
- Confusing tags with IP addresses
- Using numeric ports without quotes (allowed but inconsistent)
Solution
Step 1: Match sourceRanges to the required IP range
The correct sourceRanges ["203.0.113.0/24"] matches the requirement, eliminating configurations using ["0.0.0.0/0"].Step 2: Check targetTags and allowed protocol/ports
{"sourceRanges": ["203.0.113.0/24"], "targetTags": ["frontend"], "allowed": [{"IPProtocol": "tcp", "ports": ["80"]}]} targets "frontend" and allows TCP on port "80" as strings, which is correct. {"sourceRanges": ["203.0.113.0/24"], "targetTags": ["frontend"], "allowed": [{"IPProtocol": "tcp"}]} lacks ports, so incomplete.Step 3: Verify other options
{"sourceRanges": ["0.0.0.0/0"], "targetTags": ["frontend"], "allowed": [{"IPProtocol": "tcp", "ports": [80]}]} allows all IPs (0.0.0.0/0), not restricted. {"sourceRanges": ["203.0.113.0/24"], "targetTags": ["backend"], "allowed": [{"IPProtocol": "udp", "ports": ["80"]}]} targets "backend" and uses UDP, both incorrect.Final Answer:
{"sourceRanges": ["203.0.113.0/24"], "targetTags": ["frontend"], "allowed": [{"IPProtocol": "tcp", "ports": ["80"]}]} -> Option BQuick Check:
Correct source, target, protocol, and port [OK]
- Using wrong IP range or all IPs
- Targeting wrong VM tags
- Missing ports in allowed protocols
- Using wrong protocol like UDP for HTTP
