Docker 빌드, AWS ECR 수동배포 중에 발생한 권한 관련 에러 해결

David Im·2022년 8월 5일
0

본 글은 야간모드에 최적화 되어있습니다. 우측 상단에서 해 혹은 달모양을 클릭시어 velog 설정을 야간모드로 해주시면 더욱 편안하게 읽으실 수 있습니다.

🤔 Question Date : 22.07.29
👊 Solve Date : 22.07.29

최근에 서버내의 env configuration을 수정하다가 잘못 수정해서 배포를 해버렸던 바람에, 배포사항을 수동으로 업데이트하고, 재실행 해줘야하는 상황이 있었다.

gitlab CI/CD 자동화를 하기전에는 맥북을 쓰지 않고 윈도우 환경에서 도커 빌드를 해서 올렸었던 터라, 윈도우 명령어에만 익숙해져있었다.

그 이후로는 CI/CD가 달려있어서 자동으로 빌드,배포가 이루어졌기에 맥북으로 교체하고 나서는 도커를 쓸 일이 그다지 많지 않았다.(회사에 Cloud System 팀이 따로 존재해서 내가 인프라를 만지거나 수동 배포를 할일은 거의 없었음)

하지만 이직을 하시는분들이 생겨서 CS팀이 BE팀이랑 합쳐져 버렸기때문에 관련해서 어제 처음으로 맥OS 환경에서 수동 배포를 진행했다.


Docker 빌드 시 발생한 403 forbidden ERROR 해결

도커 빌드를 진행하려고 도커를 켠 상태에서 빌드 명령어를 쳤더니 빌드를 실행하다가 에러가 발생했다.

(회사 AWS 주소가 표기되어있어 명령어 일부분은 가림처리)

읽어보니 gitlab 토큰 관련 에러였다. 찾아보니 access-token을 가지고서 로그인하라고 하는데 액세스토큰을 넣고서도 빌드를 실행해도 제대로 되지 않았다.

로그인이 제대로 됐는데도 안되어서, 도커 로그인 문제인가 싶었는데 알고보니 우리 회사 gitlab을 회사 서버에 있는 gitlab을 이용하다가 최근에 gitlab 자체서버로 미러링 시켜서 이전 했던게 기억이 났다.

아마 거기서 발생하는 access-token의 권한 인가 차이인거 같아서 확인해보니 역시나 였다.
바로 바뀐 gitlab으로 가서 액세스 토큰을 새로 발급 받았다.

⚠️ 액세스토큰은 발급 받은 이후에 꼭, 꼭 어딘가에 저장해놓도록 하자. 액세스토큰으로 로그인 한 이후에는 액세스토큰으로만 접근이 가능하다.

그리고 아래 명령어를 통해서 도커를 통해 우리 깃랩의 레지스트리 파일을 수정했다.

> docker login registry.gitlab.com

해당 명령어를 입력하면 새로 로그인을 하라고 뜨게 되는데
아마 나는 위에 설명한것처럼 맥북으로 교체하고 나서 수동빌드를 한적이 없었으니, 저 내용이 반영이 안되어있던것 같았다.
Username에는 gitlab 계정을, Password에는 Access-token 을 입력해주자.

그리고 다시 동일하게 명령어를 쳤더니 정상적으로 도커 이미지를 잘 빌드하기 시작했다.

여기까지는 잘 해결!

AWS cli를 통한 Docker image ECR 배포 발생 에러

빌드까지 다 해서 이미지를 떴으니, 이제 AWS ECR 환경에 배포를 해야하는데, 이번에도 마찬가지로 아래처럼 에러가 났다.
aws configure라고 되어있는걸 보고 Docker랑 비슷한 상황이겠구나 싶었다.

you must specify a region. You can also configure your region by running "aws configure".
Error: Cannot perfom an interactive login from a non TTY device


aws cli는 설치를 해둔 상태였었으니, 혹시 몰라 버전 업데이트만 진행시켰다.
혹시나 깔려있지 않다면 아래 두 명령어를 통해 cli 환경 패키지를 설치하고 진행하도록 하자.

brew install aws
brew install aws-cli


버전 업데이트 진행 이후에 아래 명령어를 통해 aws configure 세팅을 진행했다.

aws configure


이렇게 명령어를 치고 나면 아래 처럼 순서대로 나오는 것에 대해서 {} 안에 내용처럼 자신이 사용하는 각각의 값에 대해서 작성하던 복붙하던 해서 설정을 해주면 된다.

AWS Access Key ID : {your AWS Access key}
AWS Secret Access Key : {your AWS Secret key}
Default region name : {your region}
Default output format : json


작성을 다 마치고 나면 아래와 같이 로그인이 성공했다는 내용과 함께 AWS Cli configuration이 끝나게 된다.

Login Succeeded

Logging in with your password grants your terminal complete access to your account.
For better security, log in with a limited-privilege personal access token.
Learn more at https://docs.docker.com/go/access-token

그리고 ECR 배포명령어를 통해 ECR에 다시 push하고, AWS Bastion에 접속해서 쿠버네티스 pod 재실행을 시켜주면 수동 배포 끝~

결론

AWS Cli나 Docker 관련해서 권한 문제등의 오류가 생기면 우선은 key파일이나 계정의 access-token이 만료되지 않았는지 생각해보고, 그와 비슷한 사항으로 예측된다해보면 위에처럼 docker login 정보, aws의 configuration 정보를 확인해서 갱신해주도록 하자.

profile
코더보다 개발자로, 결과와 과정의 시너지를 만들어 가고 싶은 주니어 개발자

0개의 댓글