TDCTF Academy Logo TDCTF ACADEMY

9.1.2 Cloud Architecture Security

Arsitektur cloud yang aman dimulai dari desain jaringan dan segmentasi yang tepat. Tidak seperti data center tradisional di mana kita mengontrol物理 switch dan router, di cloud semuanya diimplementasikan sebagai software-defined networking (SDN) - virtual private cloud (VPC), subnet, security groups, network ACL, dan komponen keamanan jaringan lainnya dikonfigurasi melalui API.

VPC Design dan Subnet

Virtual Private Cloud (VPC) adalah jaringan virtual terisolasi di dalam cloud. Setiap resource cloud yang membutuhkan konektivitas jaringan ditempatkan di dalam VPC.

Konsep Dasar VPC

Setiap VPC memiliki:

  • CIDR block: rentang IP privat (contoh: 10.0.0.0/16)
  • Subnet: pembagian VPC menjadi segmen IP yang lebih kecil
  • Route table: aturan routing antar subnet dan ke internet
  • Internet Gateway (IGW): pintu keluar ke internet publik
  • NAT Gateway / NAT Instance: akses internet satu arah untuk subnet privat

Public vs Private Subnet

Aspek Public Subnet Private Subnet
Route to IGW Ya (via route table) Tidak
Akses internet langsung VM punya public IP VM tidak punya public IP
Akses internet keluar Langsung Via NAT Gateway
Akses masuk dari internet Via Security Group + IGW Tidak bisa langsung
Typical workload Load balancer, bastion host Database, application server

Contoh konfigurasi VPC di AWS menggunakan Terraform:

resource "aws_vpc" "main" {
cidr_block = "10.0.0.0/16"
enable_dns_hostnames = true
enable_dns_support = true

tags = {
Name = "production-vpc"
}
}

resource "aws_subnet" "public" {
vpc_id = aws_vpc.main.id
cidr_block = "10.0.1.0/24"
map_public_ip_on_launch = true
availability_zone = "ap-southeast-1a"

tags = {
Name = "public-subnet-1a"
}
}

resource "aws_subnet" "private" {
vpc_id = aws_vpc.main.id
cidr_block = "10.0.2.0/24"
availability_zone = "ap-southeast-1a"

tags = {
Name = "private-subnet-1a"
}
}

Azure VNet

Di Azure, VPC disebut Virtual Network (VNet). Konsepnya identik, dengan beberapa perbedaan terminologi:

resource "azurerm_virtual_network" "main" {
name = "production-vnet"
address_space = ["10.0.0.0/16"]
location = "southeastasia"
resource_group_name = azurerm_resource_group.main.name
}

resource "azurerm_subnet" "public" {
name = "public-subnet"
resource_group_name = azurerm_resource_group.main.name
virtual_network_name = azurerm_virtual_network.main.name
address_prefixes = ["10.0.1.0/24"]
}

GCP VPC

GCP memiliki pendekatan berbeda: VPC bersifat global (bukan per-region). Subnet bisa regional atau custom.

# gcloud command (setara)
gcloud compute networks create production-vpc \
--subnet-mode=custom \
--bgp-routing-mode=global

gcloud compute networks subnets create public-subnet \
--network=production-vpc \
--region=asia-southeast1 \
--range=10.0.1.0/24

Security Groups vs Network ACL

Dua layer keamanan jaringan yang sering membingungkan adalah Security Group (Stateful) dan Network ACL (Stateless).

Security Group (AWS) / NSG (Azure) / Firewall Rule (GCP)

Security Group bertindak sebagai virtual firewall stateful di level instance/networking interface.

  • Stateful: jika traffic inbound diizinkan, response outbound otomatis diizinkan
  • Default: deny all inbound, allow all outbound
  • Rule: hanya bisa allow (tidak bisa explicit deny)
  • Attachment: ke ENI (Elastic Network Interface) / VM
  • Evaluation: semua rule dievaluasi sebelum keputusan

Contoh security group untuk web server di AWS:

