GCP 서비스 계정

GCR에 docker image를 업로드 하는 과정에서 Auth 에러가 발생했다.

Auth Error 발생

The push refers to repository [asia.gcr.io/******/********]
************: Preparing
************: Preparing
************: Preparing
************: Preparing
************: Preparing
************: Waiting
************: Waiting
************: Waiting
************: Waiting
************: Waiting
************: Waiting
************: Waiting
************: Waiting
************: Waiting
************: Waiting
************: Waiting
unauthorized: You don't have the needed permissions to perform this operation, and you may have invalid credentials. To authenticate your request, follow the steps in: https://cloud.google.com/container-registry/docs/advanced-authentication

서비스 계정이 설정되어 있지 않아서 발생한 오류였다.



아래 링크에 상세히 설명이 되어있으니 참고하면 좋을 것 같다.
https://cloud.google.com/container-registry/docs/advanced-authentication



위의 링크대로 진행을 하면,

먼저 gcloud 터미널에 로그인을 한다.

$ gcloud auth login





링크를 눌러 google 로그인(프로젝트 소유자 계정)을 하면 스크린샷과 같은 화면이 뜨는데, 이때 'iam.gserviceaccount.com'로 끝나는 계정이 있다면 그것이 바로 서비스 계정이다. (없다면 상단에 계정을 생성할 수 있는 버튼이 있다. 생성하도록 한다.)

아무래도 사용자 계정과 비즈니스를 분리할 수 있도록 해놓은 시스템인 것 같다.

가령 신입사원의 개인 구글 계정에 프로젝트 접근 권한을 주기보다는 관리자 급에서 접근 권한을 관리하기 용이하도록 서비스 계정을 만들어주는 것이 훨씬 깔끔할 것이다.




서비스 계정을 새로 만들었거나, 알게 되었다면 아래의 명령어를 통해 key.json 파일을 생성한다.
이때, key.json파일은 한 서비스 계정 당 딱 한번 생성이 가능하기 때문에 보관에 유의해야한다.

$ gcloud iam service-accounts keys create ~/key.json \
  --iam-account {service 계정 이름}@{project-id}.iam.gserviceaccount.com

그럼 아래와 같이 홈 디렉토리에 key.json 파일이 생성된 것을 볼 수 있다.


이제 gcloud 터미널에 해당 서비스 계정의 인증 정보를 구성한다.
$ gcloud auth activate-service-account {service 계정 이름}@{project-id}.iam.gserviceaccount.com --key-file={key.json 경로}
Activated service account credentials for: [******@*******.iam.gserviceaccount.com]

여기서 key.json 경로를 지정할 때 '~/key.json'은 인식을 못했다.
절대경로나 상대경로를 이용해야할 것 같다.



마지막으로 내 docker에 gcr 접근 권한을 부여하는 명령어를 입력하면 끝!

$ gcloud auth configure-docker
Adding credentials for all GCR repositories.
WARNING: A long list of credential helpers may cause delays running 'docker build'. We recommend passing the registry name to configure only the registry you are using.
After update, the following will be written to your Docker config file
 located at [/Users/******/.docker/config.json]:
 {
  "credHelpers": {
    "gcr.io": "gcloud",
    "us.gcr.io": "gcloud",
    "eu.gcr.io": "gcloud",
    "asia.gcr.io": "gcloud",
    "staging-k8s.gcr.io": "gcloud",
    "marketplace.gcr.io": "gcloud"
  }
}

Do you want to continue (Y/n)?  y

Docker configuration file updated.

좋은 웹페이지 즐겨찾기