본문 바로가기
CSP (Cloud Service Provider)/GCP

Resource에 Service Account 연결

by BTC_.tf 2023. 12. 8.

베하, 엄팀입니다.

 

어느덧 연말이 가까이 다가왔네요.

입사 1주년을 맞이하며 전 그동안 어떻게 지내왔는지 다시 한번 생각하는 시간을 가져보려 해요.

다들 즐거운 한해 보내셨길 바라며, 오늘의 포스팅 시작하겠습니다.

 

오늘의 주제는 GCP의 Resource에 Service Account를 연결하는 것에 대해 간단히 알아보겠습니다.

 

 

일부 Google Cloud Resource의 경우, Resource가 기본 ID로 사용하는 사용자 관리 Service Account를 지정할 수 있습니다. 이러한 Process를 'Service Account를 Resource에 연결한다.'라고 하는데요.

대부분의 경우 Resource를 생성할 때, Service Account를 Resource에 연결해야 합니다. Resource를 생성한 후에는 Resource에 연결된 Service Account를 변경할 수 없지만, 예외적으로 Compute Engine은 변경이 가능합니다.

 

 

Resource에 Service Account를 연결하는 방법은 Resource와 Service Account가 같은 Project에 존재하는 지와 다른 Project에 존재하는 지에 따라 다릅니다.

동일한 Project에 있는 Resource에 Service Account를 연결하기 위해서는 Service Account에게 Role을 부여하여 Resource Access 권한을 부여하는 과정이 필요합니다.

다른 Project에 있는 Resource에 Service Account를 연결하기 위해서는 Project 간 Service Account 연결 사용 설정이 필요합니다. 해당 설정을 하기 위해서는 Organization Policy에서의 조정이 필요합니다.

아래의 Boolean 제약 조건을 확인해주세요.

iam.disableCrossProjectServiceAccountUsage 의 미적용
iam.restrictCrossProjectServiceAccountLienRemoval 의 미적용

 

또한 Service Agent에게 'Service Account Token Creator' Role이 필요합니다.

아래 명령어로 Role Binding을 해줍니다.

gcloud iam service-accounts add-iam-policy-binding \
    [Resource에 연결할 Service Account ID] \
    --member=serviceAccount:[Service Agent의 Mail Address] \
    --role=roles/iam.serviceAccountTokenCreator

 

 

추가로, 위에서 Compute Engine Resource는 Resource가 생성이 된 후에도 Service Account를 교체할 수 있다고 설명해드렸는데, 해당 방법은 이러합니다.

일차적으로 VM에서 Service Account를 구성하는 데 있어서 필요한 권한을 얻기 위해서는 작업 VM 또는 Project 단위에서의 'Compute Instance Admin' Role이 필요합니다.

또한 VM에서 Cloud Platform의 Scope를 설정합니다. Cloud Platform Scope는 VM의 Service Account가 사용할 권한이 있는 API의 호출 범위를 제한합니다.

 

VM의 Service Account를 교체하기 위해선 VM의 재가동이 필용합니다.

 

gcloud compute instances stop [VM명]

먼저 VM을 Stop합니다.

 

gcloud compute instances set-service-account [VM명] \
  --service-account=[Service Account ID] \
  --scopes=[Scope]

그 후, 중지된 VM의 Service Account와 Scope를 설정합니다.

Scope에 설정될 수 있는 값은 아래의 목록 중 선택합니다.

bigquery https://www.googleapis.com/auth/bigquery
cloud-platform https://www.googleapis.com/auth/cloud-platform
cloud-source-repos https://www.googleapis.com/auth/source.full_control
cloud-source-repos-ro https://www.googleapis.com/auth/source.read_only
compute-ro https://www.googleapis.com/auth/compute.readonly
compute-rw https://www.googleapis.com/auth/compute
datastore https://www.googleapis.com/auth/datastore
default https://www.googleapis.com/auth/devstorage.read_only
  https://www.googleapis.com/auth/logging.write
  https://www.googleapis.com/auth/monitoring.write
  https://www.googleapis.com/auth/pubsub
  https://www.googleapis.com/auth/service.management.readonly
  https://www.googleapis.com/auth/servicecontrol
  https://www.googleapis.com/auth/trace.append
gke-default https://www.googleapis.com/auth/devstorage.read_only
  https://www.googleapis.com/auth/logging.write
  https://www.googleapis.com/auth/monitoring
  https://www.googleapis.com/auth/service.management.readonly
  https://www.googleapis.com/auth/servicecontrol
  https://www.googleapis.com/auth/trace.append
logging-write https://www.googleapis.com/auth/logging.write
monitoring https://www.googleapis.com/auth/monitoring
monitoring-read https://www.googleapis.com/auth/monitoring.read
monitoring-write https://www.googleapis.com/auth/monitoring.write
pubsub https://www.googleapis.com/auth/pubsub
service-control https://www.googleapis.com/auth/servicecontrol
service-management https://www.googleapis.com/auth/service.management.readonly
sql (deprecated) https://www.googleapis.com/auth/sqlservice
sql-admin https://www.googleapis.com/auth/sqlservice.admin
storage-full https://www.googleapis.com/auth/devstorage.full_control
storage-ro https://www.googleapis.com/auth/devstorage.read_only
storage-rw https://www.googleapis.com/auth/devstorage.read_write
taskqueue https://www.googleapis.com/auth/taskqueue
trace https://www.googleapis.com/auth/trace.append
userinfo-email https://www.googleapis.com/auth/userinfo.email

 

gcloud compute instances start [VM명]

위 설정 명령어의 실행이 끝났으면, 다시 VM을 Start 해줍니다.

 

gcloud compute instances describe [VM명] \
    --format json

describe 명령어로 VM에 적용된 Service Account를 확인하는 것도 가능합니다.

예시 명령어에선 json으로 Format을 맞춰보았습니다.

 

위 명령어를 실행한 후의 결과는 다음과 비슷합니다.

{
  ...
  "serviceAccounts":[
      {
        "email":"123845678986-compute@developer.gserviceaccount.com",
        "scopes":[
            "https://www.googleapis.com/auth/devstorage.full_control"
        ]
      }
  ]
  ...
   }

 

 

금일은 Resource에 Service Account를 연결하는 방법에 대해 알아보았습니다.

포스팅을 하다보니 VM Service Account 교체쪽이 많이 추가가 됐네요.

 

다들 즐거운 주말 보내시고, 한주간 정말 수고 많으셨습니다!

그럼 베바!

'CSP (Cloud Service Provider) > GCP' 카테고리의 다른 글

[GCP] Organization Policy  (0) 2023.12.26
App Engine과 각 언어 환경  (0) 2023.12.22
보안 웹 프록시(secure-web-proxy) 실습  (1) 2023.12.07
Bigquery 할당량 및 한도  (0) 2023.11.24
IAM - Condition  (1) 2023.11.24

댓글