{
"IpPermissions": [
{
"IpProtocol": "tcp",
"FromPort": 80,
"ToPort": 80,
"IpRanges": [{"CidrIp": "0.0.0.0/0", "Description": "HTTP from internet"}]
},
{
"IpProtocol": "tcp",
"FromPort": 443,
"ToPort": 443,
"IpRanges": [{"CidrIp": "0.0.0.0/0", "Description": "HTTPS from internet"}]
},
{
"IpProtocol": "tcp",
"FromPort": 22,
"ToPort": 22,
"IpRanges": [{"CidrIp": "10.0.0.0/8", "Description": "SSH from internal"}]
}
]
}

Network ACL (AWS) / Azure Firewall / GCP Firewall Rules

NACL adalah firewall stateless di level subnet.

  • Stateless: rule inbound dan outbound harus dikonfigurasi terpisah
  • Support allow dan deny: bisa explicit deny
  • Rule number: dievaluasi dari nomor rule terkecil
  • Default VPC NACL: allow all inbound/outbound (terlalu permisif)

Contoh NACL ketat untuk subnet publik di AWS:

[
{"RuleNumber": 100, "RuleAction": "allow", "CidrBlock": "0.0.0.0/0", "FromPort": 80, "ToPort": 80, "Protocol": "tcp", "Egress": false},
{"RuleNumber": 110, "RuleAction": "allow", "CidrBlock": "0.0.0.0/0", "FromPort": 443, "ToPort": 443, "Protocol": "tcp", "Egress": false},
{"RuleNumber": 200, "RuleAction": "allow", "CidrBlock": "0.0.0.0/0", "FromPort": 1024, "ToPort": 65535, "Protocol": "tcp", "Egress": true},
{"RuleNumber": "*", "RuleAction": "deny", "CidrBlock": "0.0.0.0/0", "FromPort": 0, "ToPort": 65535, "Protocol": "*", "Egress": false}
]

Perbandingan

Aspek Security Group NACL
State Stateful Stateless
Level Instance/ENI Subnet
Allow only ✓ (tidak bisa deny) Allow + Deny
Rule evaluation Semua dievaluasi Nomor urut (ascending)
Use case Per-instance firewall Subnet-level guard

Multi-Tier Architecture

Arsitektur multi-tier memisahkan komponen aplikasi ke layer berbeda dengan akses jaringan terbatas.

3-Tier Architecture di Cloud

[Internet]
|
[Cloud WAF] - AWS WAF / Azure WAF / GCP Cloud Armor
|
[Public Subnet] - Application Load Balancer
|
[App Subnet] - Application Server (EC2 / VM / GKE)
|
[Private Subnet] - Database (RDS / Cloud SQL)

Implementasi di AWS

# Security Group untuk ALB
resource "aws_security_group" "alb" {
name = "alb-sg"
vpc_id = aws_vpc.main.id

ingress {
from_port = 443
to_port = 443
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}

egress {
from_port = 0
to_port = 0
protocol = "-1"
cidr_blocks = ["10.0.0.0/16"]
}
}

# Security Group untuk App Server (hanya dari ALB)
resource "aws_security_group" "app" {
name = "app-sg"
vpc_id = aws_vpc.main.id

ingress {
from_port = 8080
to_port = 8080
protocol = "tcp"
security_groups = [aws_security_group.alb.id]
}
}

# Security Group untuk Database (hanya dari App)
resource "aws_security_group" "db" {
name = "db-sg"
vpc_id = aws_vpc.main.id

ingress {
from_port = 5432
to_port = 5432
protocol = "tcp"
security_groups = [aws_security_group.app.id]
}
}

Best Practices Multi-Tier

  1. No direct internet access to database layer: database hanya bisa diakses dari application layer
  2. Use private subnets untuk layer sensitif: database, cache, message queue
  3. Terapkan security group chaining: SG database hanya mengizinkan traffic dari SG app server, bukan dari CIDR range
  4. Gunakan VPC Endpoint untuk AWS services: akses S3, DynamoDB tanpa melalui internet
  5. Enable VPC Flow Logs: capture semua traffic untuk audit dan troubleshooting

DMZ di Cloud

