커스텀 서비스 계정 사용

이 가이드에서는 다음 시나리오에서 커스텀 서비스 계정을 사용하도록 Vertex AI를 구성하는 방법을 설명합니다.

커스텀 서비스 계정을 사용해야 하는 경우

Vertex AI가 실행되면 일반적으로 Google에서 Google Cloud 프로젝트를 생성하고 관리하는 여러 서비스 계정 중 하나의 권한으로 작동합니다. 특정 컨텍스트에서 다른 Google Cloud 서비스에 대한 향상된 액세스 권한을 Vertex AI에 부여하려면 Vertex AI의 서비스 에이전트에 특정 역할을 추가하면 됩니다.

하지만 서비스 에이전트의 권한을 맞춤설정하려는 경우 사용할 세분화된 액세스 제어 기능이 제공되지 않을 수도 있습니다. 일반적인 사용 사례는 다음과 같습니다.

  • Vertex AI 작업 및 모델에 대한 더 적은 권한 허용. 기본 Vertex AI 서비스 에이전트에는 BigQuery 및 Cloud Storage에 대한 액세스 권한이 있습니다.
  • 여러 작업에 다른 리소스에 대한 액세스 허용. 많은 사용자가 단일 프로젝트에서 작업을 실행하도록 허용할 수 있지만 각 사용자 작업에 특정 BigQuery 테이블이나 Cloud Storage 버킷에 대한 액세스 권한만 부여할 수 있습니다.

예를 들어 실행하는 모든 커스텀 학습 작업을 개별적으로 맞춤설정하여 프로젝트 외부의 여러 Google Cloud 리소스에 액세스하고자 할 수 있습니다.

또한 서비스 에이전트의 권한을 맞춤설정하여도 커스텀 학습 Model에서 예측을 제공하는 컨테이너에 제공되는 권한은 변경되지 않습니다.

커스텀 학습을 수행할 때마다 액세스를 맞춤설정하거나 커스텀 학습 Model의 예측 컨테이너의 권한을 맞춤설정하려면 커스텀 서비스 계정을 사용해야 합니다.

기본 액세스

이 섹션에서는 커스텀 학습 컨테이너에 사용할 수 있는 기본 액세스 및 커스텀 학습 Model 리소스의 예측 컨테이너에 대해 설명합니다. 커스텀 서비스 계정을 사용하는 경우 특정 CustomJob, HyperparameterTuningJob, TrainingPipeline 또는 DeployedModel 리소스에 대해 이 액세스를 재정의합니다.

학습 컨테이너

CustomJob, HyperparameterTuningJob 또는 커스텀 TrainingPipeline을 만들 때 학습 컨테이너는 기본적으로 Google Cloud 프로젝트의 Vertex AI 커스텀 코드 서비스 에이전트를 사용하여 실행됩니다.

추가 Google Cloud 리소스에 대한 액세스 권한을 부여하는 방법을 비롯하여 Vertex AI 커스텀 코드 서비스 에이전트에 대해 자세히 알아보세요.

예측 컨테이너

커스텀 학습 ModelEndpoint에 배포할 때 예측 컨테이너는 Vertex AI에서 관리되는 서비스 계정을 사용하여 실행됩니다. 이 서비스 계정은 Vertex AI 서비스 에이전트와 다릅니다.

예측 컨테이너가 기본적으로 사용하는 서비스 계정에는 Vertex AI가 AIP_STORAGE_URI 환경 변수에 저장된 URI에서 사용할 수 있도록 하는 모델 아티팩트 읽기 권한이 있습니다. 다른 권한을 얻기 위해 서비스 계정에 의존하지 마세요. 서비스 계정의 권한을 맞춤설정할 수 없습니다.

커스텀 서비스 계정 구성

다음 섹션에서는 Vertex AI에서 사용할 커스텀 서비스 계정을 설정하는 방법과 서비스 계정을 사용하도록 CustomJob, HyperparameterTuningJob, TrainingPipeline, DeployedModel을 구성하는 방법을 설명합니다. Artifact Registry에서 이미지를 가져오도록 커스텀 서비스 계정을 구성할 수 없습니다. Vertex AI는 기본 서비스 계정을 사용하여 이미지를 가져옵니다.

