VPC 네트워크에서 보안 사용자 관리 노트북 인스턴스 만들기


이 튜토리얼은 엔터프라이즈 데이터 과학자, 연구원, 네트워크 관리자를 대상으로 합니다. Virtual Private Cloud(VPC) 네트워크에 사용자 관리 노트북 인스턴스를 만들어 보호하는 방법을 보여줍니다.

VPC 네트워크는 Google의 프로덕션 네트워크 내에서 구현되는 물리적 네트워크의 가상 버전입니다. 이는 고유한 비공개 IP 주소, 서브넷, 네트워크 게이트웨이가 포함된 비공개 네트워크입니다. 기업에서 VPC 네트워크는 다른 네트워크와 인터넷에서 데이터와 인스턴스에 대한 액세스를 제어하여 데이터와 인스턴스를 보호하는 데 사용됩니다.

이 튜토리얼의 VPC 네트워크는 독립형 네트워크입니다. 하지만 한 프로젝트(호스트 프로젝트라고 함)의 VPC 네트워크를 Google Cloud 조직의 다른 프로젝트와 공유할 수 있습니다. 사용할 VPC 네트워크 유형에 대한 자세한 내용은 단일 VPC 네트워크 및 공유 VPC를 참조하세요.

네트워크 보안 권장사항에 따라 이 튜토리얼의 VPC 네트워크에서는 Cloud Router ,Cloud NAT비공개 Google 액세스를 결합하여 다음과 같은 방법으로 인스턴스를 보호합니다.

  • 사용자 관리 노트북 인스턴스에는 외부 IP 주소가 없습니다.
  • 인스턴스에는 리전 Cloud Router 및 Cloud NAT 게이트웨이를 통해 아웃바운드 인터넷 액세스 권한이 있으므로 소프트웨어 패키지나 기타 종속 항목을 설치할 수 있습니다. Cloud NAT에서는 아웃바운드 연결과 해당 연결에 대한 인바운드 응답을 허용합니다. 인터넷에서 수신되는 요청하지 않은 인바운드 요청을 허용하지 않습니다.
  • 인스턴스는 비공개 Google 액세스를 사용하여 Google API 및 서비스의 외부 IP 주소에 연결합니다.

이 튜토리얼에서는 다음 작업을 수행하는 방법도 보여줍니다.

  • GitHub 저장소를 새로 생성된 사용자 관리 노트북 인스턴스에 자동으로 클론하는 시작 후 스크립트를 만듭니다.
  • Cloud Monitoring을 사용하여 사용자 관리 노트북 인스턴스를 모니터링합니다.
  • 비용이 최적화되도록 Compute Engine API를 사용하여 인스턴스를 자동으로 시작하고 중지합니다.

VPC 네트워크의 사용자 관리 노트북 인스턴스의 아키텍처 다이어그램

목표

  • VPC 네트워크를 만들고 비공개 Google 액세스가 사용 설정된 서브넷을 추가합니다.
  • VPC 네트워크용 Cloud Router 및 Cloud NAT를 만듭니다.
  • Google Cloud 생성형 AI GitHub 저장소를 클론하는 시작 후 스크립트를 사용하여 서브넷에 사용자 관리 노트북 인스턴스를 만듭니다.
  • 인스턴스에 Cloud Monitoring을 사용 설정합니다.
  • VM 인스턴스 일정을 만들어 인스턴스에 연결합니다.

비용

이 문서에서는 비용이 청구될 수 있는 다음과 같은 Google Cloud 구성요소를 사용합니다.

프로젝트 사용량을 기준으로 예상 비용을 산출하려면 가격 계산기를 사용하세요. Google Cloud를 처음 사용하는 사용자는 무료 체험판을 사용할 수 있습니다.

이 문서에 설명된 태스크를 완료했으면 만든 리소스를 삭제하여 청구가 계속되는 것을 방지할 수 있습니다. 자세한 내용은 삭제를 참조하세요.

