{"id":"IL-0018","org":"UK Ministry of Justice","date":"2023-01-11","docs":[],"title":{"en":"A Docker Hub password rotation left EKS nodes and Concourse locked out of Docker Hub and unable to pull images","ko":"DockerHub 비밀번호를 바꾼 뒤 Concourse 와 EKS 클러스터 노드가 Docker Hub 에서 이미지를 받지 못했다"},"domain":["kubernetes","aws","security"],"impact":{"scope":"Concourse and EKS cluster nodes could not pull images from Docker Hub for 1h 28m","users":"One user reported ErrImagePull, affecting at least two namespaces","region":"unknown"},"review":{"written_by":"session","reviewed_at":null,"reviewed_by":null},"lessons":{"en":"The write-up states no separate lessons. Its review action replaces the Docker Hub username and password with a Docker Hub token created specifically for Cloud Platform.","ko":"이 글은 교훈을 따로 적지 않았다. 후속 조치로는 DockerHub 사용자 이름과 비밀번호 대신 Cloud Platform 전용으로 만든 DockerHub 토큰을 쓰도록 바꿨다."},"related":[],"sources":[{"url":"https://runbooks.cloud-platform.service.justice.gov.uk/incidents/2023-01-11-cluster-image-pull.html","kind":"runbook","license":"unknown","archived":"http://web.archive.org/web/20260712185114/https://runbooks.cloud-platform.service.justice.gov.uk/incidents/2023-01-11-cluster-image-pull.html"}],"summary":{"en":"On 11 January 2023 the Docker Hub password used by the Ministry of Justice Cloud Platform was changed as part of LastPass remediation activities. Concourse and the EKS cluster nodes kept logging in with the old password, Docker Hub refused them for too many failed login attempts, and neither could pull images from Docker Hub for 1h 28m.\n\nThe team updated the new password in the cloud-platform-infrastructure repository for Concourse at 14:40 and for the EKS cluster at 14:56. At 15:01 the Concourse plan showed that the change would update the launch template, which suggested a node recycle. The team applied the update to the live-2 cluster to find out whether a recycle would be needed, and at 15:28 confirmed that the update would force node recycles across the live and manager clusters. At 15:36 it decided to put the previous Docker Hub password back so that a clean rotation could be done out of hours. The password was changed back at 15:40, the reporting user confirmed at 15:46 that the pod was deploying, and image pulls were working again at 15:50. live-2 was left with an invalid dockerconfig, which had no impact on users.\n\nAs the review action, the platform switched from a Docker Hub username and password to a Docker Hub token created specifically for Cloud Platform.","ko":"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 오류로 요청을 거부했다.\n\n팀은 처음에 Concourse 와 EKS 클러스터의 비밀번호를 새 값으로 바꾸려 했다. 그런데 비밀번호를 바꾸면 런치 템플릿이 바뀌어 live 와 manager 클러스터의 노드를 모두 교체해야 한다는 것이 15:28 에 확인됐다. 15:36 에 팀은 DockerHub 비밀번호를 예전 값으로 되돌리고, 비밀번호 교체는 업무 시간 밖에 노드를 차례로 교체하면서 따로 하기로 했다.\n\n15:40 에 비밀번호를 되돌렸고, 15:46 에 보고한 사용자의 파드가 배포되는 것을 확인했다. 15:50 에 클러스터가 다시 이미지를 받기 시작했고, 15:51 에 장애가 종료됐다. 노드 교체가 필요한지 보려고 먼저 비밀번호를 바꿨던 live-2 클러스터에는 잘못된 dockerconfig 가 남았지만, 사용자에게는 영향이 없었다."},"trigger":{"en":"The Docker Hub password was changed as part of LastPass remediation activities while the EKS cluster nodes and Concourse still logged in with the previous password.","ko":"LastPass 대응 작업의 하나로 DockerHub 비밀번호를 바꿨는데, EKS 클러스터 노드와 Concourse 는 예전 비밀번호로 계속 로그인하고 있었다."},"severity":"unknown","symptoms":["image-pull-failures"],"timeline":{"detected_after":null,"resolved_after":"1h 29m"},"date_kind":"incident","detection":{"en":"A Cloud Platform team member saw the failed Docker Hub login error at 14:22. The Kuberhealthy daemonset check showed at 14:52 that the cluster could not pull images, and a user reported ErrImagePull in #ask-cloud-platform at 14:54.","ko":"14:22 에 Cloud Platform 팀원이 DockerHub 로그인 실패 오류를 직접 발견했다. 14:52 에는 Kuberhealthy 데몬셋 점검에서 클러스터도 이미지를 받지 못한다는 것이 드러났고, 14:54 에 사용자 보고가 들어왔다. 장애 선언은 15:17 이었다."},"components":["registry","launch-template","node-pool","ci-system"],"root_cause":"human-operation","remediation":[{"text":{"en":"Changed the Docker Hub password back to the previous value still used by the EKS cluster nodes and Concourse","ko":"DockerHub 비밀번호를 EKS 클러스터 노드와 Concourse 가 아직 쓰던 예전 값으로 되돌렸다."}},{"text":{"en":"Confirmed with the reporting user that the pod deployed and that cluster image pulls worked again","ko":"보고한 사용자에게 물어 파드가 배포되는 것을 확인했고, 클러스터가 다시 이미지를 받는 것도 확인했다."}}],"action_items":[{"text":{"en":"Switch from the Docker Hub username and password to a Docker Hub token created specifically for Cloud Platform","ko":"DockerHub 사용자 이름과 비밀번호 대신 Cloud Platform 전용으로 만든 DockerHub 토큰을 쓰도록 바꿨다."}},{"text":{"en":"Rotate the password cleanly out of hours with a graceful recycle of the nodes","ko":"업무 시간 밖에 DockerHub 자격 증명을 새 값으로 바꾸고 노드를 차례로 교체한다."}}],"contributing":["credential-coupled-to-config","shared-credential"],"recurrence_of":null,"symptoms_text":{"en":"At 14:22 a Cloud Platform team member noticed failed Docker Hub logins. Fetching an image returned: 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\n\nAt 14:34 the team compared the cluster's Docker Hub passwords with the value stored in LastPass, and at 14:40 updated the Concourse Docker Hub password in the cloud-platform-infrastructure terraform.tfvars. At 14:51 the explanation came out: the Docker Hub password had been changed as part of LastPass remediation activities.\n\nThe problem then showed on the clusters. At 14:52 the Kuberhealthy daemonset check reported that the cluster could not pull images either, with the error \"Check execution error: kuberhealthy/daemonset: error when waiting for pod to start: ErrImagePull\". At 14:54 a user reported ErrImagePull when creating port-forward pods, in at least two namespaces.\n\nUpdating the password for the nodes was not a quick fix. The node dockerconfig had to change, and at 15:01 the Concourse plan showed that the password update would change the launch template. At 15:28 the team confirmed that the update would force node recycles across the live and manager clusters.","ko":"2023-01-11 14:22, Cloud Platform 팀원 한 명이 DockerHub 로그인이 실패하는 오류를 발견했다.\n\n오류 문구는 다음과 같았다.\nfailed 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\n\n14:52 에는 Kuberhealthy 데몬셋 점검에서 클러스터도 이미지를 받지 못한다는 것이 드러났다. 점검 오류는 Check execution error: kuberhealthy/daemonset: error when waiting for pod to start: ErrImagePull 이었다. 14:54 에는 한 사용자가 #ask-cloud-platform 채널에 port-forward 파드를 만들 때 ErrImagePull 이 난다고 알렸다. 적어도 네임스페이스 두 곳이 영향을 받았다.\n\n팀은 14:34 에 클러스터의 DockerHub 비밀번호를 LastPass 에 저장된 값과 비교했다. 14:40 에는 cloud-platform-infrastructure 레포의 terraform.tfvars 에서 Concourse 의 DockerHub 비밀번호를 바꿨다. 14:51 에 LastPass 대응 작업 중 DockerHub 비밀번호가 바뀌었다는 것을 알아냈다. 14:56 에 EKS 클러스터용 비밀번호도 고쳤지만, 15:01 에 Concourse plan 을 보니 런치 템플릿이 바뀌어 노드를 교체해야 할 수도 있다는 것이 드러났다."},"updated_at":"2026-11-10T00:00:36.582030Z","url":"https://benchlet.com/incidentlib/app/cases/IL-0018","org_slug":"uk-ministry-of-justice"}