커스텀 서비스 계정 설정

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

  1. 사용자 관리형 서비스 계정을 만듭니다. 사용자 관리 서비스 계정은 Vertex AI 리소스와 동일한 프로젝트 또는 다른 프로젝트에 있을 수 있습니다.

  2. Vertex AI가 커스텀 학습 또는 예측 중에 사용할 수 있도록 하려는 Google Cloud 서비스 및 리소스에 대한 액세스 권한을 제공하는 새 서비스 계정 IAM 역할을 부여합니다.

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

  4. 선택사항: 예측에 사용자 관리 서비스 계정을 사용하려는 경우 Vertex AI를 사용하는 프로젝트의 Vertex AI 서비스 에이전트에 서비스 계정 관리자 역할(roles/iam.serviceAccountAdmin)을 부여해야 합니다.

    gcloud iam service-accounts add-iam-policy-binding \
      --role=roles/iam.serviceAccountAdmin \
      --member=serviceAccount:AI_PLATFORM_SERVICE_AGENT \
      CUSTOM_SERVICE_ACCOUNT
    

    다음을 바꿉니다.

    • AI_PLATFORM_SERVICE_AGENT: 다음과 같은 형식을 가진 프로젝트 Vertex AI 서비스 에이전트의 이메일 주소입니다.

      service-PROJECT_NUMBER@gcp-sa-aiplatform.iam.gserviceaccount.com

      Vertex AI 서비스 에이전트를 찾으려면 Google Cloud 콘솔에서 IAM 페이지로 이동합니다.

      IAM으로 이동

    • CUSTOM_SERVICE_ACCOUNT: 이 섹션의 첫 번째 단계에서 만든 새 사용자 관리 서비스 계정의 이메일 주소입니다.

Vertex AI 리소스의 커스텀 서비스 계정 지정

리소스에 특정 서비스 계정을 사용하도록 Vertex AI를 구성하는 프로세스는 서비스 계정을 리소스에 연결하는 것입니다. 다음 섹션에서는 이전 섹션에서 만든 서비스 계정을 여러 Vertex AI 리소스에 연결하는 방법을 설명합니다.

커스텀 학습 리소스에 서비스 계정 연결

커스텀 학습 중에 새 서비스 계정을 사용하도록 Vertex AI를 구성하려면 커스텀 학습을 시작할 때 서비스 계정의 이메일 주소를 CustomJobSpec 메시지의 serviceAccount 필드에 지정합니다. 생성하는 커스텀 학습 리소스 유형에 따라 API 요청에서 이 필드의 배치는 다릅니다.

  • CustomJob을 만드는 경우 CustomJob.jobSpec.serviceAccount에 서비스 계정의 이메일 주소를 지정합니다.

    CustomJob 만들기에 대해 자세히 알아보세요.

  • HyperparameterTuningJob을 만드는 경우 HyperparameterTuningJob.trialJobSpec.serviceAccount에 서비스 계정의 이메일 주소를 지정합니다.

    HyperparameterTuningJob 만들기에 대해 자세히 알아보세요.

  • 초매개변수 조정 없이 커스텀 TrainingPipeline을 만드는 경우 TrainingPipeline.trainingTaskInputs.serviceAccount에 서비스 계정의 이메일 주소를 지정합니다.

  • 초매개변수 조정으로 커스텀 TrainingPipeline을 만드는 경우 TrainingPipeline.trainingTaskInputs.trialJobSpec.serviceAccount에 서비스 계정의 이메일 주소를 지정합니다.

온라인 예측을 제공하는 컨테이너에 서비스 계정 연결

새 서비스 계정을 사용하도록 커스텀 학습 Model의 예측 컨테이너를 구성하려면 EndpointModel을 배포할 때 서비스 계정의 이메일 주소를 지정합니다.

콘솔

Google Cloud 콘솔을 사용한 모델 배포를 따르세요. 모델 설정을 지정할 때 서비스 계정 드롭다운 목록에서 서비스 계정을 선택합니다.

gcloud