시작하기 전에

  1. Google Cloud Console에서 프로젝트 선택기 페이지로 이동합니다.

    프로젝트 선택기로 이동

  2. Google Cloud 프로젝트를 선택하거나 만듭니다.

  3. Google Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다.

  4. Cloud Shell을 열고 이 튜토리얼에 나열된 명령어를 실행합니다. Cloud Shell은 웹브라우저에서 프로젝트와 리소스를 관리할 수 있는 Google Cloud의 대화형 셸 환경입니다.
  5. Cloud Shell로 이동
  6. Cloud Shell에서 현재 프로젝트를 Google Cloud 프로젝트 ID로 설정한 후 동일한 프로젝트 ID를 projectid 셸 변수에 저장합니다.
      projectid="PROJECT_ID"
      gcloud config set project ${projectid}
    PROJECT_ID를 프로젝트 ID로 바꿉니다. 필요한 경우 Google Cloud 콘솔에서 프로젝트 ID를 찾을 수 있습니다. 자세한 내용은 프로젝트 ID 찾기를 참조하세요.
  7. IAM, Compute Engine, Notebooks, Cloud Storage, and Vertex AI API를 사용 설정합니다.

    gcloud services enable iam.googleapis.com  compute.googleapis.com notebooks.googleapis.com storage.googleapis.com aiplatform.googleapis.com
  8. Google 계정에 역할을 부여합니다. 다음 각 IAM 역할에 대해 다음 명령어를 한 번씩 실행합니다. roles/compute.networkAdmin, roles/compute.securityAdmin, roles/compute.instanceAdmin, roles/notebooks.admin, roles/resourcemanager.projectIamAdmin, roles/iam.serviceAccountAdmin, roles/iam.serviceAccountUser, roles/storage.Admin

    gcloud projects add-iam-policy-binding PROJECT_ID --member="user:EMAIL_ADDRESS" --role=ROLE
    • PROJECT_ID를 프로젝트 ID로 바꿉니다.
    • EMAIL_ADDRESS를 이메일 주소로 바꿉니다.
    • ROLE을 각 개별 역할로 바꿉니다.

독립형 VPC 만들기 및 구성

  1. securevertex-vpc라는 VPC 네트워크를 만듭니다.

    gcloud compute networks create securevertex-vpc --subnet-mode=custom
    
  2. 기본 IPv4 범위가 10.10.10.0/29securevertex-subnet-a라는 서브넷을 만듭니다.

    gcloud compute networks subnets create securevertex-subnet-a --range=10.10.10.0/29 --network=securevertex-vpc --region=us-central1 --enable-private-ip-google-access
    

    원하는 경우 --range 매개변수에 다른 값을 제공할 수 있습니다. 그러나 단일 노트북의 최소 프리픽스 길이는 29입니다. 자세한 내용은 IPv4 서브넷 범위를 참조하세요.

  3. cloud-router-us-central1이라는 리전 Cloud Router를 만듭니다.

    gcloud compute routers create cloud-router-us-central1 --network securevertex-vpc --region us-central1
    
  4. cloud-nat-us-central1이라는 리전 Cloud NAT 게이트웨이를 만듭니다.

    gcloud compute routers nats create cloud-nat-us-central1 --router=cloud-router-us-central1 --auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges --region us-central1
    

Cloud Storage 버킷 만들기

  1. Cloud Storage 버킷을 만듭니다.

    gcloud storage buckets create --location=us-central1 --uniform-bucket-level-access gs://BUCKET_NAME
    

    BUCKET_NAME을 고유한 버킷 이름으로 바꿉니다.

  2. BUCKET_NAME 셸 변수를 설정하고 올바르게 입력되었는지 확인합니다.

    BUCKET_NAME=BUCKET_NAME
    echo $BUCKET_NAME
    

    BUCKET_NAME을 버킷 이름으로 바꿉니다.

