IL-0018 UK Ministry of Justice · 2023-01-11kubernetesawssecurity
2023-01-11, UK Ministry of Justice 의 Cloud Platform 에서 Concourse 와 EKS 클러스터 노드가 1시간 28분 동안 Docker Hub 에서 이미지를 받지 못했다. LastPass 대응 작업의 하나로 DockerHub 비밀번호를 바꿨는데, 노드와 Concourse 는 예전 비밀번호를 그대로 쓰고 있었다. 로그인 실패가 거듭되자 Docker Hub 는 toomanyrequests: too many failed login attempts for username or IP address 오류로 요청을 거부했다.
팀은 처음에 Concourse 와 EKS 클러스터의 비밀번호를 새 값으로 바꾸려 했다. 그런데 비밀번호를 바꾸면 런치 템플릿이 바뀌어 live 와 manager 클러스터의 노드를 모두 교체해야 한다는 것이 15:28 에 확인됐다. 15:36 에 팀은 DockerHub 비밀번호를 예전 값으로 되돌리고, 비밀번호 교체는 업무 시간 밖에 노드를 차례로 교체하면서 따로 하기로 했다.
15:40 에 비밀번호를 되돌렸고, 15:46 에 보고한 사용자의 파드가 배포되는 것을 확인했다. 15:50 에 클러스터가 다시 이미지를 받기 시작했고, 15:51 에 장애가 종료됐다. 노드 교체가 필요한지 보려고 먼저 비밀번호를 바꿨던 live-2 클러스터에는 잘못된 dockerconfig 가 남았지만, 사용자에게는 영향이 없었다.
2023-01-11 14:22, Cloud Platform 팀원 한 명이 DockerHub 로그인이 실패하는 오류를 발견했다.
오류 문구는 다음과 같았다. failed to fetch manifest: Head "https://registry-1.docker.io/v2/ministryofjustice/cloud-platform-tools/manifests/2.1": toomanyrequests: too many failed login attempts for username or IP address
14:52 에는 Kuberhealthy 데몬셋 점검에서 클러스터도 이미지를 받지 못한다는 것이 드러났다. 점검 오류는 Check execution error: kuberhealthy/daemonset: error when waiting for pod to start: ErrImagePull 이었다. 14:54 에는 한 사용자가 #ask-cloud-platform 채널에 port-forward 파드를 만들 때 ErrImagePull 이 난다고 알렸다. 적어도 네임스페이스 두 곳이 영향을 받았다.
팀은 14:34 에 클러스터의 DockerHub 비밀번호를 LastPass 에 저장된 값과 비교했다. 14:40 에는 cloud-platform-infrastructure 레포의 terraform.tfvars 에서 Concourse 의 DockerHub 비밀번호를 바꿨다. 14:51 에 LastPass 대응 작업 중 DockerHub 비밀번호가 바뀌었다는 것을 알아냈다. 14:56 에 EKS 클러스터용 비밀번호도 고쳤지만, 15:01 에 Concourse plan 을 보니 런치 템플릿이 바뀌어 노드를 교체해야 할 수도 있다는 것이 드러났다.
증상 이미지 풀 실패
14:22 에 Cloud Platform 팀원이 DockerHub 로그인 실패 오류를 직접 발견했다. 14:52 에는 Kuberhealthy 데몬셋 점검에서 클러스터도 이미지를 받지 못한다는 것이 드러났고, 14:54 에 사용자 보고가 들어왔다. 장애 선언은 15:17 이었다.
이 글은 교훈을 따로 적지 않았다. 후속 조치로는 DockerHub 사용자 이름과 비밀번호 대신 Cloud Platform 전용으로 만든 DockerHub 토큰을 쓰도록 바꿨다.
https://incidentlib-mcp.benchlet.com/mcpAPI 는 키가 필요 없습니다. MCP 서버는 search_incidents, get_incident, list_incidents, get_topic, vocab 도구를 내놓습니다. 사용법은 API 와 MCP.