Vertex AI API를 사용한 모델 배포 따르기 gcloud ai endpoints deploy-model 명령어를 실행할 때 --service-account 플래그를 사용하여 서비스 계정의 이메일 주소를 지정합니다.

아래의 명령어 데이터를 사용하기 전에 다음을 바꿉니다.

  • ENDPOINT_ID: 엔드포인트의 ID
  • LOCATION_ID: Vertex AI를 사용하는 리전
  • MODEL_ID: 배포할 모델의 ID
  • DEPLOYED_MODEL_NAME: DeployedModel의 이름. DeployedModelModel 표시 이름도 사용할 수 있습니다.
  • MACHINE_TYPE: 선택사항. 이 배포의 각 노드에 사용되는 머신 리소스입니다. 기본 설정은 n1-standard-2입니다. 머신 유형에 대해 자세히 알아보세요.
  • MIN_REPLICA_COUNT: 이 배포의 최소 노드 수. 예측 로드 시 필요에 따라 최대 노드 수까지 노드 수를 늘리거나 줄일 수 있으며 이 노드 수 미만으로는 줄일 수 없습니다.
  • MAX_REPLICA_COUNT: 이 배포의 최대 노드 수. 예측 로드 시 필요에 따라 이 노드 수까지 노드 수를 늘리거나 줄일 수 있으며 최소 노드 수 미만으로는 줄일 수 없습니다.
  • CUSTOM_SERVICE_ACCOUNT: 서비스 계정의 이메일 주소입니다. 예를 들면 SA_NAME@PROJECT_ID.iam.gserviceaccount.com입니다.

gcloud ai endpoints deploy-model 명령어를 실행합니다.

Linux, macOS 또는 Cloud Shell

gcloud ai endpoints deploy-model ENDPOINT_ID \
  --region=LOCATION \
  --model=MODEL_ID \
  --display-name=DEPLOYED_MODEL_NAME \
  --machine-type=MACHINE_TYPE \
  --min-replica-count=MIN_REPLICA_COUNT \
  --max-replica-count=MAX_REPLICA_COUNT \
  --traffic-split=0=100 \
  --service-account=CUSTOM_SERVICE_ACCOUNT

Windows(PowerShell)

gcloud ai endpoints deploy-model ENDPOINT_ID `
  --region=LOCATION `
  --model=MODEL_ID `
  --display-name=DEPLOYED_MODEL_NAME `
  --machine-type=MACHINE_TYPE `
  --min-replica-count=MIN_REPLICA_COUNT `
  --max-replica-count=MAX_REPLICA_COUNT `
  --traffic-split=0=100 `
  --service-account=CUSTOM_SERVICE_ACCOUNT

Windows(cmd.exe)

gcloud ai endpoints deploy-model ENDPOINT_ID ^
  --region=LOCATION ^
  --model=MODEL_ID ^
  --display-name=DEPLOYED_MODEL_NAME ^
  --machine-type=MACHINE_TYPE ^
  --min-replica-count=MIN_REPLICA_COUNT ^
  --max-replica-count=MAX_REPLICA_COUNT ^
  --traffic-split=0=100 ^
  --service-account=CUSTOM_SERVICE_ACCOUNT
 

API

Vertex AI API를 사용한 모델 배포 따르기 projects.locations.endpoints.deployModel 요청을 보낼 때 deployedModel.serviceAccount 필드를 서비스 계정의 이메일 주소로 설정합니다.

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

이전 섹션의 안내에 따라 커스텀 서비스 계정을 사용하도록 Vertex AI를 구성하면 학습 컨테이너 또는 예측 컨테이너가 서비스 계정이 액세스할 수 있는 모든 Google Cloud 서비스 및 리소스에 액세스할 수 있습니다.

Google Cloud 서비스에 액세스하려면 애플리케이션 기본 사용자 인증 정보(ADC)를 사용하도록 학습 코드 또는 예측 제공 코드를 작성하고 액세스할 리소스의 프로젝트 ID 또는 프로젝트 번호를 명시적으로 지정합니다. 다른 Google Cloud 서비스에 액세스하기 위한 코드 작성 자세히 알아보기

다음 단계