시작 후 스크립트 만들기 및 업로드

  1. 스크립트를 만들려면 vi 또는 nano와 같은 텍스트 편집기를 사용하여 poststartup.sh 파일을 만듭니다.

  2. 다음 셸 스크립트를 파일에 붙여넣습니다.

    #! /bin/bash
    echo "Current user: id" >> /tmp/notebook_config.log 2>&1
    echo "Changing dir to /home/jupyter" >> /tmp/notebook_config.log 2>&1
    cd /home/jupyter
    echo "Cloning generative-ai from github" >> /tmp/notebook_config.log 2>&1
    su - jupyter -c "git clone http://github.com/GoogleCloudPlatform/generative-ai.git" >> /tmp/notebook_config.log 2>&1
    echo "Current user: id" >> /tmp/notebook_config.log 2>&1
    echo "Installing python packages" >> /tmp/notebook_config.log 2&1
    su - jupyter -c "pip install --upgrade --no-warn-conflicts --no-warn-script-location --user \
         google-cloud-bigquery \
         google-cloud-pipeline-components \
         google-cloud-aiplatform \
         seaborn \
         kfp" >> /tmp/notebook_config.log 2>&1
    
  3. 파일을 저장합니다.

  4. 파일을 Cloud Storage 버킷에 업로드합니다.

    gcloud storage cp poststartup.sh gs://$BUCKET_NAME
    

커스텀 서비스 계정 만들기

사용자 관리 노트북 인스턴스를 만들 때는 Compute Engine 기본 서비스 계정 사용 체크박스를 선택 취소하고 커스텀 서비스 계정을 지정하는 것이 좋습니다. Compute Engine 기본 서비스 계정(및 인스턴스 사용자로 지정하는 모든 사용자)에게 프로젝트에 대한 편집자 역할(roles/editor)이 부여됩니다. 기본 서비스 계정에 대한 자동 역할 부여를 중지하여 이 동작을 중지할 수 있습니다.

  1. user-managed-notebook-sa라는 커스텀 서비스 계정을 만듭니다.

    gcloud iam service-accounts create user-managed-notebook-sa \
    --display-name="user-managed-notebook-sa"
    
  2. 서비스 계정에 스토리지 객체 뷰어 IAM 역할을 할당합니다.

    gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:user-managed-notebook-sa@$projectid.iam.gserviceaccount.com" --role="roles/storage.objectViewer"
    
  3. 서비스 계정에 Vertex AI 사용자 IAM 역할을 할당합니다.

    gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:user-managed-notebook-sa@$projectid.iam.gserviceaccount.com" --role="roles/aiplatform.user"
    

