서비스 계정 및 키

이 페이지에서는 GKE On-Prem을 설치하는 데 필요한 Google Cloud 서비스 계정과 키를 설명합니다.

서비스 계정 개요

GKE On-Prem을 설치하려면 먼저 다음 서비스 계정이 있어야 합니다.

  • 허용 목록에 포함된 서비스 계정
  • 연결-등록 서비스 계정
  • 연결-에이전트 서비스 계정
  • 로깅-모니터링 서비스 계정

사용 설정하려는 기능에 따라 일부 선택적 서비스 계정이 필요할 수 있습니다.

서비스 계정 및 Google Cloud 프로젝트 이해

서비스 계정을 만들 때는 Google Cloud 프로젝트에서 만듭니다. 서비스 계정을 만드는 Google Cloud 프로젝트를 서비스 계정의 상위 프로젝트라고 부릅니다. 서비스 계정은 해당 상위 프로젝트의 구성원입니다.

서비스 계정의 이메일 주소를 보고 서비스 계정의 상위 프로젝트를 확인할 수 있습니다. 예를 들어 logger라는 서비스 계정의 이메일 주소가 있습니다. 상위 프로젝트는 alice-123입니다.

logger@alice-123.iam.gserviceaccount.com

서비스 계정에 Identity and Access Management(IAM) 역할을 부여하면 특정 Google Cloud 프로젝트에서 서비스 계정 역할을 부여합니다. 리소스의 ID에 역할을 부여하는 일반적인 패턴을 따릅니다.

예를 들어 bob-456 프로젝트의 logger@alice-123.iam.gserviceaccount.com 서비스 계정에 bigquery.dataEditor 역할을 부여할 수 있습니다. 여기에서 서비스 계정은 ID이고 Google Cloud 프로젝트는 리소스입니다.

서비스 계정의 상위 프로젝트가 아닌 프로젝트의 서비스 계정에 역할을 부여할 수 있다는 점을 이해해야 합니다.

허용 목록에 있는 서비스 계정

이미 허용 목록에 포함된 서비스 계정이 있습니다.

허용 목록에 포함된 서비스 계정의 JSON 키 파일을 아직 만들지 않은 경우 지금 만듭니다.

gcloud iam service-accounts keys create whitelisted-key.json \
   --iam-account [ALLOWLISTED_SERVICE_ACCOUNT_EMAIL]

여기서 [ALLOWLISTED_SERVICE_ACCOUNT_EMAIL]은 허용 목록에 포함된 서비스 계정의 이메일 주소입니다.

허용 목록에 포함된 서비스 계정에 역할 부여

GKE On-Prem 구성 파일에는 Google Cloud 프로젝트 ID를 지정하는 여러 필드가 있습니다.

usercluster:
  usagemetering:
    bigqueryprojectid: ""
...
gkeconnect:
  projectid: ""
...
stackdriver:
  projectid: ""
...
cloudauditlogging:
  projectid: ""

GKE On-Prem 파일의 프로젝트 ID는 고유할 필요가 없습니다. 예를 들어 gkeconnect.projectidstackdriver.projectid와 동일할 수 있습니다. 실제로 구성 파일의 모든 프로젝트 ID는 동일할 수 있습니다.

허용 목록에 포함된 서비스 계정에는 GKE On-Prem 구성 파일에 지정된 각 프로젝트에 대해 다음 IAM 역할이 부여되어야 합니다.

  • serviceusage.serviceUsageViewer
  • iam.serviceAccountCreator
  • iam.roleViewer

gkeadm을 사용하여 관리자 워크스테이션을 만든 경우 gkeadm은 GKE On-Prem 구성 파일의 다음 필드를 허용 목록에 포함된 서비스 계정의 상위 프로젝트 ID로 설정합니다.

  • gkeconnect.projectid
  • stackdriver.projectid

또한 gkeadm은 허용 목록에 포함된 서비스 계정의 상위 프로젝트에 필요한 역할을 허용 목록에 포함된 서비스 계정에 부여했습니다.