DMZ (Demilitarized Zone) di cloud diimplementasikan dengan kombinasi:

  • Public subnet: untuk load balancer dan bastion host
  • Security Group ketat: hanya port tertentu yang terbuka ke internet
  • Web Application Firewall (WAF): di depan ALB untuk filtering HTTP/S

Cloud WAF

AWS WAF

AWS WAF melindungi aplikasi web dari common exploits:

{
"Name": "owasp-top-10-rules",
"Rules": [
{
"Name": "SQLInjection",
"Priority": 1,
"Action": "Block",
"Statement": {
"SqliMatchStatement": {
"FieldToMatch": {"UriPath": {}},
"TextTransformations": [{"Priority": 0, "Type": "URL_DECODE"}]
}
}
},
{
"Name": "XSS",
"Priority": 2,
"Action": "Block",
"Statement": {
"XssMatchStatement": {
"FieldToMatch": {"Body": {}},
"TextTransformations": [{"Priority": 0, "Type": "HTML_ENTITY_DECODE"}]
}
}
},
{
"Name": "RateLimit",
"Priority": 10,
"Action": "Block",
"Statement": {
"RateBasedStatement": {
"Limit": 2000,
"AggregateKeyType": "IP"
}
}
}
]
}

Azure WAF

Azure WAF terintegrasi dengan Application Gateway dan Front Door. Menyediakan OWASP CRS 3.2 secara default.

GCP Cloud Armor

Cloud Armor melindungi workload di GCP dengan rules berbasis:

  • OWASP ModSecurity CRS
  • Pre-configured rules (XSS, SQLi, LFI, RCE)
  • Rate limiting berbasis IP atau user

CDN Security

Content Delivery Network (CDN) di cloud - AWS CloudFront, Azure CDN, GCP Cloud CDN - harus dikonfigurasi dengan aman:

  1. Origin Access Identity (OAI): CloudFront hanya boleh mengakses S3 via OAI, bukan publik
  2. Signed URLs / Signed Cookies: untuk konten premium
  3. Field-Level Encryption: enkripsi field sensitif di form POST
  4. AWS WAF integration: attach WAF ke CloudFront distribution
  5. Geographic restrictions: blokir traffic dari negara tertentu jika diperlukan

Contoh konfigurasi OAI CloudFront untuk S3:

resource "aws_cloudfront_origin_access_identity" "oai" {
comment = "OAI untuk S3 bucket"
}

resource "aws_s3_bucket_policy" "cloudfront_access" {
bucket = aws_s3_bucket.static.id
policy = jsonencode({
Version = "2012-10-17"
Statement = [
{
Effect = "Allow"
Principal = {
AWS = aws_cloudfront_origin_access_identity.oai.iam_arn
}
Action = "s3:GetObject"
Resource = "${aws_s3_bucket.static.arn}/*"
}
]
})
}

Best Practices Per Provider

AWS

  • Gunakan AWS Network Firewall untuk inline inspection traffic VPC-VPC atau VPC-internet
  • Aktifkan VPC Flow Logs di semua VPC
  • Gunakan AWS Transit Gateway untuk hub-and-spoke VPC architecture
  • Implementasikan AWS Shield Advanced untuk DDoS protection

Azure

  • Gunakan Azure DDoS Protection Standard di VNet
  • Implementasikan Azure Firewall sebagai perimeter keamanan terpusat
  • Gunakan Azure Policy untuk enforce network security rules
  • Manfaatkan Azure Private Link untuk koneksi privat ke PaaS services

GCP

  • Gunakan VPC Service Controls untuk membatasi data exfiltration
  • Implementasikan Cloud NAT untuk outbound traffic dari private instance
  • Gunakan Packet Mirroring untuk network traffic inspection
  • Manfaatkan Cloud IDS untuk intrusion detection

Kesimpulan

Arsitektur cloud yang aman dimulai dari desain jaringan yang matang. Dengan memahami VPC, subnet, security groups, NACL, multi-tier architecture, WAF, dan CDN security, kita bisa membangun infrastruktur cloud yang resilient terhadap serangan. Kunci utamanya adalah defense in depth - jangan hanya mengandalkan satu lapis keamanan.

PADA HALAMAN INI