【GCP/GCE】VM 인스턴스에 자동 배포

4085 단어 gcpgce
VM 인스턴스에 자동 배포를 구현할 때 가정과 조금 다르므로 비망록으로 기재해 둡니다.
※GCP에의 인증 부분만입니다

절차


  • 서비스 계정 생성
  • 서비스 계정 사용자 적응
  • CircleCI 구현

  • 서비스 계정 생성



    아래의 권한으로 CircleCI용 서비스 계정을 만들었습니다.


    서비스 계정 사용자 적응



    여기가 조금 어색했습니다.
    위의 서비스 계정으로만 배포하면 다음 오류가 발생합니다.
    The user does not have access to service account '{PROJECT_NUMBER}[email protected]'.
    User: 'circleci-for-auto-deploy@*************.iam.gserviceaccount.com'.
    Ask a project owner to grant you the iam.serviceAccountUser role on the service account
    

    즉, 자신이 만든 서비스 계정(User)이 서비스 계정( 이 m 뿌테 @로 ゔ ぇぺぺr. g r ゔ ぃ 세 아코 응 t. 이 m )에 액세스할 권한이 없다는 것이었습니다.

    해결책


    Compute Engine default service account 에서 관리됨{PROJECT_NUMBER}[email protected] 에서 위에서 만든 서비스 계정을 서비스 계정 사용자로 추가해야 합니다.



    google cloud platform - gcloud: The user does not have access to service account "default" - Stack Overflow
    서비스 계정에 역할 부여  | Cloud IAM 문서  |  Google Cloud

    기본 서비스 계정



    프로젝트에서 Compute Engine API를 사용하도록 설정하면 기본적으로 Compute Engine 서비스 계정이 만들어집니다.

    위의 {PROJECT_NUMBER}[email protected]는 API를 활성화하면 자동으로 생성되는 것 같습니다.
    서비스 계정  | Cloud IAM 문서  |  Google Cloud

    서비스 계정 사용자



    서비스 계정 사용자 역할(roles/iam.serviceAccountUser)은 프로젝트의 모든 서비스 계정에 대해 프로젝트별 또는 서비스 계정별로 지정할 수 있습니다.

    사용자나 서비스 계정으로 추가할 수 있는 것 같습니다.

    특정 서비스 계정으로 사용자에게 서비스 계정 사용자 역할을 부여하면 사용자에게 해당 서비스 계정에만 액세스할 수 있습니다.

    이번에는 CircleCI 서비스 계정을 GCE 서비스 계정에 부여하므로 여기에 해당하는 것 같습니다.
    서비스 계정  | Cloud IAM 문서  |  Google Cloud

    어째서 일부러 이런 귀찮은 일을 하는 것인가.



    왜 서비스 계정 사용자가 필요한가?
    디폴트의 ​​계정을 CircleCI의 서비스 키로 하는 방법도 있지만, 그럼 권한이 너무 커서 적절하지 않고.

    디폴트의 ​​서비스 어카운트를 삭제해, GCE용의 서비스 어카운트를 새롭게 재작성하는 방법도 생각해 냈지만, 원래 디폴트의 서비스 어카운트를 삭제하는 것이 좋지 않은 것 같다.
    Google Compute Engine에서 만든 기본 서비스 계정에 대한 참고 사항 - Amemo

    음, GCE에 자동 배포할 때는 여러분 어떻게 하고 있는 것일까. . . . .

    CircleCI 구현



    인증은 아래와 같은 느낌으로 구현했다.
    make gcp-auth
    
    GCLOUD_AUTH = gcloud auth
    
    ## 認証
    gcp-auth:
      echo -n ${GCE_SERVICE_KEY} | base64 --decode > gcloud-service-key.json
      @$(GCLOUD_AUTH) activate-service-account --key-file gcloud-service-key.json
      @$(GCLOUD_AUTH) configure-docker
    

    좋은 웹페이지 즐겨찾기