서비스 계정 및 키

이 문서에서는 Google Distributed Cloud 구현에서 클러스터를 만드는 데 필요한 Google Cloud 서비스 계정과 키를 설명합니다.

여기에는 전체 안내가 나와 있습니다. 서비스 계정 사용에 대한 간략한 소개는 최소 인프라 설정을 참조하세요.

시작하기 전에

Google Cloud 프로젝트 만들기

서비스 계정 개요

관리자 클러스터와 사용자 클러스터를 만들기 전에 다음 서비스 계정이 있어야 합니다.

  • 구성요소 액세스 서비스 계정
  • 연결-등록 서비스 계정
  • 로깅-모니터링 서비스 계정

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

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

서비스 계정을 만들면 Google Cloud 프로젝트와 연결됩니다. 이 Google Cloud 프로젝트를 서비스 계정의 상위 프로젝트라고 합니다. 이 문서에서 모든 gcloud iam service-accounts create 명령어는 서비스 계정의 상위 프로젝트의 프로젝트 ID인 자리표시자 변수 PROJECT_ID를 사용합니다.

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

logger@alice-123.iam.gserviceaccount.com

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

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

서비스 계정의 상위 프로젝트가 아닌 Google Cloud 프로젝트의 서비스 계정에 역할을 부여할 수 있으며, 프로젝트가 동일할 수도 있습니다. 이러한 유연성을 허용하기 위해 이 문서에서 구성요소 액세스 서비스 계정, connect-register 서비스 계정, logging-monitoring 서비스 계정의 gcloud projects add-iam-policy-binding 명령어는 자리표시자 변수 FLEET_HOST_PROJECT_ID를 사용합니다. Fleet 호스트 프로젝트의 ID입니다. gcloud projects add-iam-policy-binding 명령어에서 FLEET_HOST_PROJECT_ID로 지정하는 ID는 동일해야 합니다.

서비스 계정에 역할을 부여할 수 있는 권한

각 서비스 계정은 관련Google Cloud 프로젝트에 대한 특정 역할을 부여받아야 합니다. 예를 들어 연결-등록 서비스 계정에는 Fleet 호스트 프로젝트에 대한 gkehub.editor 역할을 부여해야 합니다.

Google Cloud 프로젝트에 역할을 부여하려면 프로젝트에 대한 특정 권한이 있어야 합니다. 자세한 내용은 역할 이해roles/resourcemanager.projectIamAdmin을 참고하세요.

필요한 권한이 있으면 직접 역할을 부여할 수 있습니다. 그렇지 않으면 조직의 다른 사용자가 역할을 부여해야 합니다.

gkeadm을 사용하여 자동으로 서비스 계정 만들기

이 페이지에서는 서비스 계정을 수동으로 만들고 서비스 계정에 역할을 부여하는 방법을 설명합니다. 이러한 단계를 수동으로 실행하는 대신 관리자 워크스테이션을 만들 때 gkeadm 명령줄 도구로 일부 서비스 계정을 만들고 역할을 부여할 수 있습니다. gkeadm에서 서비스 계정을 만들도록 허용하더라도 다음 섹션에 설명된 대로 구성요소 액세스 서비스 계정을 수동으로 만들고 필요한 IAM 역할을 부여해야 합니다. gkeadm에서 만들 수 있는 서비스 계정에 대한 자세한 내용은 관리자 워크스테이션 만들기를 참고하세요.

구성요소 액세스 서비스 계정

Google Distributed Cloud는 이 서비스 계정을 사용하여 Artifact Registry에서 클러스터 구성요소를 대신 다운로드합니다.

  1. 구성요소 액세스 서비스 계정을 만듭니다.

    gcloud iam service-accounts create component-access-sa \
        --display-name "Component Access Service Account" \
        --project PROJECT_ID
    

    PROJECT_ID를 서비스 계정의 상위 프로젝트가 될 Google Cloud 프로젝트의 ID로 바꿉니다.

  2. 새로 만든 구성요소 액세스 서비스 계정의 이메일 주소를 가져옵니다.

    gcloud iam service-accounts list \
        --project PROJECT_ID
    
  3. 구성요소 액세스 서비스 계정의 JSON 키를 만듭니다.

    gcloud iam service-accounts keys create component-access-key.json \
    --iam-account COMPONENT_ACCESS_SERVICE_ACCOUNT_EMAIL
    

    COMPONENT_ACCESS_SERVICE_ACCOUNT_EMAIL를 구성요소 액세스 서비스 계정의 이메일 주소로 바꿉니다.