사용자 관리 노트북 인스턴스 만들기

  1. Google Cloud 콘솔에서 사용자 관리형 노트북 페이지로 이동합니다.

    사용자 관리형 노트북으로 이동

  2.  새로 만들기를 클릭한 후 고급 옵션을 선택합니다.

    인스턴스 만들기 페이지가 열립니다.

  3. 인스턴스 만들기 페이지의 세부정보 섹션에서 새 인스턴스에 대한 다음 정보를 제공한 후 계속을 클릭합니다.

    • 이름: 새 인스턴스 이름을 입력하거나 기본값을 사용합니다.
    • 리전: us-central1을 선택합니다.
    • 영역: us-central1-a를 선택합니다.
  4. 환경 섹션에서 다음을 입력한 후 계속을 클릭합니다.

    • 시작 후 스크립트: 찾아보기를 클릭하고 poststartup.sh 파일을 더블클릭하고 한 번 더 클릭한 후 선택을 클릭합니다.
  5. 머신 유형 섹션에서 다음을 입력한 후 계속을 클릭합니다.

    • 보안 VM: 다음 체크박스를 선택합니다.

      • 보안 부팅
      • vTPM(Virtual Trusted Platform Module)
      • 무결성 모니터링
  6. 디스크 섹션에서 Google 관리 암호화 키가 선택되어 있는지 확인한 후 계속을 클릭합니다.

  7. 네트워킹 섹션에서 다음을 입력한 후 계속을 클릭합니다.

    • 네트워킹: 이 프로젝트의 네트워크를 선택하고 다음 단계를 완료합니다.

      1. 네트워크 필드에서 securevertex-vpc를 선택합니다.

      2. 서브네트워크 필드에서 securevertex-subnet-a를 선택합니다.

      3. 외부 IP 주소 할당 체크박스를 선택 취소합니다. 외부 IP 주소를 할당하지 않으면 인스턴스가 인터넷이나 다른 VPC 네트워크에서 요청하지 않은 통신을 수신하지 못합니다.

      4. 프록시 액세스 허용 체크박스를 선택합니다.

  8. IAM 및 보안 섹션에서 다음을 입력한 후 계속을 클릭합니다.

    • IAM 및 보안: 단일 사용자에게 인스턴스의 JupyterLab 인터페이스에 대한 액세스 권한을 부여하려면 다음 단계를 완료합니다.

      1. 단일 사용자를 선택합니다.
      2. 사용자 이메일 필드에 단일 사용자 계정의 이메일 주소를 입력합니다. 다른 사람의 인스턴스를 만드는 경우 다음 조건이 적용됩니다.
        • 개발자(인스턴스 생성자)는 인스턴스의 JupyterLab 인터페이스에 액세스할 수 없습니다. 하지만 인스턴스를 계속 제어하며 인스턴스를 시작, 중지 또는 삭제할 수 있습니다.
        • 인스턴스를 만든 후 인스턴스의 서비스 계정에 대한 서비스 계정 사용자 역할(roles/iam.serviceAccountUser)을 사용자에게 부여해야 합니다. 선택사항: 인스턴스 사용자에게 서비스 계정 사용자 역할 부여를 참조하세요.
      3. Compute Engine 기본 서비스 계정 사용 체크박스를 선택 취소합니다. Compute Engine 기본 서비스 계정(및 방금 지정한 단일 사용자)에게 프로젝트에 대한 편집자 역할(roles/editor)이 부여되므로 이 단계가 중요합니다.
      4. 서비스 계정 이메일 필드에 user-managed-notebook-sa@$projectid.iam.gserviceaccount.com을 입력합니다. 이전에 만든 커스텀 서비스 계정 이메일 주소입니다. 이 서비스 계정에는 제한된 권한이 있습니다.

        액세스 권한 부여에 대한 자세한 내용은 사용자 관리 노트북 인스턴스의 JupyterLab 인터페이스에 대한 액세스 관리를 참조하세요.

    • 보안 옵션: 다음 체크박스를 선택 취소합니다.

      • 인스턴스에 대한 루트 액세스

      다음 체크박스를 선택합니다.

      • nbconvert: nbconvert를 사용하면 사용자가 노트북 파일을 HTML, PDF 또는 LaTeX와 같은 다른 파일 형식으로 내보내고 다운로드할 수 있습니다. 이 설정은 Google Cloud 생성형 AI GitHub 저장소의 일부 노트북에 필요합니다.

      다음 체크박스를 선택 취소합니다.

      • 파일 다운로드

      프로덕션 환경이 아닌 경우 다음 체크박스를 선택합니다.

      • 터미널 액세스: JupyterLab 사용자 인터페이스 내에서 인스턴스에 대한 터미널 액세스를 사용 설정합니다.
  9. 시스템 상태 섹션에서 환경 자동 업그레이드를 선택하고 다음을 입력합니다.

    • 보고에서 다음 체크박스를 선택합니다.

      • 시스템 상태 보고
      • Cloud Monitoring에 커스텀 측정항목 보고
      • Cloud Monitoring 설치
      • 필수 Google 도메인의 DNS 상태 보고
  10. 만들기를 클릭합니다.

선택사항: 인스턴스 사용자에게 서비스 계정 사용자 역할 부여

다른 사용자를 위해 사용자 관리 노트북 인스턴스를 만드는 경우 다음과 같이 user-managed-notebook-sa 커스텀 서비스 계정에 대한 서비스 계정 사용자 역할(roles/iam.serviceAccountUser)을 부여해야 합니다.

gcloud iam service-accounts add-iam-policy-binding \
    user-managed-notebook-sa@PROJECT_ID.iam.gserviceaccount.com \
    --member="user:USER_EMAIL" \
    --role="roles/iam.serviceAccountUser"

다음 값을 바꿉니다.

  • PROJECT_ID: 프로젝트 ID입니다.
  • USER_EMAIL: 사용자의 이메일 주소입니다.

사용자 관리 노트북 인스턴스가 생성되었는지 확인

Vertex AI Workbench는 지정된 속성을 기반으로 사용자 관리형 노트북 인스턴스를 만들고 자동으로 인스턴스를 시작합니다.