gkeadm을 사용하지 않은 경우 관리자 워크스테이션을 만들려면 역할을 직접 부여해야 합니다.

GKE On-Prem 구성 파일에 지정된 각 프로젝트에 대해 허용 목록에 포함된 서비스 계정에 필요한 역할을 부여합니다.

gcloud projects add-iam-policy-binding [PROJECT_ID] \
--member "serviceAccount:[ALLOWLISTED_SERVICE_ACCOUNT_EMAIL]" \
--role "roles/serviceusage.serviceUsageViewer"
gcloud projects add-iam-policy-binding [PROJECT_ID] \
--member "serviceAccount:[ALLOWLISTED_SERVICE_ACCOUNT_EMAIL]" \
--role "roles/iam.serviceAccountCreator"
gcloud projects add-iam-policy-binding [PROJECT_ID] \
--member "serviceAccount:[ALLOWLISTED_SERVICE_ACCOUNT_EMAIL]" \
--role "roles/iam.roleViewer"

여기서 [PROJECT_ID]는 GKE On-Prem 구성 파일에 지정한 프로젝트 중 하나의 ID입니다.

기타 필수 서비스 계정

허용 목록에 포함된 서비스 계정 외에도 다음 서비스 계정이 필요합니다.

  • 연결-등록 서비스 계정
  • 연결-에이전트 서비스 계정
  • 로깅-모니터링 서비스 계정

관리자 워크스테이션을 만든 방법에 따라 이미 이러한 서비스 계정이 있을 수 있습니다.

사례 1: gkeadm에서 서비스 계정을 만들었습니다.

gkeadm을 사용하여 관리자 워크스테이션을 만들고 --auto-create-service-accounts 플래그를 전달한 경우 gkeadm에서 다음을 수행했습니다.

  • 연결-등록 서비스 계정을 만들었습니다. 연결-등록 서비스 계정에 적절한 IAM 역할을 부여했습니다. 연결-등록 서비스 계정에 대한 JSON 키 파일을 만들었습니다. JSON 키 파일을 관리자 워크스테이션에 복사했습니다.

  • 연결-에이전트 서비스 계정을 만들었습니다. 연결-에이전트 서비스 계정에 적절한 IAM 역할을 부여했습니다. 연결-에이전트 서비스 계정을 위한 JSON 키 파일을 만들었습니다. JSON 키 파일을 관리자 워크스테이션에 복사했습니다.

  • 로깅-모니터링 서비스 계정을 만들었습니다. 로깅-모니터링 서비스 계정에 적절한 IAM 역할을 부여했습니다. 로깅-모니터링 서비스 계정의 JSON 키 파일이 생성되었습니다. JSON 키 파일을 관리자 워크스테이션에 복사했습니다.

gkeadm에서 서비스 계정을 만들면 허용 목록에 포함된 서비스 계정의 상위 요소인 Google Cloud 프로젝트에 계정이 생성됩니다. 또한 gkeadm은 서비스 계정에 동일한 프로젝트에 대해 역할을 부여합니다. 2개 이상의 Google Cloud 프로젝트 사용에 대한 자세한 내용은 여러 Google Cloud 프로젝트 사용을 참조하세요.

사례 2: gkeadm에서 서비스 계정을 만들지 않았습니다.

gkeadm--auto-create-service-accounts 플래그와 함께 사용하여 관리자 워크스테이션을 만들지 않은 경우 자체 서비스 계정을 만들어야 합니다. 또한 각 서비스 계정에 대해 JSON 키 파일을 만들고 적절한 IAM 역할을 부여해야 합니다.

자체 서비스 계정 만들기

이미 사례 1에 설명된 대로 서비스 계정이 있다면 이 섹션을 건너뛸 수 있습니다.