구성요소 액세스 서비스 계정에 역할 부여

구성요소 액세스 서비스 계정에는 프로젝트에 대해 다음 IAM 역할이 부여되어야 합니다. Google Distributed Cloud에서 프리플라이트 검사를 실행할 수 있도록 다음 역할이 필요합니다.

  • serviceusage.serviceUsageViewer
  • iam.roleViewer
  • iam.serviceAccountViewer
  • compute.viewer

역할을 부여하려면 다음 안내를 따르세요.

gcloud projects add-iam-policy-binding FLEET_HOST_PROJECT_ID \
    --member "serviceAccount:COMPONENT_ACCESS_SERVICE_ACCOUNT_EMAIL" \
    --role "roles/serviceusage.serviceUsageViewer"
gcloud projects add-iam-policy-binding FLEET_HOST_PROJECT_ID \
    --member "serviceAccount:COMPONENT_ACCESS_SERVICE_ACCOUNT_EMAIL" \
    --role "roles/iam.roleViewer"
gcloud projects add-iam-policy-binding FLEET_HOST_PROJECT_ID \
    --member "serviceAccount:COMPONENT_ACCESS_SERVICE_ACCOUNT_EMAIL" \
    --role "roles/iam.serviceAccountViewer"
gcloud projects add-iam-policy-binding FLEET_HOST_PROJECT_ID \
    --member "serviceAccount:COMPONENT_ACCESS_SERVICE_ACCOUNT_EMAIL" \
    --role "roles/compute.viewer"

FLEET_HOST_PROJECT_ID를 Fleet 호스트 프로젝트의 ID로 바꿉니다. 서비스 계정이 생성된 프로젝트와 동일한 프로젝트일 수도 있고 다른 프로젝트일 수도 있습니다. 여기에 지정하는 프로젝트 ID는 연결-등록 서비스 계정 및 로깅-모니터링 서비스 계정에 IAM 역할을 부여할 때 지정하는 ID와 동일해야 합니다.

연결-등록 서비스 계정

Google Distributed Cloud는 이 서비스 계정을 사용하여 클러스터를 Fleet에 등록합니다.

  1. 연결-등록 서비스 계정을 만듭니다.

    gcloud iam service-accounts create connect-register-sa \
        --display-name "Connect-register Service Account" \
        --project PROJECT_ID
    

    PROJECT_ID를 연결-등록 서비스 계정의 상위 항목이 될Google Cloud 프로젝트의 ID로 바꿉니다.

  2. 새로 만든 연결-등록 서비스 계정의 이메일 주소를 가져옵니다.

    gcloud iam service-accounts list \
        --project PROJECT_ID
    
  3. 연결-등록 서비스 계정의 JSON 키를 만듭니다.

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

    CONNECT_REGISTER_SERVICE_ACCOUNT_EMAIL을 연결-등록 서비스 계정의 이메일 주소로 바꿉니다.

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

    gcloud projects add-iam-policy-binding FLEET_HOST_PROJECT_ID \
        --member "serviceAccount:CONNECT_REGISTER_SERVICE_ACCOUNT_EMAIL" \
        --role "roles/gkehub.editor"
    

    여기에 지정하는 프로젝트 ID는 구성요소 액세스 서비스 계정 및 로깅 모니터링 서비스 계정에 IAM 역할을 부여할 때 지정하는 ID와 동일해야 합니다.

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

Google Distributed Cloud는 이 서비스 계정을 사용하여 클러스터의 로그와 측정항목을 Cloud LoggingCloud Monitoring으로 내보냅니다.

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

    gcloud iam service-accounts create logging-monitoring-sa \
        --display-name "Logging-monitoring Service Account" \
        --project=PROJECT_ID
    

    PROJECT_ID를 로깅-모니터링 서비스 계정의 상위 항목이 될Google Cloud 프로젝트의 ID로 바꿉니다.

  2. 새로 만든 로깅-모니터링 서비스 계정의 이메일 주소를 가져옵니다.

    gcloud iam service-accounts list \
        --project PROJECT_ID
    
  3. 로깅-모니터링 서비스 계정의 JSON 키를 만듭니다.

    gcloud iam service-accounts keys create logging-monitoring-key.json \
        --iam-account LOGGING_MONITORING_SERVICE_ACCOUNT_EMAIL
    

    LOGGING_MONITORING_SERVICE_ACCOUNT_EMAIL을 로깅-모니터링 서비스 계정의 이메일 주소로 바꿉니다.

