<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Notes on blog.212clab</title><link>https://212clab.pages.dev/en/notes/</link><description>Recent content in Notes on blog.212clab</description><generator>Hugo</generator><language>en</language><lastBuildDate>Sat, 02 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://212clab.pages.dev/en/notes/index.xml" rel="self" type="application/rss+xml"/><item><title>On-Premises Security Appliances and Cloud Connectivity</title><link>https://212clab.pages.dev/en/notes/2026-05-02-onprem-security-to-cloud/</link><pubDate>Sat, 02 May 2026 00:00:00 +0000</pubDate><guid>https://212clab.pages.dev/en/notes/2026-05-02-onprem-security-to-cloud/</guid><description>&lt;h2 id="on-premises-office-network-security-appliances"&gt;On-Premises Office Network Security Appliances&lt;/h2&gt;
&lt;p&gt;A walkthrough of the security appliances found in a typical corporate office, ordered from the outermost to innermost layer.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;[Internet]
 ↓
[① Firewall] ← External/internal boundary, L3/L4 filtering
 ↓
[② IDS/IPS] ← Intrusion detection/prevention
 ↓
[③ VPN Gateway] ← Encrypted tunnel for remote access
 ↓
[④ WAF] ← Web Application Firewall (L7)
 ↓
[⑤ NAC] ← Network Access Control (endpoint authentication)
 ↓
[Internal Network / Servers]
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="-firewall"&gt;① Firewall&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Item&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Role&lt;/td&gt;
 &lt;td&gt;Filter inbound/outbound traffic, allow/deny by IP/port&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Position&lt;/td&gt;
 &lt;td&gt;Boundary between internet and internal network&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Examples&lt;/td&gt;
 &lt;td&gt;Fortinet FortiGate, Palo Alto, Cisco ASA, Juniper SRX&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Cloud equivalent&lt;/td&gt;
 &lt;td&gt;Security Group + NACL&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Next-generation firewalls (NGFW) inspect up to L7, including application identification, user identification, and SSL decryption.&lt;/p&gt;</description></item><item><title>Penetration Test — Infrastructure Vulnerability Findings and Remediation</title><link>https://212clab.pages.dev/en/notes/2026-04-15-pentest-remediation/</link><pubDate>Wed, 15 Apr 2026 00:00:00 +0000</pubDate><guid>https://212clab.pages.dev/en/notes/2026-04-15-pentest-remediation/</guid><description>&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;
&lt;p&gt;During a KT Cloud TechUp cybersecurity exercise, four red teams conducted a 72-hour penetration test against the PlayBall platform. 28 remediation actions were taken for vulnerabilities found in the infrastructure.&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Item&lt;/th&gt;
 &lt;th&gt;Details&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Period&lt;/td&gt;
 &lt;td&gt;2026-04-02 ~ 04 (72 hours)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Target&lt;/td&gt;
 &lt;td&gt;goormgb.space (Dev), staging.playball.one (Staging)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Red teams&lt;/td&gt;
 &lt;td&gt;4 teams (Team 5, 1, 4, 7)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Infrastructure fixes&lt;/td&gt;
 &lt;td&gt;28 completed&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="major-successful-attacks"&gt;Major Successful Attacks&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Attack&lt;/th&gt;
 &lt;th&gt;Severity&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Kiali/kafka-ui takeover&lt;/td&gt;
 &lt;td&gt;CRITICAL&lt;/td&gt;
 &lt;td&gt;Unauthenticated admin tools exposed externally → cluster info exfiltrated&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;EKS API server exposed&lt;/td&gt;
 &lt;td&gt;HIGH&lt;/td&gt;
 &lt;td&gt;Public 0.0.0.0/0 → anyone could reach the API&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Rate limiting absent&lt;/td&gt;
 &lt;td&gt;HIGH&lt;/td&gt;
 &lt;td&gt;10 consecutive login attempts succeeded; brute force feasible&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Direct ALB access&lt;/td&gt;
 &lt;td&gt;HIGH&lt;/td&gt;
 &lt;td&gt;Requests reached ALB directly, bypassing CloudFront/WAF&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="infrastructure-vulnerabilities-found"&gt;Infrastructure Vulnerabilities Found&lt;/h2&gt;