이 섹션에서는 GKE On-Prem을 설치하고 사용해야 하는 서비스 계정을 만드는 방법을 보여줍니다. 또한 서비스 계정에 대해 JSON 키 파일을 만들고 서비스 계정에 적절한 IAM 역할을 부여하는 방법을 보여줍니다.

연결-등록 서비스 계정

연결은 이 서비스 계정을 사용하여 GKE On-Prem 클러스터를 Google Cloud에 등록합니다.

연결-등록 서비스 계정 만들기:

gcloud iam service-accounts create connect-register-svc-account --project [PARENT_PROJECT_ID]

여기서 [PARENT_PROJECT_ID]는 연결-등록 서비스 계정의 상위 요소가 될 프로젝트의 ID입니다.

연결-등록 서비스 계정의 키를 만듭니다.

gcloud iam service-accounts keys create connect-register-key.json \
   --iam-account [CONNECT_REGISTER_SERVICE_ACCOUNT_EMAIL]

여기서 [CONNECT_REGISTER_SERVICE_ACCOUNT_EMAIL]은 연결-등록 서비스 계정의 이메일 주소입니다.

연결-등록 서비스 계정에 gkehub.admin 역할을 부여합니다.

gcloud projects add-iam-policy-binding [CONNECT_PROJECT_ID] \
--member "serviceAccount:[CONNECT_REGISTER_SERVICE_ACCOUNT_EMAIL]" \
--role "roles/gkehub.admin"

여기서 [CONNECT_PROJECT_ID]연결 프로젝트의 ID입니다. GKE On-Prem 클러스터에 대해 연결을 등록하고 유지 관리하려는 프로젝트입니다.

연결-에이전트 서비스 계정

연결은 이 서비스 계정을 사용하여 GKE On-Prem과 Google Cloud 간의 연결을 유지합니다.

연결-에이전트 서비스 계정을 만듭니다.

gcloud iam service-accounts create connect-agent-svc-account  --project [PARENT_PROJECT_ID]

여기서 [PARENT_PROJECT_ID]는 연결-에이전트 서비스 계정의 상위 요소가 될 프로젝트의 ID입니다.

연결-에이전트 서비스 계정의 키를 만듭니다.

gcloud iam service-accounts keys create connect-agent-key.json \
   --iam-account [CONNECT_AGENT_SERVICE_ACCOUNT_EMAIL]

여기서 [CONNECT_AGENT_SERVICE_ACCOUNT_EMAIL]은 연결-에이전트 서비스 계정의 이메일 주소입니다.

연결-에이전트 서비스 계정에 gkehub.connect 역할을 부여합니다.

gcloud projects add-iam-policy-binding [CONNECT_PROJECT_ID] \
--member "serviceAccount:[CONNECT_AGENT_SERVICE_ACCOUNT_EMAIL]" \
--role "roles/gkehub.connect"

여기서 [CONNECT_PROJECT_ID]연결 프로젝트의 ID입니다. GKE On-Prem 클러스터에 대해 연결을 등록하고 유지 관리하려는 프로젝트입니다.

로깅-모니터링 서비스 계정

연결은 이 서비스 계정을 사용하여 클러스터에서 Cloud Logging으로 로그를 내보냅니다.

로깅-모니터링 서비스 계정을 만듭니다.

gcloud iam service-accounts create logging-monitoring-svc-account --project [PARENT_PROJECT_ID]

여기서 [PARENT_PROJECT_ID]는 로깅-모니터링 서비스 계정의 상위 요소가 될 프로젝트의 ID입니다.

로깅-모니터링 서비스 계정의 키를 만듭니다.

gcloud iam service-accounts keys create logging-monitoring-key.json \
   --iam-account [LOG_MON_SERVICE_ACCOUNT_EMAIL]

여기서 [LOG_MON_SERVICE_ACCOUNT_EMAIL]은 로깅-모니터링 서비스 계정의 이메일 주소입니다.

로깅-모니터링 서비스 계정에 stackdriver.resourceMetadata.writer, logging.logWriter, monitoring.metricWriter 역할을 추가합니다.

