{"id":"IL-0078","org":"ZenML","date":"2025-05-11","docs":[],"title":{"en":"Enabling EKS secrets encryption with KMS through Terraform removed worker node IAM permissions and took down all ZenML Pro workspaces","ko":"EKS 업그레이드 중 Terraform 으로 KMS 시크릿 암호화를 켜자 워커 노드의 IAM 권한이 빠져 운영 ZenML Pro 워크스페이스에 모두 접속할 수 없게 됐다"},"domain":["kubernetes","aws"],"impact":{"scope":"all production ZenML Pro workspaces (workspace UIs and pipelines); the ZenML Pro dashboard was unaffected","users":"all ZenML Pro workspace customers","region":"unknown"},"review":{"written_by":"session","reviewed_at":null,"reviewed_by":null},"lessons":{"en":"A successful upgrade on a much smaller staging cluster understated the risk of the same change in production. Skipping Kubernetes and module versions let upgrade complexity build up until one upgrade carried many changes at once.","ko":"팀은 규모가 훨씬 작은 스테이징 클러스터에서 업그레이드가 성공한 것을 보고 운영에서 같은 변경의 위험을 낮게 봤다. 쿠버네티스와 모듈 버전을 건너뛰는 사이 업그레이드 복잡도가 쌓여, 업그레이드 한 번에 많은 변경이 한꺼번에 실렸다."},"related":[],"sources":[{"url":"https://status.zenml.io/incidents/bnrlb8tck3v0","kind":"official-status","license":"unknown","archived":null}],"summary":{"en":"The production EKS cluster that hosts ZenML Pro workspaces was on an outdated Kubernetes version and AMI type. On 9 May 2025 the staging cluster was fully upgraded with little disruption, which also showed that the EKS and VPC Terraform modules had to be upgraded to finish the cluster upgrade. The production upgrade was approved for the weekend of 10 to 11 May.\n\nThe upgrade started at 18:00 on 10 May while most workspaces were idle, and the VPC and EKS module upgrades went through cleanly. At 23:38 KMS secrets encryption was enabled through Terraform as part of the EKS module upgrade; it took much longer than on staging, likely because of the number of nodes and secrets. From 00:45 the upgrade was left to run overnight, since no problems were expected.\n\nApplying the encryption through Terraform hit an undocumented bug: Terraform also removed key IAM permissions from the worker nodes, which made the workspace server pods unreachable from outside the cluster. Editing the IAM roles did not restore access; the node group had to be deleted and recreated with the correct IAM permissions and configuration, and service was fully restored around 07:30. The report counts about eight hours of downtime for all production workspaces, with no data loss, corruption or unauthorised access.\n\nThe report names three contributing factors: outdated EKS and VPC Terraform modules and legacy AMI versions, upgrade complexity that built up because Kubernetes and module versions had been skipped, and a risk judgement based on a staging cluster of much smaller scale.","ko":"ZenML Pro 워크스페이스를 올린 운영 EKS 클러스터는 오래된 쿠버네티스 버전과 AMI 이미지 타입을 쓰고 있었다. 팀은 업그레이드하기로 했다. 5월 9일 스테이징 EKS 클러스터 업그레이드가 큰 문제 없이 끝났다. 팀은 그 과정에서 EKS 와 VPC Terraform 모듈도 올려야 한다는 것을 알았다. 운영 업그레이드는 주말인 5월 10일과 11일에 하기로 승인됐다.\n\n5월 10일 18:00 에 업그레이드를 시작했다. 이때 워크스페이스는 대부분 쉬고 있었다. VPC 모듈과 EKS 모듈 업그레이드는 문제없이 끝났다. 23:38 에 Terraform 이 EKS 모듈 업그레이드 과정에서 AWS KMS 시크릿 암호화를 켰다. 이 작업은 스테이징보다 훨씬 오래 걸렸다. 노드 수와 시크릿 양 때문으로 보였다. 팀은 문제를 예상하지 않았고 00:45 부터 업그레이드가 밤새 돌아가게 두었다.\n\n팀이 다음 날 06:00 에 보니 시크릿 암호화는 성공했지만 Terraform 이 워커 노드의 핵심 IAM 권한을 지운 상태였다. 보고서는 이를 KMS 시크릿 암호화를 Terraform 으로 적용하다 문서에 없는 버그에 걸린 결과로 본다. 클러스터 밖에서 서버 파드에 닿을 수 없어 모든 워크스페이스가 멈췄다. IAM 역할을 고쳐 보는 시도는 실패했고, 결국 노드 그룹을 지우고 다시 만들어야 했다. 7:30 무렵 서비스가 모두 복구됐다.\n\n운영 ZenML Pro 워크스페이스 전체가 약 8시간 멈췄다. 데이터 손실, 손상, 무단 접근은 없었다. 장애에는 여러 요인이 겹쳤다. 팀은 오래된 EKS 와 VPC Terraform 모듈과 옛 AMI 버전에 기대고 있었다. 쿠버네티스와 모듈 버전을 건너뛰는 사이 업그레이드 복잡도가 쌓였다. 팀은 규모가 훨씬 작은 스테이징의 성공만 보고 위험을 낮게 봤다."},"trigger":{"en":"At 23:38 on 10 May, secrets encryption with AWS KMS was enabled through Terraform as part of the EKS module upgrade.","ko":"EKS 모듈을 업그레이드하면서 Terraform 으로 AWS KMS 시크릿 암호화를 켰다. 이 작업이 문서에 없는 버그에 걸려 워커 노드의 IAM 권한이 빠졌다."},"severity":"unknown","symptoms":["service-unavailable"],"timeline":{"detected_after":"6h","resolved_after":"8h"},"date_kind":"incident","detection":{"en":"Engineers found the cluster degraded when they resumed the upgrade at 06:00.","ko":"팀은 밤새 돌게 둔 업그레이드를 이어서 보려고 5월 11일 06:00 에 클러스터를 다시 보다가 비정상 상태를 발견했다."},"components":["terraform","node-pool"],"root_cause":"software-bug","remediation":[{"text":{"en":"deleted and recreated the EKS node group with the correct IAM permissions and configuration","ko":"영향받은 EKS 노드 그룹을 올바른 IAM 권한과 설정으로 다시 만들었다."}},{"text":{"en":"restored service access across all affected ZenML Pro environments","ko":"영향받은 모든 ZenML Pro 환경에서 서비스 접근을 복구했다."}}],"action_items":[{"text":{"en":"Upgrade all Terraform modules (EKS, VPC) to current supported versions","ko":"EKS 와 VPC Terraform 모듈을 모두 현재 지원되는 버전으로 올렸다."}},{"text":{"en":"Complete the EKS cluster upgrades as planned","ko":"계획한 EKS 클러스터 업그레이드를 마쳤다."}},{"text":{"en":"Review the strategy for periodic Kubernetes and infrastructure upgrades to prevent a recurrence","ko":"재발을 막도록 쿠버네티스와 인프라의 정기 업그레이드 전략을 검토한다."}}],"contributing":["staging-not-representative","skipped-upgrades"],"recurrence_of":null,"symptoms_text":{"en":"Between 12 AM and 8 AM CEST on 11 May 2025, every ZenML Pro workspace server was unreachable, so customers could not use workspace UIs or pipelines. The ZenML Pro dashboard was not affected.\n\nWhen engineers resumed an overnight cluster upgrade at 06:00, they found the production EKS cluster degraded. The step that enabled secrets encryption with AWS KMS had succeeded, but Terraform had also removed key IAM permissions from the EKS worker nodes, and the ZenML Pro server pods could no longer be reached from outside the cluster.\n\nChanging the IAM roles to restore access did not work. Between 06:00 and 07:30 the outage continued while the team troubleshot it.","ko":"2025-05-11 0시부터 8시 사이, 중부유럽 서머타임인 CEST 기준으로 ZenML Pro 워크스페이스 서버에 모두 접속할 수 없었다.\n\n5월 11일 06:00 에 밤새 돌게 둔 업그레이드를 이어서 보려던 팀은 운영 클러스터가 비정상 상태인 것을 발견했다. 클러스터 밖에서 ZenML Pro 서버 파드에 접근할 수 없었고 모든 워크스페이스가 사실상 멈춰 있었다.\n\n시크릿 암호화 작업은 성공했지만, 그 부작용으로 Terraform 이 EKS 워커 노드에서 핵심 IAM 권한을 지운 상태였다. 고객은 워크스페이스 UI 와 파이프라인에 접근하지 못했고, ZenML Pro 대시보드는 영향을 받지 않았다.\n\n팀은 IAM 역할을 고쳐 접근을 되살리려 했지만 실패했다."},"updated_at":"2026-11-10T00:00:39.858496Z","url":"https://benchlet.com/incidentlib/app/cases/IL-0078","org_slug":"zenml"}