로깅-모니터링 서비스 계정에 역할 부여

로깅-모니터링 서비스 계정에는 프로젝트에 대한 다음 역할이 부여되어야 합니다.

  • opsconfigmonitoring.resourceMetadata.writer
  • logging.logWriter
  • monitoring.metricWriter
  • monitoring.dashboardEditor
  • kubernetesmetadata.publisher

로깅-모니터링 서비스 계정에 필요한 역할을 부여하려면 다음을 실행합니다.

gcloud projects add-iam-policy-binding FLEET_HOST_PROJECT_ID \
    --member "serviceAccount:LOGGING_MONITORING_SERVICE_ACCOUNT_EMAIL" \
    --role "roles/opsconfigmonitoring.resourceMetadata.writer"
gcloud projects add-iam-policy-binding FLEET_HOST_PROJECT_ID \
    --member "serviceAccount:LOGGING_MONITORING_SERVICE_ACCOUNT_EMAIL" \
    --role "roles/logging.logWriter"
gcloud projects add-iam-policy-binding FLEET_HOST_PROJECT_ID \
    --member "serviceAccount:LOGGING_MONITORING_SERVICE_ACCOUNT_EMAIL" \
    --role "roles/monitoring.metricWriter"
gcloud projects add-iam-policy-binding FLEET_HOST_PROJECT_ID \
    --member "serviceAccount:LOGGING_MONITORING_SERVICE_ACCOUNT_EMAIL" \
    --role "roles/monitoring.dashboardEditor"
gcloud projects add-iam-policy-binding FLEET_HOST_PROJECT_ID \
    --member "serviceAccount:LOGGING_MONITORING_SERVICE_ACCOUNT_EMAIL" \
    --role "roles/kubernetesmetadata.publisher"

여기에 지정하는 프로젝트 ID는 구성요소 액세스 서비스 계정 및 connect-register 서비스 계정에 IAM 역할을 부여하고 이를 연결할 때 지정하는 ID와 동일해야 합니다.

선택사항 서비스 계정

이 섹션에 설명된 서비스 계정은 선택사항입니다.

감사 로깅 서비스 계정

Google Distributed Cloud는 이 서비스 계정을 사용하여 클러스터의 Kubernetes 감사 로그를 Cloud 감사 로그로 전송합니다.

고급 클러스터 사용 설정으로 클러스터를 만들 계획이라면(토폴로지 도메인 설정에 필요) 다른 서비스 계정을 만드는 대신 감사 로깅에 로깅-모니터링 서비스 계정과 키를 사용하세요.

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

    gcloud iam service-accounts create audit-logging-sa \
        --project PROJECT_ID
    

    PROJECT_ID를 감사 로깅 서비스 계정의 상위 항목이 될Google Cloud 프로젝트의 ID로 바꿉니다.

  2. 새로 만든 감사 로깅 서비스 계정의 이메일 주소를 가져옵니다.

    gcloud iam service-accounts list \
        --project PROJECT_ID
    
  3. 감사 로깅 서비스 계정의 JSON 키를 만들려면 다음을 실행합니다.

    gcloud iam service-accounts keys create audit-logging-key.json \
    --iam-account AUDIT_LOGGING_SERVICE_ACCOUNT_EMAIL
    

    AUDIT_LOGGING_SERVICE_ACCOUNT_EMAIL을 감사 로깅 서비스 계정의 이메일 주소로 바꿉니다.

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

Binary Authorization 서비스 계정

Google Distributed Cloud는 이 서비스 계정을 사용하여 Binary Authorization API를 호출합니다.

Binary Authorization 서비스 계정을 만드는 방법에 대한 자세한 내용은 GKE On-Prem의 Binary Authorization을 참고하세요.

다음 단계

관리자 워크스테이션 만들기