gcloud projects add-iam-policy-binding [LOG_MON_PROJECT_ID] \
--member "serviceAccount:[LOG_MOM_SERVICE_ACCOUNT_EMAIL]" \
--role "roles/stackdriver.resourceMetadata.writer"
gcloud projects add-iam-policy-binding [LOG_MON_PROJECT_ID] \
--member "serviceAccount:[LOG_MOM_SERVICE_ACCOUNT_EMAIL]" \
--role "roles/logging.logWriter"
gcloud projects add-iam-policy-binding [LOG_MON_PROJECT_ID] \
--member "serviceAccount:[LOG_MON_SERVICE_ACCOUNT_EMAIL]" \
--role "roles/monitoring.metricWriter"

여기서 [LOG_MON_PROJECT_ID]로깅-모니터링 프로젝트의 ID입니다. GKE On-Prem 클러스터의 로그를 확인하려는 프로젝트입니다.

선택사항 서비스 계정

사용량 측정 서비스 계정

GKE 사용량 측정은 이 서비스 계정을 사용하여 BigQuery 데이터 세트에 사용량 데이터를 저장합니다.

클러스터에 GKE 사용량 측정을 사용 설정하려면 사용량 측정 서비스 계정이 있어야 합니다. gkeadm 도구는 이 서비스 계정을 만들지 않으므로 사용자가 직접 만들어야 합니다.

사용량 측정 서비스 계정을 만듭니다.

gcloud iam service-accounts create usage-metering-svc-account --project [PARENT_PROJECT_ID]

여기서 [PARENT_PROJECT_ID]는 사용량 측정 서비스 계정의 상위 요소가 될 프로젝트의 ID입니다.

사용량 측정 서비스 계정의 키를 만듭니다.

gcloud iam service-accounts keys create usage-metering-key.json \
   --iam-account [USAGE_METERING_SERVICE_ACCOUNT_EMAIL]

여기서 [USAGE_METERING_SERVICE_ACCOUNT_EMAIL]은 사용량 측정 서비스 계정의 이메일 주소입니다.

사용량 측정 서비스 계정에 bigquery.dataEditor 역할을 부여합니다.

gcloud projects add-iam-policy-binding [USAGE_METERING_PROJECT_ID] \
--member "serviceAccount:[USAGE_METERING_SERVICE_ACCOUNT_EMAIL]" \
--role "roles/bigquery.dataEditor"

여기서 [USAGE_METERING_PROJECT_ID]사용량 측정 프로젝트의 ID입니다. GKE On-Prem 클러스터에 대해 사용량 데이터를 보려는 프로젝트입니다.

감사 로깅 서비스 계정

GKE On-Prem은 이 서비스 계정을 사용하여 클러스터에서 Kubernetes 감사 로그를 Cloud 감사 로그로 보냅니다.

GKE On-Prem에 Cloud 감사 로그를 사용하려면 감사 로깅 서비스 계정이 있어야 합니다. gkeadm 도구는 이 서비스 계정을 만들지 않으므로 사용자가 직접 만들어야 합니다.

감사 로깅 서비스 계정을 만듭니다.

gcloud iam service-accounts create audit-logging-svc-account --project [PARENT_PROJECT_ID]

여기서 [PARENT_PROJECT_ID]는 감사 로깅 서비스 계정의 상위 요소가 될 Google Cloud 프로젝트의 ID입니다.

감사 로깅 서비스 계정의 키를 만듭니다.

gcloud iam service-accounts keys create audit-logging-key.json \
   --iam-account [AUDIT_LOGGINGSERVICE_ACCOUNT_EMAIL]

여기서 [AUDIT_LOGGING_SERVICE_ACCOUNT_EMAIL]은 감사 로깅 서비스 계정의 이메일 주소입니다.

감사 로깅 서비스 계정에 역할을 부여할 필요가 없습니다.