인스턴스를 사용할 수 있으면 Vertex AI Workbench에서 JupyterLab 열기 링크를 활성화합니다. 인스턴스를 만들 때 지정한 단일 사용자만 이 링크에 액세스할 수 있습니다.

JupyterLab에서 인스턴스를 열고 클론된 Google Cloud 생성형 AI GitHub 저장소가 있는지 확인합니다.

  1. Google Cloud 콘솔에서 사용자 관리형 노트북 페이지로 이동합니다.

    사용자 관리형 노트북으로 이동

  2. 사용자 관리 노트북 인스턴스 목록에서 만든 인스턴스의 JupyterLab 열기 링크를 클릭합니다.

    폴더 목록에 generative-ai 폴더가 표시됩니다. 이 폴더에는 클론된 GitHub 저장소가 포함되어 있습니다.

Monitoring을 통해 상태 모니터링

Google Cloud 콘솔을 사용하여 사용자 관리 노트북 인스턴스의 시스템과 애플리케이션 측정항목을 모니터링할 수 있습니다. 인스턴스 모니터링과 커스텀 측정항목 만들기에 대한 자세한 내용은 상태 모니터링을 참조하세요.

  1. Google Cloud 콘솔에서 사용자 관리형 노트북 페이지로 이동합니다.

    사용자 관리형 노트북으로 이동

  2. 측정항목을 보려는 사용자 관리 노트북 인스턴스의 이름을 클릭합니다.

  3. 노트북 세부정보 페이지에서 모니터링 탭을 클릭합니다. 노트북 인스턴스의 CPU 사용률네트워크 바이트를 검토합니다. 이러한 측정항목을 해석하는 방법을 알아보려면 리소스 측정항목 검토를 참조하세요.

    인스턴스를 방금 만들었으면 데이터가 바로 표시되지 않습니다. 몇 분 정도 기다린 후 콘솔 탭을 새로고침합니다.

사용자 관리 노트북 인스턴스의 VM 인스턴스 일정 만들기

사용자 관리 노트북 인스턴스는 Compute Engine VM 인스턴스이므로 Compute Engine API를 사용하여 VM 인스턴스 일정을 만들 수 있습니다.

VM 인스턴스 일정을 사용하여 사용자 관리 노트북 인스턴스를 시작하고 중지합니다. 인스턴스가 중단된 시간 동안에는 Cloud Storage 비용만 지불합니다.

같은 리전에 있는 모든 VM 인스턴스에 인스턴스 일정을 연결할 수 있으므로 같은 인스턴스 일정을 사용하여 리전의 모든 사용자 관리 노트북 인스턴스를 제어할 수 있습니다.

VM 인스턴스 일정에 대한 자세한 내용은 VM 인스턴스 시작 및 중지 예약을 참조하세요.

커스텀 IAM 역할 만들기

보안 권장사항에 따라 다음 권한만 있는 커스텀 IAM 역할을 만들어 Compute Engine 기본 서비스 계정에 할당하는 것이 좋습니다.

  • compute.instances.start
  • compute.instances.stop
  1. Cloud Shell 내에서 Vm_Scheduler라는 커스텀 역할을 만들고 필요한 권한을 포함합니다.

    Cloud Shell로 이동

    gcloud iam roles create Vm_Scheduler --project=$projectid \
    --title=vm-scheduler-notebooks \
    --permissions="compute.instances.start,compute.instances.stop" --stage=ga
    
  2. 커스텀 역할을 설명합니다.

    gcloud iam roles describe Vm_Scheduler --project=$projectid
    

Compute Engine 기본 서비스 계정에 역할 할당

Compute Engine 기본 서비스 계정에 사용자 관리 노트북 인스턴스를 시작하고 중지할 수 있는 권한을 부여하려면 Vm_Scheduler 커스텀 역할을 할당해야 합니다.

