TroubleShooting
[Troubleshoot] ECR 권한 이슈 (Your authorization token has expired. Reauthenticate and try again.)
[앙금빵]
2024. 1. 28. 13:54
개요
- 관리의 편의성 목적으로 도커 이미지를 보관을 하기 위해 AWS ECR 서비스를 이용중에 있다.
- AWS IAM profile 인증방식을 통해 각 계정별 ECR Registry에 대한 push/pull 권한을 보유하고 있다.
[+] https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2_instance-profiles.html - 기존 ECR 인증/인가를 위해 AWS CLI v1 버전을 통해 이용중에 있었으나 CLI v1 만료이슈를 대비하여 CLI v2 명령어로 Docker Push/Pull이 되어지도록 젠킨스 스크립트에 수정을 하였다.
이슈사항
일정 시간 이후 ECR Docker push/pull 과정에서 권한 이슈가 발생하였다.
Error 문구
denied: Your authorization token has expired. Reauthenticate and try again.
이슈 원인
CLI v2 버전으로 ECR 로그인을 진행할 경우 12시간 동안 유효한 권한을 지닌 토큰이 생성되어 진다. 12시간이 지난 뒤 docker push/pull 명령어를 진행하게 되는 경우 만료된 토큰으로 권한 이슈가 발생하게 되어진다.
[+] https://docs.aws.amazon.com/ko_kr/AmazonECR/latest/userguide/registry_auth.html
해결 방안
매번 번거롭게 12시간동안 인증토큰 갱신을 위해 ECR Login을 진행하기는 번거롭다. 특히 주말만 지나게 되면 권한 이슈가 발생하게 된다. 이를 방지하기위해 스크립트 작성 이후 crontab에서 정기적으로 ECR 로그인을 진행하여 권한 갱신이 되어지도록 설정하였다.
Step 1. 스크립트 작성
(필자 환경은 여러 계정에서 ECR을 이용하고 있기에 아래 내용으로 여러 계정 대상으로 작성하였다.)
aws ecr get-login --no-include-email --profile <Profile> | docker login --username AWS --password-stdin <AC_NUM>.dkr.ecr.<REGION>.amazonaws.com
Step 2. Crontab 등록
0 8,19 * * * /path/renew_ecr_credentials.sh