&lt;h3 id="critical"&gt;CRITICAL&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;ID&lt;/th&gt;
 &lt;th&gt;Vulnerability&lt;/th&gt;
 &lt;th&gt;Remediation&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;C-10&lt;/td&gt;
 &lt;td&gt;Kiali prod unauthenticated write access&lt;/td&gt;
 &lt;td&gt;Admin Tools IP Whitelist (#25)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;C-11&lt;/td&gt;
 &lt;td&gt;kafka-ui unauthenticated, readOnly:false&lt;/td&gt;
 &lt;td&gt;Admin Tools IP Whitelist (#25)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="high"&gt;HIGH&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;ID&lt;/th&gt;
 &lt;th&gt;Vulnerability&lt;/th&gt;
 &lt;th&gt;Remediation&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;H-02&lt;/td&gt;
 &lt;td&gt;K8s API server externally exposed (0.0.0.0/0)&lt;/td&gt;
 &lt;td&gt;EKS Control Plane access restriction (#4)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;H-03&lt;/td&gt;
 &lt;td&gt;K8s internal service DNS exposed&lt;/td&gt;
 &lt;td&gt;NetworkPolicy default-deny (#13)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;H-05&lt;/td&gt;
 &lt;td&gt;Actuator fully exposed&lt;/td&gt;
 &lt;td&gt;Internal path block via AuthorizationPolicy (#24)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;H-06&lt;/td&gt;
 &lt;td&gt;Internal routes + K8s URI exposed&lt;/td&gt;
 &lt;td&gt;Resolved by Actuator removal (#24)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;H-08&lt;/td&gt;
 &lt;td&gt;Server resource info exposed&lt;/td&gt;
 &lt;td&gt;Resolved by Actuator removal (#24)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;H-09&lt;/td&gt;
 &lt;td&gt;Unlimited thread pool DoS&lt;/td&gt;
 &lt;td&gt;Kyverno Require Resource Limits (#17)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;H-10&lt;/td&gt;
 &lt;td&gt;IP blacklist bypass via direct ALB access&lt;/td&gt;
 &lt;td&gt;CloudFront migration + ALB SG restriction (#1, #2, #3)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;H-11&lt;/td&gt;
 &lt;td&gt;SQLi app-level filter bypass risk&lt;/td&gt;
 &lt;td&gt;Istio WAF EnvoyFilter (#21)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;H-12&lt;/td&gt;
 &lt;td&gt;Suspected OS Command Injection&lt;/td&gt;
 &lt;td&gt;Istio WAF EnvoyFilter (#21)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="medium"&gt;MEDIUM&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;ID&lt;/th&gt;
 &lt;th&gt;Vulnerability&lt;/th&gt;
 &lt;th&gt;Remediation&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;M-01&lt;/td&gt;
 &lt;td&gt;Staging ALB directly exposed (no CDN)&lt;/td&gt;
 &lt;td&gt;CloudFront migration (#1)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;M-02&lt;/td&gt;
 &lt;td&gt;Swagger UI externally accessible&lt;/td&gt;
 &lt;td&gt;Returns 404 (resolved)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;M-05&lt;/td&gt;
 &lt;td&gt;Admin endpoint existence confirmed&lt;/td&gt;
 &lt;td&gt;JWT AuthorizationPolicy (#23)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;M-07&lt;/td&gt;
 &lt;td&gt;Actuator RBAC mismatch&lt;/td&gt;
 &lt;td&gt;Internal path block (#24)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;M-08&lt;/td&gt;
 &lt;td&gt;Gateway route count exposed&lt;/td&gt;
 &lt;td&gt;Resolved by Actuator removal (#24)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;M-12&lt;/td&gt;
 &lt;td&gt;No origin validation + no rate limiting&lt;/td&gt;
 &lt;td&gt;Rate Limiting (#22)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="infrastructure-remediation-28-items"&gt;Infrastructure Remediation (28 items)&lt;/h2&gt;
&lt;h3 id="network--access-control"&gt;Network / Access Control&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;#&lt;/th&gt;
 &lt;th&gt;Action&lt;/th&gt;
 &lt;th&gt;Addressed&lt;/th&gt;
 &lt;th&gt;Before&lt;/th&gt;
 &lt;th&gt;After&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;Staging API → CloudFront migration&lt;/td&gt;
 &lt;td&gt;M-01, H-10&lt;/td&gt;
 &lt;td&gt;Direct ALB exposure&lt;/td&gt;
 &lt;td&gt;CloudFront Alias&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;2&lt;/td&gt;
 &lt;td&gt;Prod API → CloudFront migration&lt;/td&gt;
 &lt;td&gt;M-01, H-10&lt;/td&gt;
 &lt;td&gt;Direct ALB / single Cloudflare&lt;/td&gt;
 &lt;td&gt;CloudFront Distribution&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;3&lt;/td&gt;
 &lt;td&gt;Staging ALB SG restriction&lt;/td&gt;
 &lt;td&gt;H-10, M-01&lt;/td&gt;
 &lt;td&gt;443 ← 0.0.0.0/0&lt;/td&gt;
 &lt;td&gt;CloudFront PL + team IPs only&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;4&lt;/td&gt;
 &lt;td&gt;EKS Control Plane access restriction&lt;/td&gt;
 &lt;td&gt;H-02&lt;/td&gt;
 &lt;td&gt;public_access 0.0.0.0/0&lt;/td&gt;
 &lt;td&gt;Bastion SG + team IPs, private_access=true&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;25&lt;/td&gt;
 &lt;td&gt;Admin Tools IP Whitelist&lt;/td&gt;
 &lt;td&gt;C-10, C-11&lt;/td&gt;
 &lt;td&gt;Unauthenticated external access&lt;/td&gt;
 &lt;td&gt;DENY for non-team IPs (kiali/kafka-ui/grafana etc.)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="istio-service-mesh-security"&gt;Istio Service Mesh Security&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;#&lt;/th&gt;
 &lt;th&gt;Action&lt;/th&gt;
 &lt;th&gt;Addressed&lt;/th&gt;
 &lt;th&gt;Before&lt;/th&gt;
 &lt;th&gt;After&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;14&lt;/td&gt;
 &lt;td&gt;mTLS STRICT&lt;/td&gt;
 &lt;td&gt;General encryption&lt;/td&gt;
 &lt;td&gt;PERMISSIVE mixed&lt;/td&gt;
 &lt;td&gt;Mesh-wide STRICT&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;21&lt;/td&gt;
 &lt;td&gt;WAF (EnvoyFilter + Lua)&lt;/td&gt;
 &lt;td&gt;H-11, H-12&lt;/td&gt;
 &lt;td&gt;No L7 detection&lt;/td&gt;
 &lt;td&gt;10-pattern detection (SQLi/XSS/CmdInj etc.) + auto IP blacklist&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;22&lt;/td&gt;
 &lt;td&gt;Rate Limiting (Local + Global)&lt;/td&gt;
 &lt;td&gt;M-12&lt;/td&gt;
 &lt;td&gt;No limits&lt;/td&gt;
 &lt;td&gt;/auth 10/s, /payment 5/s, /signup 3/s&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;23&lt;/td&gt;
 &lt;td&gt;JWT RequestAuthentication + AuthZ&lt;/td&gt;
 &lt;td&gt;M-05&lt;/td&gt;
 &lt;td&gt;App-only JWT validation&lt;/td&gt;
 &lt;td&gt;Istio edge JWKS validation (unauthenticated → 401)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;24&lt;/td&gt;
 &lt;td&gt;Internal path blocking&lt;/td&gt;
 &lt;td&gt;H-05, H-06, H-08, M-07&lt;/td&gt;
 &lt;td&gt;/actuator, /metrics accessible&lt;/td&gt;
 &lt;td&gt;DENY policy applied&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="iam--access-management"&gt;IAM / Access Management&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;#&lt;/th&gt;
 &lt;th&gt;Action&lt;/th&gt;
 &lt;th&gt;Addressed&lt;/th&gt;
 &lt;th&gt;Before&lt;/th&gt;
 &lt;th&gt;After&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;5&lt;/td&gt;
 &lt;td&gt;Node IMDSv2 enforcement&lt;/td&gt;
 &lt;td&gt;SSRF prevention&lt;/td&gt;
 &lt;td&gt;IMDSv1 allowed&lt;/td&gt;
 &lt;td&gt;IMDSv2 only&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;11&lt;/td&gt;
 &lt;td&gt;IAM IRSA least privilege&lt;/td&gt;
 &lt;td&gt;C-02&lt;/td&gt;
 &lt;td&gt;Long-lived Access Keys&lt;/td&gt;
 &lt;td&gt;OIDC-based per-SA IAM Role, static keys revoked&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;12&lt;/td&gt;
 &lt;td&gt;SSO Permission Set separation&lt;/td&gt;
 &lt;td&gt;Least privilege&lt;/td&gt;
 &lt;td&gt;Single Admin-Full&lt;/td&gt;
 &lt;td&gt;4 roles: DevOps/Developer/Security/ReadOnly&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="kubernetes-policy-kyverno"&gt;Kubernetes Policy (Kyverno)&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;#&lt;/th&gt;
 &lt;th&gt;Action&lt;/th&gt;
 &lt;th&gt;Addressed&lt;/th&gt;
 &lt;th&gt;Effect&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;13&lt;/td&gt;
 &lt;td&gt;NetworkPolicy default-deny&lt;/td&gt;
 &lt;td&gt;H-03&lt;/td&gt;
 &lt;td&gt;Blocks lateral movement between namespaces&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;15&lt;/td&gt;
 &lt;td&gt;Disallow Privileged&lt;/td&gt;
 &lt;td&gt;Pod isolation&lt;/td&gt;
 &lt;td&gt;Blocks privileged=true&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;16&lt;/td&gt;
 &lt;td&gt;Disallow :latest Tag&lt;/td&gt;
 &lt;td&gt;Version tracking&lt;/td&gt;
 &lt;td&gt;Prohibits image:latest&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;17&lt;/td&gt;
 &lt;td&gt;Require Resource Limits&lt;/td&gt;
 &lt;td&gt;H-09&lt;/td&gt;
 &lt;td&gt;Enforces CPU/Memory limits&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;18&lt;/td&gt;
 &lt;td&gt;Require ArgoCD Management&lt;/td&gt;
 &lt;td&gt;GitOps enforcement&lt;/td&gt;
 &lt;td&gt;Blocks resources without ArgoCD labels&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;19&lt;/td&gt;
 &lt;td&gt;Protect Critical Namespaces&lt;/td&gt;
 &lt;td&gt;C-10, C-11&lt;/td&gt;
 &lt;td&gt;Blocks unauthorized changes to kube-system/argocd/istio-system&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;20&lt;/td&gt;
 &lt;td&gt;Policy Reporter&lt;/td&gt;
 &lt;td&gt;Violation visibility&lt;/td&gt;
 &lt;td&gt;Collects violations + Discord alerts&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="audit--monitoring"&gt;Audit / Monitoring&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;#&lt;/th&gt;
 &lt;th&gt;Action&lt;/th&gt;
 &lt;th&gt;Effect&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;6&lt;/td&gt;
 &lt;td&gt;EKS Control Plane logging&lt;/td&gt;
 &lt;td&gt;api/audit/authenticator/scheduler all → CloudWatch&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;7&lt;/td&gt;
 &lt;td&gt;CloudTrail Multi-Region + Log Validation&lt;/td&gt;
 &lt;td&gt;Stronger audit trail&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;8&lt;/td&gt;
 &lt;td&gt;Audit log S3 security policy&lt;/td&gt;
 &lt;td&gt;AES256 + Versioning + Lifecycle&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;9&lt;/td&gt;
 &lt;td&gt;Real-time security event alerting&lt;/td&gt;
 &lt;td&gt;EventBridge → Lambda → Discord&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;10&lt;/td&gt;
 &lt;td&gt;S3 audit event summary alerts&lt;/td&gt;
 &lt;td&gt;S3 API monitoring → Discord&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="data-protection"&gt;Data Protection&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;#&lt;/th&gt;
 &lt;th&gt;Action&lt;/th&gt;
 &lt;th&gt;Addressed&lt;/th&gt;
 &lt;th&gt;Before&lt;/th&gt;
 &lt;th&gt;After&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;26&lt;/td&gt;
 &lt;td&gt;RDS encryption + Deletion Protection&lt;/td&gt;
 &lt;td&gt;C-05&lt;/td&gt;
 &lt;td&gt;Default settings&lt;/td&gt;
 &lt;td&gt;storage_encrypted=true, deletion_protection=true&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;27&lt;/td&gt;
 &lt;td&gt;RDS credentials migrated to Secrets Manager&lt;/td&gt;
 &lt;td&gt;C-05&lt;/td&gt;
 &lt;td&gt;Plaintext .env&lt;/td&gt;
 &lt;td&gt;Secrets Manager + External Secrets&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="remediation-results"&gt;Remediation Results&lt;/h2&gt;
&lt;h3 id="before-vs-after"&gt;Before vs After&lt;/h3&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Item&lt;/th&gt;
 &lt;th&gt;Before&lt;/th&gt;
 &lt;th&gt;After&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;EKS API&lt;/td&gt;
 &lt;td&gt;Public 0.0.0.0/0&lt;/td&gt;
 &lt;td&gt;Bastion + team IPs only&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;ALB access&lt;/td&gt;
 &lt;td&gt;Directly exposed&lt;/td&gt;
 &lt;td&gt;CloudFront only&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Admin tools (Kiali, kafka-ui)&lt;/td&gt;
 &lt;td&gt;Unauthenticated external access&lt;/td&gt;
 &lt;td&gt;IP Whitelist + authentication&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Internal communication&lt;/td&gt;
 &lt;td&gt;mTLS PERMISSIVE&lt;/td&gt;
 &lt;td&gt;mTLS STRICT&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;L7 attack defense&lt;/td&gt;
 &lt;td&gt;None&lt;/td&gt;
 &lt;td&gt;WAF 10-pattern detection + auto IP block&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Rate Limiting&lt;/td&gt;
 &lt;td&gt;None&lt;/td&gt;
 &lt;td&gt;Per-path limits (/auth 10/s etc.)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;IAM key management&lt;/td&gt;
 &lt;td&gt;Long-lived Access Keys&lt;/td&gt;
 &lt;td&gt;IRSA (OIDC-based temporary credentials)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;DB credentials&lt;/td&gt;
 &lt;td&gt;Plaintext .env&lt;/td&gt;
 &lt;td&gt;Secrets Manager&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Audit logs&lt;/td&gt;
 &lt;td&gt;Not configured&lt;/td&gt;
 &lt;td&gt;CloudTrail + EventBridge → Discord real-time alerts&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Pod security policy&lt;/td&gt;
 &lt;td&gt;None&lt;/td&gt;
 &lt;td&gt;Kyverno 6 policies + Policy Reporter&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;</description></item><item><title>Istio ext_authz Adapter Design and Implementation</title><link>https://212clab.pages.dev/en/notes/2026-04-10-istio-authz-adapter/</link><pubDate>Fri, 10 Apr 2026 00:00:00 +0000</pubDate><guid>https://212clab.pages.dev/en/notes/2026-04-10-istio-authz-adapter/</guid><description>&lt;h2 id="background"&gt;Background&lt;/h2&gt;
&lt;p&gt;The AI defense team needed to handle two things: real-time bot detection and post-event analysis. Embedding this directly into application code would mean planting an SDK into every service, making it a maintenance nightmare. By using Istio&amp;rsquo;s ext_authz extension point, requests can be &lt;strong&gt;transparently intercepted at the mesh level without touching app code&lt;/strong&gt; and forwarded to the AI engine. I proposed this approach to the AI team and we built it together.&lt;/p&gt;</description></item></channel></rss>