프로젝트의 Compute Engine 기본 서비스 계정에는 [email protected] 이메일 주소가 포함됩니다. 여기서 PROJECT_NUMBER는 프로젝트 번호입니다.

  1. 프로젝트 번호를 확인하고 project_number 셸 변수에 저장합니다.

    project_number=$(gcloud projects describe $projectid --format 'get(projectNumber)')
    echo $project_number
    
  2. 기본 서비스 계정에 커스텀 역할을 할당합니다.

    gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:[email protected]" --role="projects/$projectid/roles/Vm_Scheduler"
    

예약 만들기 및 연결

사용자 관리 노트북 인스턴스를 오전 7시에 시작하고 오후 6시에 중지하는 인스턴스 일정을 만들려면 다음 안내를 따르세요.

  1. optimize-notebooks라는 시작 및 중지 일정을 만듭니다.

    gcloud compute resource-policies create instance-schedule optimize-notebooks \
    --region=us-central1 \
    --vm-start-schedule='0 7 * * *' \
    --vm-stop-schedule='0 18 * * *' \
    --timezone=TIME_ZONE
    

    TIME_ZONE을 이 인스턴스 일정의 위치 기반 IANA 시간대(예: America/Chicago)로 바꿉니다. 생략하면 기본값 UTC가 사용됩니다. 자세한 내용은 시간대를 참조하세요.

  2. 다음 명령어를 실행하고 반환되는 NAME 값을 확인하여 사용자 관리 노트북 인스턴스 이름을 식별합니다.

    gcloud compute instances list
    
  3. 이름을 notebook_vm 셸 변수에 저장합니다.

    notebook_vm=NOTEBOOK_VM_NAME
    echo $notebook_vm
    

    NOTEBOOK_VM_NAME을 사용자 관리 노트북 인스턴스 이름으로 바꿉니다.

  4. 사용자 관리 노트북 인스턴스에 인스턴스 일정을 연결합니다.

    gcloud compute instances add-resource-policies $notebook_vm \
      --resource-policies=optimize-notebooks \
      --zone=us-central1-a
    
  5. 인스턴스 일정을 설명합니다.

    gcloud compute resource-policies describe optimize-notebooks \
      --region=us-central1
    

인스턴스 일정 리소스 정책과 연결된 VM 인스턴스의 Compute Engine 감사 로그를 확인하여 인스턴스 일정이 성공적으로 실행되는지 확인할 수 있습니다. 작업마다 예약 시간 후 최대 15분까지 기다려야 할 수 있습니다.

삭제

이 튜토리얼에서 사용된 리소스 비용이 Google Cloud 계정에 청구되지 않도록 하려면 리소스가 포함된 프로젝트를 삭제하거나 프로젝트는 유지하되 개별 리소스를 삭제하세요.

다음과 같이 프로젝트에서 개별 리소스를 삭제할 수 있습니다.

  1. Google Cloud 콘솔에서 사용자 관리형 노트북 페이지로 이동합니다.

    사용자 관리형 노트북으로 이동

  2. 사용자 관리 노트북 인스턴스를 선택합니다.

  3. Delete(삭제)를 클릭합니다.

  4. Cloud Shell에서 다음 명령어를 실행하여 나머지 개별 리소스를 삭제합니다.

    Cloud Shell로 이동

    gcloud compute routers delete cloud-router-us-central1 --region=us-central1 --quiet
    
    gcloud compute routers nats delete cloud-nat-us-central1 --region=us-central1 --router=cloud-router-us-central1 --quiet
    
    gcloud compute instances remove-resource-policies $notebook_vm \
      --resource-policies=optimize-notebooks \
      --zone=us-central1-a --quiet
    
    gcloud compute resource-policies delete optimize-notebooks --region=us-central1 --quiet
    
    gcloud compute instances delete $notebook_vm --zone=us-central1-a --quiet
    
    gcloud compute networks subnets delete securevertex-subnet-a --region=us-central1 --quiet
    
    gcloud iam service-accounts delete user-managed-notebook-sa@$projectid.iam.gserviceaccount.com --quiet
    
    gcloud projects remove-iam-policy-binding $projectid --member="serviceAccount:[email protected]" --role="projects/$projectid/roles/Vm_Scheduler"
    
    gcloud iam roles delete Vm_Scheduler --project=$projectid
    
    gcloud compute networks delete securevertex-vpc --quiet
    

다음 단계