SASE คืออะไรและเปลี่ยนแปลง Network Security อย่างไร
SASE (Secure Access Service Edge) เป็น framework ที่ Gartner นิยามในปี 2019 รวม network services (SD-WAN) เข้ากับ cloud-delivered security services ในแพลตฟอร์มเดียว แทนที่จะมี firewall, proxy, VPN แยกกันหลายตัว SASE รวมทุกอย่างเป็น cloud service เดียวที่ให้บริการจาก edge locations ทั่วโลก
เหตุผลที่ SASE เกิดขึ้นเพราะรูปแบบการทำงานเปลี่ยนไป พนักงานทำงานจากที่ไหนัก็ได้ applications อยู่บน cloud ไม่ได้อยู่ใน data center อีกต่อไป การส่ง traffic กลับมาผ่าน corporate firewall (backhauling) ทำให้ช้าและไม่มีประสิทธิภาพ SASE แก้ปัญหานี้โดยให้ security enforcement อยู่ใกล้กับผู้ใช้และ applications มากที่สุด
SASE ประกอบด้วย 2 ส่วนหลักคือ Network-as-a-Service ที่รวม SD-WAN, WAN Optimization, CDN และ Security-as-a-Service ที่รวม ZTNA (Zero Trust Network Access), SWG (Secure Web Gateway), CASB (Cloud Access Security Broker), FWaaS (Firewall as a Service) และ DLP (Data Loss Prevention)
ผู้ให้บริการ SASE หลักได้แก่ Zscaler ที่เน้น security-first approach, Palo Alto Prisma Access ที่รวม NGFW capabilities, Cloudflare One ที่เน้น developer-friendly, Netskope ที่เน้น CASB และ data protection และ Cisco Umbrella/Meraki ที่เน้น enterprise networking
องค์ประกอบหลักของ SASE Architecture
รายละเอียดแต่ละองค์ประกอบของ SASE
# SASE Architecture Components
#
# ┌────────────────────────────────────────────────┐
# │ SASE Platform │
# │ │
# │ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
# │ │ SD-WAN │ │ ZTNA │ │ SWG │ │
# │ └──────────┘ └──────────┘ └──────────┘ │
# │ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
# │ │ CASB │ │ FWaaS │ │ DLP │ │
# │ └──────────┘ └──────────┘ └──────────┘ │
# │ │
# │ ┌─────────────────────────────────────────┐ │
# │ │ Identity & Context Engine │ │
# │ │ (User, Device, Location, Risk Score) │ │
# │ └─────────────────────────────────────────┘ │
# └────────────────────────────────────────────────┘
#
# 1. SD-WAN (Software-Defined WAN)
# - เชื่อมต่อ branches, data centers, cloud
# - Intelligent path selection
# - Application-aware routing
# - WAN optimization
#
# 2. ZTNA (Zero Trust Network Access)
# - แทนที่ VPN แบบเดิม
# - ไม่เชื่อถือใครโดยอัตโนมัติ
# - Verify identity + device + context ทุกครั้ง
# - Least privilege access
# - Micro-segmentation
#
# 3. SWG (Secure Web Gateway)
# - กรอง web traffic
# - URL filtering, SSL inspection
# - Malware detection
# - Content filtering
#
# 4. CASB (Cloud Access Security Broker)
# - Visibility สำหรับ SaaS apps
# - Shadow IT detection
# - Data protection ใน cloud apps
# - Compliance monitoring
#
# 5. FWaaS (Firewall as a Service)
# - Cloud-based firewall
# - L3-L7 inspection
# - IPS/IDS capabilities
# - DNS security
#
# 6. DLP (Data Loss Prevention)
# - ตรวจจับข้อมูลสำคัญที่กำลังรั่วไหล
# - Pattern matching (credit card, SSN, etc.)
# - Policy enforcement
# - Encryption enforcement
ตั้งค่า Zero Trust Network Access (ZTNA)
ตั้งค่า ZTNA ด้วย Cloudflare Zero Trust
# ติดตั้ง Cloudflare WARP Client (สำหรับ endpoint)
# Linux
curl -fsSL https://pkg.cloudflareclient.com/pubkey.gpg | sudo gpg --dearmor -o /usr/share/keyrings/cloudflare-warp-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/cloudflare-warp-archive-keyring.gpg] https://pkg.cloudflareclient.com/ $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/cloudflare-client.list
sudo apt update && sudo apt install cloudflare-warp -y
# Register device
warp-cli registration new
warp-cli connect
# ตั้งค่า Cloudflare Tunnel (แทน VPN)
# ติดตั้ง cloudflared
sudo apt install cloudflared -y
# Login
cloudflared tunnel login
# สร้าง Tunnel
cloudflared tunnel create my-corp-tunnel
# Created tunnel my-corp-tunnel with id abc-123-def
# ตั้งค่า config.yml
cat > ~/.cloudflared/config.yml << 'EOF'
tunnel: abc-123-def
credentials-file: /root/.cloudflared/abc-123-def.json
ingress:
# Internal web app
- hostname: app.corp.example.com
service: http://localhost:8080
originRequest:
noTLSVerify: true
# SSH access
- hostname: ssh.corp.example.com
service: ssh://localhost:22
# RDP access
- hostname: rdp.corp.example.com
service: rdp://localhost:3389
# Database (PostgreSQL)
- hostname: db.corp.example.com
service: tcp://localhost:5432
# Catch-all
- service: http_status:404
EOF
# Route DNS
cloudflared tunnel route dns abc-123-def app.corp.example.com
cloudflared tunnel route dns abc-123-def ssh.corp.example.com
# Run tunnel
cloudflared tunnel run my-corp-tunnel
# ตั้งค่า Access Policies (ผ่าน Cloudflare Dashboard หรือ API)
# curl -X POST "https://api.cloudflare.com/client/v4/accounts/{account_id}/access/apps" \
# -H "Authorization: Bearer $CF_TOKEN" \
# -H "Content-Type: application/json" \
# -d '{
# "name": "Internal App",
# "domain": "app.corp.example.com",
# "type": "self_hosted",
# "session_duration": "24h",
# "policies": [{
# "name": "Allow employees",
# "decision": "allow",
# "include": [{"email_domain": {"domain": "example.com"}}],
# "require": [{"login_method": {"id": "google-oauth"}}]
# }]
# }'
# ติดตั้ง Tunnel เป็น systemd service
sudo cloudflared service install
sudo systemctl enable cloudflared
sudo systemctl start cloudflared
สร้าง SASE Policy Engine ด้วย Python
สร้าง policy engine สำหรับ SASE access decisions
#!/usr/bin/env python3
# sase_policy.py — SASE Policy Engine
import json
from datetime import datetime
from dataclasses import dataclass
from enum import Enum
from typing import Optional
class Decision(Enum):
ALLOW = "allow"
DENY = "deny"
MFA_REQUIRED = "mfa_required"
ISOLATE = "isolate" # Browser isolation
@dataclass
class AccessRequest:
user_email: str
user_groups: list
device_type: str # managed, byod, unknown
device_os: str
device_compliant: bool # EDR installed, patched, etc.
source_ip: str
source_country: str
destination: str # URL or app name
destination_category: str # saas, internal, internet
risk_score: float # 0.0 - 1.0
timestamp: datetime
mfa_completed: bool
class SASEPolicyEngine:
def __init__(self):
self.policies = []
self._load_default_policies()
def _load_default_policies(self):
# Policy 1: Block high-risk countries
self.policies.append({
"name": "geo-block",
"priority": 100,
"condition": lambda r: r.source_country in ["CN", "RU", "KP", "IR"],
"decision": Decision.DENY,
"reason": "Access from restricted country",
})
# Policy 2: Require MFA for unmanaged devices
self.policies.append({
"name": "byod-mfa",
"priority": 90,
"condition": lambda r: r.device_type == "byod" and not r.mfa_completed,
"decision": Decision.MFA_REQUIRED,
"reason": "MFA required for BYOD devices",
})
# Policy 3: Block non-compliant devices from internal apps
self.policies.append({
"name": "compliance-check",
"priority": 85,
"condition": lambda r: (
not r.device_compliant and
r.destination_category == "internal"
),
"decision": Decision.DENY,
"reason": "Non-compliant device cannot access internal resources",
})
# Policy 4: Browser isolation for risky URLs
self.policies.append({
"name": "risky-isolation",
"priority": 80,
"condition": lambda r: r.risk_score > 0.7 and r.destination_category == "internet",
"decision": Decision.ISOLATE,
"reason": "High-risk browsing session isolated",
})
# Policy 5: Allow managed devices to internal apps
self.policies.append({
"name": "managed-internal",
"priority": 50,
"condition": lambda r: (
r.device_type == "managed" and
r.device_compliant and
r.destination_category in ["internal", "saas"]
),
"decision": Decision.ALLOW,
"reason": "Managed compliant device allowed",
})
# Policy 6: After-hours access requires MFA
self.policies.append({
"name": "after-hours-mfa",
"priority": 70,
"condition": lambda r: (
(r.timestamp.hour < 7 or r.timestamp.hour > 20) and
not r.mfa_completed
),
"decision": Decision.MFA_REQUIRED,
"reason": "MFA required for after-hours access",
})
def evaluate(self, request: AccessRequest) -> dict:
sorted_policies = sorted(self.policies, key=lambda p: p["priority"], reverse=True)
for policy in sorted_policies:
if policy["condition"](request):
return {
"decision": policy["decision"].value,
"policy": policy["name"],
"reason": policy["reason"],
"timestamp": datetime.now().isoformat(),
}
# Default deny
return {
"decision": Decision.DENY.value,
"policy": "default-deny",
"reason": "No matching allow policy",
"timestamp": datetime.now().isoformat(),
}
# ทดสอบ
engine = SASEPolicyEngine()
req = AccessRequest(
user_email="john@example.com",
user_groups=["engineering"],
device_type="managed",
device_os="macOS",
device_compliant=True,
source_ip="203.0.113.50",
source_country="TH",
destination="https://app.internal.example.com",
destination_category="internal",
risk_score=0.1,
timestamp=datetime.now(),
mfa_completed=True,
)
result = engine.evaluate(req)
print(json.dumps(result, indent=2))
เส้นทางอาชีพสาย SASE และ Cloud Security
Certification และ skills ที่ต้องมีสำหรับสาย SASE/Cloud Security
# เส้นทางอาชีพ SASE / Cloud Security
#
# === Level 1: Foundation (0-2 ปี) ===
# ตำแหน่ง: SOC Analyst, Network Security Engineer (Junior)
# เงินเดือน: 25,000-50,000 บาท/เดือน
#
# Skills:
# - TCP/IP, DNS, HTTP/HTTPS fundamentals
# - Firewall (iptables, pf, Windows Firewall)
# - VPN (IPSec, WireGuard, OpenVPN)
# - Basic Linux administration
# - SIEM basics (Splunk, ELK)
#
# Certifications:
# - CompTIA Security+
# - CompTIA Network+
# - Cisco CCNA
#
# === Level 2: Intermediate (2-5 ปี) ===
# ตำแหน่ง: Cloud Security Engineer, SASE Administrator
# เงินเดือน: 50,000-100,000 บาท/เดือน
#
# Skills:
# - Cloud platforms (AWS, Azure, GCP)
# - Identity management (Okta, Azure AD, Keycloak)
# - SASE platforms (Zscaler, Prisma Access, Cloudflare)
# - Zero Trust architecture design
# - Infrastructure as Code (Terraform)
# - Container security (Kubernetes, Docker)
#
# Certifications:
# - CCSP (Certified Cloud Security Professional)
# - AWS Security Specialty
# - Azure Security Engineer (AZ-500)
# - Zscaler Certified Cloud Security Administrator
#
# === Level 3: Senior (5-10 ปี) ===
# ตำแหน่ง: Security Architect, SASE Architect
# เงินเดือน: 100,000-200,000 บาท/เดือน
#
# Skills:
# - Enterprise security architecture
# - SASE/SSE platform design
# - Threat modeling
# - Security automation (SOAR)
# - Compliance frameworks (ISO 27001, SOC 2, NIST)
# - Vendor evaluation and PoC
#
# Certifications:
# - CISSP
# - CISM
# - SABSA (Security Architecture)
# - Palo Alto PCNSE
#
# === Level 4: Leadership (10+ ปี) ===
# ตำแหน่ง: CISO, VP of Security, Security Director
# เงินเดือน: 200,000+ บาท/เดือน
#
# Skills:
# - Risk management
# - Security strategy and roadmap
# - Budget planning
# - Board-level communication
# - Incident response leadership
# - Regulatory compliance
Lab Setup สำหรับฝึก SASE Skills
สร้าง lab environment สำหรับฝึกฝน SASE concepts
# docker-compose.yml — SASE Lab Environment
version: '3.8'
services:
# Simulated internal web app
internal-app:
image: nginx:alpine
volumes:
- ./internal-app:/usr/share/nginx/html
networks:
- corp-net
# Identity Provider (Keycloak)
keycloak:
image: quay.io/keycloak/keycloak:24.0
command: start-dev
environment:
KEYCLOAK_ADMIN: admin
KEYCLOAK_ADMIN_PASSWORD: admin
ports:
- "8080:8080"
networks:
- corp-net
# Reverse Proxy with Auth (simulates ZTNA)
auth-proxy:
image: quay.io/oauth2-proxy/oauth2-proxy:latest
environment:
OAUTH2_PROXY_PROVIDER: keycloak-oidc
OAUTH2_PROXY_CLIENT_ID: sase-lab
OAUTH2_PROXY_CLIENT_SECRET: sase-lab-secret
OAUTH2_PROXY_OIDC_ISSUER_URL: http://keycloak:8080/realms/sase-lab
OAUTH2_PROXY_REDIRECT_URL: http://localhost:4180/oauth2/callback
OAUTH2_PROXY_UPSTREAMS: http://internal-app:80
OAUTH2_PROXY_EMAIL_DOMAINS: "*"
OAUTH2_PROXY_COOKIE_SECRET: $(openssl rand -hex 16)
ports:
- "4180:4180"
depends_on:
- keycloak
- internal-app
networks:
- corp-net
# DNS filtering (simulates SWG)
pihole:
image: pihole/pihole:latest
environment:
TZ: Asia/Bangkok
WEBPASSWORD: admin
ports:
- "53:53/tcp"
- "53:53/udp"
- "8888:80"
volumes:
- pihole-data:/etc/pihole
networks:
- corp-net
# SIEM (simulates security monitoring)
wazuh:
image: wazuh/wazuh-manager:latest
ports:
- "1514:1514/udp"
- "1515:1515"
- "55000:55000"
networks:
- corp-net
networks:
corp-net:
driver: bridge
ipam:
config:
- subnet: 172.20.0.0/16
volumes:
pihole-data:
# Lab Exercises:
# 1. ตั้งค่า Keycloak realm และ OIDC client
# 2. ตั้งค่า OAuth2 Proxy เป็น ZTNA gateway
# 3. ทดสอบ access policies (allow/deny based on user group)
# 4. ตั้งค่า Pi-hole เป็น DNS filter (block malicious domains)
# 5. ตั้งค่า Wazuh สำหรับ security event monitoring
# 6. สร้าง policy engine ที่ตรวจสอบ device compliance
FAQ คำถามที่พบบ่อย
Q: SASE กับ SSE ต่างกันอย่างไร?
A: SSE (Security Service Edge) เป็นส่วน security ของ SASE ไม่รวม SD-WAN ประกอบด้วย ZTNA, SWG, CASB และ FWaaS ส่วน SASE รวมทั้ง networking (SD-WAN) และ security (SSE) เข้าด้วยกัน องค์กรที่มี SD-WAN อยู่แล้วอาจเลือกใช้ SSE เพิ่มเติมแทนที่จะเปลี่ยนไป SASE ทั้งหมด
Q: SASE แทนที่ VPN ได้จริงหรือ?
A: ZTNA ที่เป็นส่วนหนึ่งของ SASE สามารถแทนที่ VPN ได้สำหรับ use case ส่วนใหญ่ ZTNA ดีกว่า VPN ตรงที่ให้ access เฉพาะ application ที่จำเป็น (least privilege) ไม่ได้ให้ access ทั้ง network เหมือน VPN ทำให้ลด attack surface แต่บาง legacy applications อาจยังต้องใช้ VPN อยู่
Q: เริ่มเรียน SASE ควรเริ่มจากอะไร?
A: เริ่มจากเข้าใจ networking fundamentals (TCP/IP, DNS, HTTP) และ security basics (firewall, encryption, authentication) จากนั้นเรียน cloud platforms (AWS/Azure) และ identity management ทดลองใช้ Cloudflare Zero Trust ที่มี free tier สำหรับ 50 users และศึกษา Zero Trust architecture จาก NIST SP 800-207
Q: Certification ไหนคุ้มค่าที่สุดสำหรับสาย SASE?
A: สำหรับ foundation เริ่มจาก CompTIA Security+ เพราะครอบคลุมพื้นฐาน security ทั้งหมด จากนั้น CCSP สำหรับ cloud security โดยเฉพาะ สำหรับ vendor-specific ดู Zscaler หรือ Palo Alto certifications ที่ตรงกับ platform ที่องค์กรใช้ CISSP เหมาะสำหรับ senior level ที่ต้องการ architect-level certification
