커스텀 서비스 계정을 사용한 학습

학습 애플리케이션을 실행할 때 원하는 서비스 계정을 사용하도록 AI Platform Training을 구성할 수 있습니다. 커스텀 서비스 계정을 사용하면 AI Platform Training에서 기본적으로 사용하는 서비스 계정에 너무 광범위한 권한을 부여하지 않고도 학습 코드에서 액세스할 수 있는 Google Cloud 리소스를 맞춤설정할 수 있습니다. 또한 커스텀 서비스 계정을 사용하여 보안 비밀 관리자와 같은 추가 Google Cloud 서비스에 대한 코드 액세스 권한을 부여할 수 있습니다.

이 가이드에서는 다른 Google Cloud 리소스에 액세스하기 위한 AI Platform Training 리소스의 권한을 중심으로 설명합니다. AI Platform Training 리소스 자체에 액세스하는 데 필요한 권한에 대해 알아보려면 액세스 제어를 참조하세요.

Google 관리형 서비스 계정 이해

기본적으로 AI Platform Training은 Google 관리형 서비스 계정을 사용하여 학습 작업을 실행합니다. 이 서비스 계정은 다음 형식의 이메일 주소로 식별할 수 있습니다.

service-PROJECT_NUMBER@cloud-ml.google.com.iam.gserviceaccount.com

PROJECT_NUMBER는 Google Cloud 프로젝트의 프로젝트 번호로 바뀝니다.

Google Cloud Console에서 또는 Google Cloud CLI를 사용하여 프로젝트의 해당 서비스 계정을 찾습니다.

Google Cloud Console

Google Cloud console의 IAM 페이지로 이동하여 Google 제공 역할 부여 포함을 선택하고 이 섹션의 앞부분에서 설명한 이메일 주소 형식과 일치하는 주 구성원을 찾습니다. 또한 이 서비스 계정은 이름이 Google Cloud ML Engine Service Agent입니다.

IAM 페이지로 이동

gcloud

gcloud CLI를 초기화한 셸 환경에서 다음 명령어를 실행합니다.

gcloud projects get-iam-policy PROJECT_ID \
  --flatten="bindings[].members" \
  --format="table(bindings.members)" \
  --filter="bindings.role:roles/ml.serviceAgent" \
  | grep serviceAccount:

PROJECT_ID를 Google Cloud 프로젝트의 ID로 바꿉니다.

이 명령어는 다음을 출력합니다.

serviceAccount:GOOGLE_MANAGED_SERVICE_ACCOUNT

GOOGLE_MANAGED_SERVICE_ACCOUNT는 프로젝트의 AI Platform Google 관리형 서비스 계정의 이메일 주소입니다.

이 Google 관리형 서비스 계정에는 대부분의 학습 작업에 적합한 권한이 있습니다. 예를 들어 동일한 Google Cloud 프로젝트의 Cloud Storage 버킷에서 읽고 쓸 수 있습니다.

추가 권한으로 학습 애플리케이션을 실행해야 하는 경우 이 서비스 계정에 추가 ID 및 액세스 관리(IAM) 역할을 할당할 수 있습니다. 예를 들어 다른 Google Cloud 프로젝트의 Cloud Storage 버킷에 대한 액세스 권한을 부여할 수 있습니다.

커스텀 서비스 계정 사용

특정 학습 작업에 대해 Google Cloud 권한을 부여하거나 제한하려면 Google 관리형 서비스 계정 대신 커스텀 서비스 계정을 사용합니다.

이를 위해서는 먼저 커스텀 서비스 계정을 설정해야 합니다. 그런 다음 학습 작업을 만들 때 커스텀 서비스 계정을 지정합니다.

커스텀 서비스 계정 설정

커스텀 서비스 계정을 설정하려면 다음 안내를 따르세요.

  1. 사용자 관리형 서비스 계정을 만듭니다.

  2. 새 서비스 계정에 IAM 역할을 부여하여 실행 중에 필요한 권한을 학습 애플리케이션에 제공합니다.

  3. 사용자 관리 서비스 계정이 학습 작업과 다른 프로젝트에 있는 경우 사용자 관리 서비스 계정을 구성하여 학습 작업에 서비스에 연결할 수 있습니다.

학습 작업의 커스텀 서비스 계정 지정

학습 애플리케이션을 실행할 때 커스텀 서비스 계정을 사용하도록 AI Platform Training을 구성하려면 학습 작업을 만들 trainingInput.serviceAccount 필드를 지정합니다.

gcloud CLI를 사용하여 학습 작업을 만드는 경우 config.yaml 파일을 사용하여 이 필드를 지정해야 합니다. 예를 들면 다음과 같습니다.

trainingInput:
  serviceAccount: CUSTOM_SERVICE_ACCOUNT

CUSTOM_SERVICE_ACCOUNT이 가이드의 이전 섹션에서 설정한 사용자 관리형 서비스 계정의 이메일 주소로 바꿉니다.

학습 코드에서 Google Cloud 서비스에 액세스

학습 코드에서 애플리케이션 기본 사용자 인증 정보(ADC)를 사용하여 학습 작업에서 다른 Google Cloud 서비스에 액세스해야 합니다. 많은 Google Cloud 클라이언트 라이브러리는 기본적으로 ADC로 인증합니다. 환경 변수를 구성할 필요가 없습니다. AI Platform Training은 이전 단계에서 지정한 커스텀 서비스 계정으로 인증하도록 ADC를 자동으로 구성합니다.

그러나 학습 코드에서 Google Cloud 클라이언트 라이브러리를 사용하면 기본적으로 올바른 Google Cloud 프로젝트에 연결되지 않을 수 있습니다. 학습 로그에서 권한 오류를 보고하는 경우 이것이 문제일 수 있습니다. 학습 작업을 만들 때 AI Platform Training은 Google Cloud 프로젝트에서 직접 학습 코드를 실행하지 않습니다. 대신 AI Platform Training은 Google에서 관리하는 별도의 프로젝트에서 코드를 실행합니다. AI Platform Training은 이 프로젝트를 프로젝트와 관련된 작업에만 사용합니다. 따라서 학습 코드의 환경에서 프로젝트 ID를 유추하지 마세요. 프로젝트 ID를 명시적으로 지정하세요.

학습 코드에 프로젝트 ID를 하드코딩하지 않으려면 CLOUD_ML_PROJECT_ID 환경 변수를 참조하면 됩니다. AI Platform Training이 모든 학습 컨테이너에서 이 환경 변수를 설정하여 커스텀 학습을 시작한 프로젝트의 프로젝트 번호를 포함합니다. 많은 Google Cloud 도구는 프로젝트 ID를 가져올 때마다 해당 프로젝트 번호를 그대로 사용합니다.

예를 들어 ID가 PROJECT_ID인 Google Cloud 프로젝트에서 학습 작업을 실행하는 것이 좋습니다. Google BigQuery용 Python 클라이언트를 사용하여 동일한 프로젝트의 BigQuery 테이블에 액세스하려는 경우 학습 코드에서 프로젝트를 유추하려고 시도하지 마세요.

암시적 프로젝트 선택

from google.cloud import bigquery

client = bigquery.Client()

대신 프로젝트를 명시적으로 선택하는 코드를 사용합니다.

명시적 프로젝트 선택

from google.cloud import bigquery

project_number = os.environ["CLOUD_ML_PROJECT_ID"]

client = bigquery.Client(project=project_number)

다음 단계