SiamCafe.net Blog
Cybersecurity

SASE Security Career Development IT — เส้นทางอาชีพ Cloud Security และ Zero Trust

sase security career development it
SASE Security Career Development IT | SiamCafe Blog
2025-12-08· อ. บอม — SiamCafe.net· 1,309 คำ

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

📖 บทความที่เกี่ยวข้อง

SASE Security Distributed Systemอ่านบทความ → Falco Runtime Security Career Development ITอ่านบทความ → JavaScript Deno Deploy Career Development ITอ่านบทความ → SASE Security Low Code No Codeอ่านบทความ → Docker BuildKit Freelance IT Careerอ่านบทความ →

📚 ดูบทความทั้งหมด →