VM 이미지 가져오기 및 내보내기를 위한 기본 요건


이 문서에서는 Compute Engine에서 이미지를 가져오고 내보내기 위한 기본 요건을 설명합니다.

Cloud Storage에서 이미지를 가져오거나 내보내서 다른 클라우드 환경 또는 온프레미스 환경에서 가상 머신(VM) 인스턴스, 가상 디스크 파일, 머신 이미지를 공유할 수 있습니다. 다음 체크리스트에는 이미지를 가져오고 내보내기 전에 충족해야 하는 요구사항이 요약되어 있습니다.

  1. Cloud Storage 버킷에 대한 액세스 설정
  2. 사용자 계정에 필수 역할 부여
  3. Cloud Build 서비스 계정에 필수 역할 부여
  4. Compute Engine 서비스 계정에 필수 역할 부여

시작하기 전에

  • 아직 인증을 설정하지 않았다면 설정합니다. 인증은 Google Cloud 서비스 및 API에 액세스하기 위해 ID를 확인하는 프로세스입니다. 로컬 개발 환경에서 코드 또는 샘플을 실행하려면 다음과 같이 Compute Engine에 인증하면 됩니다.

    이 페이지의 샘플 사용 방법에 대한 탭을 선택하세요.

    콘솔

    Google Cloud 콘솔을 사용하여 Google Cloud 서비스 및 API에 액세스할 때는 인증을 설정할 필요가 없습니다.

    gcloud

    1. Google Cloud CLI를 설치한 후 다음 명령어를 실행하여 초기화합니다.

      gcloud init
    2. 기본 리전 및 영역을 설정합니다.

    REST

    로컬 개발 환경에서 이 페이지의 REST API 샘플을 사용하려면 gcloud CLI에 제공한 사용자 인증 정보를 사용합니다.

      Google Cloud CLI를 설치한 후 다음 명령어를 실행하여 초기화합니다.

      gcloud init

Cloud Storage 버킷에 대한 액세스 설정

가져오기 또는 내보내기 도구에서 사용할 수 있는 Cloud Storage 버킷에 액세스할 수 있어야 합니다. Cloud Storage 버킷이 없으면 Cloud Storage 버킷 만들기를 참조하세요.

Cloud Storage 버킷에 대한 액세스 권한을 설정하려면 계정에 필수 역할 부여Compute Engine 서비스 계정을 참조하세요.

  • 이미지를 내보내는 경우 내보내기 도구는 이미지를 Cloud Storage 버킷에 업로드합니다.

  • 이미지를 가져오려면 먼저 Cloud Storage 버킷에 이미지를 업로드해야 합니다. 가져오기 도구는 Cloud Storage 버킷에서 Compute Engine으로 파일을 다운로드한 다음 해당 디스크 파일에서 Compute Engine에 이미지를 만듭니다.

필수 IAM 역할 부여

VM 이미지 가져오기 및 내보내기 도구를 사용하려면 다음 계정이 대신 작업을 수행해야 합니다.

  • 사용자 계정. 가져오기 및 내보내기 명령어를 실행 중인 계정입니다.
  • Cloud Build 서비스 계정. 가져오기 또는 내보내기 도구로 Cloud Build API를 사용 설정할 때 생성되는 기본 Cloud Build 서비스 계정입니다.
  • Compute Engine 서비스 계정. 가져오기 및 내보내기 워크플로에 필요한 기본 또는 커스텀 Compute Engine 서비스 계정입니다.

사용자 계정에 필수 역할 부여

이미지를 가져오거나 내보내려면 사용자 계정에 다음 역할이 필요합니다.

  • 저장소 관리자 역할(roles/storage.admin)
  • 뷰어 역할(roles/viewer)
  • 프로젝트 IAM 관리자 역할(roles/resourcemanager.projectIamAdmin)
  • Cloud Build 편집자 역할(roles/cloudbuild.builds.editor)

Console

  1. 프로젝트 또는 조직의 IAM 및 관리자 페이지로 이동합니다.

    IAM 및 관리자로 이동

  2. 계정을 찾고 수정을 클릭합니다.

  3. 역할 선택 목록에서 다음 역할을 선택합니다.

    • Cloud Storage > 스토리지 관리자
    • 프로젝트 > 뷰어
    • Resource Manager > 프로젝트 IAM 관리자
    • Cloud Build > Cloud Build 편집자
  4. 변경사항을 저장합니다.

gcloud

다음 단계에서는 gcloud projects add-iam-policy-binding 명령어를 사용하여 프로젝트 수준에서 필요한 역할을 부여합니다.

  1. roles/storage.admin 역할을 부여합니다.

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member='MEMBER' \
      --role='roles/storage.admin'
    

    다음을 바꿉니다.

    • PROJECT_ID: 프로젝트의 Google Cloud 프로젝트 ID
    • MEMBER: 가져오기 및 내보내기 명령어를 실행하는 계정(예: user:export-user@gmail.com)
  2. roles/viewer 역할을 부여합니다.

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member='MEMBER' \
      --role='roles/viewer'
    
  3. roles/resourcemanager.projectIamAdmin 역할을 부여합니다.

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member='MEMBER' \
      --role='roles/resourcemanager.projectIamAdmin'
    
  4. roles/cloudbuild.builds.editor 역할을 부여합니다.

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member='MEMBER' \
      --role='roles/cloudbuild.builds.editor'
    

REST

  1. 리소스의 getIamPolicy 메서드로 기존 정책을 읽습니다. 프로젝트의 경우 projects.getIamPolicy 메서드를 사용합니다.

    POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:getIamPolicy
    

    PROJECT_ID를 프로젝트 ID(예: my-project-1)로 바꿉니다.

  2. 필수 역할을 계정에 부여하려면 텍스트 편집기를 사용하여 정책을 수정합니다.

    예를 들어 user:export-user@gmail.com 계정에 필수 역할을 부여하려면 다음 binding을 정책에 추가합니다.

    {
       {
         "role":"roles/storage.admin",
         "member":[
           "user:export-user@gmail.com"
         ]
       }
       {
         "roles":"roles/viewer",
         "member":[
           "user:export-user@gmail.com"
         ]
       }
       {
         "roles":"roles/resourcemanager.projectIamAdmin",
         "member":[
           "user:export-user@gmail.com"
         ]
       }
       {
         "roles":"roles/cloudbuild.builds.editor",
         "member":[
           "user:export-user@gmail.com"
         ]
       }
    }
    
  3. 업데이트된 정책을 작성하려면 setIamPolicy 메서드를 사용합니다.

    예를 들어 프로젝트 수준에서 정책을 설정하려면 project.setIamPolicy 메서드를 사용합니다. 요청 본문에 이전 단계에서 업데이트한 IAM 정책을 제공합니다.

    POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:setIamPolicy
    

Cloud Build 서비스 계정에 필수 역할 부여

Google Cloud 콘솔 또는 gcloud CLI를 사용하여 처음으로 이미지를 가져오거나 내보낼 때 이 도구는 Cloud Build API를 사용 설정하고 필수 역할을 Compute Engine 서비스 계정에 부여하려고 시도합니다.

  • 서비스 계정 토큰 생성자 역할(roles/iam.serviceAccountTokenCreator)
  • 서비스 계정 사용자 역할(roles/iam.serviceAccountUser)
  • Compute 관리자 역할(roles/compute.admin)

    Compute 관리자 역할 부여를 방지하려면 다음 Compute Engine IAM 권한이 있는 커스텀 역할 만든Cloud Build 서비스 계정에 부여하면 됩니다.

  • Compute 네트워크 사용자 역할(roles/compute.networkUser)

    이 역할은 공유 VPC를 사용하는 이미지를 가져오거나 내보낼 때만 필요합니다.

    공유 VPC 프로젝트에서 이미지를 가져오거나 내보내는 프로젝트에 있는 Cloud Build 서비스 계정에 Compute 네트워크 사용자 역할을 부여합니다.

하지만 이러한 역할을 수동으로 부여하여 필수 권한이 적용되도록 할 수 있습니다.

Console

  1. Cloud Build API를 사용 설정한 후 프로젝트 또는 조직의 IAM 및 관리자 페이지로 이동합니다.

    IAM 및 관리자로 이동

  2. Cloud Build 서비스 계정을 찾고 수정을 클릭합니다.

  3. 필수 역할이 표시되지 않으면 다음을 수행합니다.

    1. 다른 역할 추가를 클릭합니다.
    2. 역할 선택 목록에서 추가하려는 필수 역할을 선택합니다.

      • 서비스 계정 > 서비스 계정 토큰 생성자
      • 서비스 계정 > 서비스 계정 사용자
      • Compute Engine > Compute 관리자

        또는 커스텀 역할을 선택할 수 있습니다. 이 문서 앞부분의 커스텀 역할의 필수 권한을 참조하세요.

    3. 저장을 클릭하여 변경사항을 저장합니다.

  4. 선택사항: 공유 VPC를 사용하는 이미지를 가져오거나 내보내는 경우 공유 VPC 프로젝트에서 Compute 네트워크 사용자 역할을 선택합니다.

    1. 콘솔 상단의 프로젝트 선택기에서 공유 VPC 호스트 프로젝트를 선택합니다.
    2. IAM 및 관리자 페이지에서 액세스 권한 부여를 클릭합니다.
    3. 새 주 구성원 필드에 Cloud Build 서비스 계정의 이메일 주소를 입력합니다.
       PROJECT_NUMBER@cloudbuild.gserviceaccount.com'
       
      PROJECT_NUMBER를 이미지를 가져오거나 내보내는 프로젝트의 고유 번호로 바꿉니다.
    4. 역할 선택 목록에서 Compute Engine > Compute 네트워크 사용자 역할을 선택합니다.
    5. 저장을 클릭하여 변경사항을 저장합니다.

gcloud

다음 단계에서는 gcloud projects add-iam-policy-binding 명령어를 사용하여 프로젝트 수준에서 필요한 역할을 부여합니다.

  1. Cloud Build 서비스 계정에 roles/compute.admin 역할을 부여합니다. roles/compute.admin 역할 부여를 방지하려면 필수 권한이 있는 커스텀 역할을 만든 후 이 역할을 Cloud Build 서비스 계정에 부여하면 됩니다. 이 문서 앞부분의 커스텀 역할의 필수 권한을 참조하세요.

    gcloud projects add-iam-policy-binding PROJECT_ID \
       --member='serviceAccount:PROJECT_NUMBER@cloudbuild.gserviceaccount.com' \
       --role='roles/compute.admin'
    

    다음을 바꿉니다.

  2. roles/iam.serviceAccountUser 역할을 부여합니다.

    gcloud projects add-iam-policy-binding PROJECT_ID \
       --member='serviceAccount:PROJECT_NUMBER@cloudbuild.gserviceaccount.com' \
       --role='roles/iam.serviceAccountUser'
    
  3. roles/iam.serviceAccountTokenCreator 역할을 부여합니다.

    gcloud projects add-iam-policy-binding PROJECT_ID \
       --member='serviceAccount:PROJECT_NUMBER@cloudbuild.gserviceaccount.com' \
       --role='roles/iam.serviceAccountTokenCreator'
    
  4. 선택사항: 공유 VPC를 사용하는 이미지를 내보내거나 가져오는 경우 roles/compute.networkUser 역할을 부여합니다.

    gcloud projects add-iam-policy-binding HOST_PROJECT_ID \
       --member='serviceAccount:PROJECT_NUMBER@cloudbuild.gserviceaccount.com' \
       --role='roles/compute.networkUser'
    

    다음을 바꿉니다.

    • HOST_PROJECT_ID: 공유 VPC가 있는 호스트 프로젝트의 ID
    • PROJECT_NUMBER: 이미지를 가져오거나 내보내는 프로젝트의 고유 번호

REST

  1. 리소스의 getIamPolicy 메서드로 기존 정책을 읽습니다. 프로젝트의 경우 projects.getIamPolicy 메서드를 사용합니다.

    POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:getIamPolicy
    

    PROJECT_ID를 프로젝트 ID(예: my-project-1)로 바꿉니다.

  2. 필수 역할을 계정에 부여하려면 텍스트 편집기를 사용하여 정책을 수정합니다.

    예를 들어 serviceAccount:12345@cloudbuild.gserviceaccount.com에 필수 역할을 부여하려면 다음 binding을 정책에 추가합니다.

    {
       {
         "role":"roles/compute.admin",
         "member":[
           "serviceAccount:12345@cloudbuild.gserviceaccount.com"
         ]
       }
       {
         "roles":"roles/iam.serviceAccountUser",
         "member":[
           "serviceAccount:12345@cloudbuild.gserviceaccount.com"
         ]
       }
      {
         "roles":"roles/iam.serviceAccountTokenCreator",
         "member":[
           "serviceAccount:12345@cloudbuild.gserviceaccount.com"
         ]
       }
    }
    

    roles/compute.admin 역할 부여를 방지하려면 필수 권한이 있는 커스텀 역할을 만든 후 이 역할을 Cloud Build 서비스 계정에 부여하면 됩니다. 이 문서 앞부분의 커스텀 역할의 필수 권한을 참조하세요.

  3. 선택사항: 공유 VPC를 사용하는 이미지를 내보내거나 가져오는 경우 공유 VPC 프로젝트에서 roles/compute.networkUser 역할을 부여합니다.

    POST https://cloudresourcemanager.googleapis.com/v1/projects/HOST_PROJECT_ID:getIamPolicy
    

    HOST_PROJECT_ID를 공유 VPC 프로젝트의 ID로 바꿉니다.

    Cloud Build 서비스 계정에 다음 IAM binding을 추가합니다.

    {
       {
         "roles":"roles/compute.networkUser",
         "member":[
           "serviceAccount:12345@cloudbuild.gserviceaccount.com"
         ]
       }
    }
    
  4. 업데이트된 정책을 작성하려면 setIamPolicy 메서드를 사용합니다.

    예를 들어 프로젝트 수준에서 정책을 설정하려면 project.setIamPolicy 메서드를 사용합니다. 요청 본문에 이전 단계에서 업데이트한 IAM 정책을 제공합니다.

    POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:setIamPolicy
    

리소스에 대한 액세스 관리 방법에 대한 자세한 내용은 리소스에 대한 액세스 권한 부여, 변경, 취소를 참조하세요.

Compute Engine 서비스 계정에 필수 역할 부여

Google Cloud 콘솔 또는 gcloud CLI를 사용하여 처음으로 이미지를 가져오거나 내보낼 때 이 도구는 필수 역할을 기본 Compute Engine 서비스 계정에 부여하려고 시도합니다. 기본적으로 이 계정에는 프로세스에 충분한 IAM 편집자 역할(roles/editor)이 있습니다. Compute Engine 서비스 계정에는 다음 역할이 있어야 합니다.

  • Compute 스토리지 관리자 역할(roles/compute.storageAdmin): VM 이미지를 내보내고 가져오는 데 필요합니다.
  • 스토리지 객체 뷰어 역할(roles/storage.objectViewer): VM 이미지를 가져오는 데 필요합니다.
  • 스토리지 객체 관리자 역할(roles/storage.objectAdmin): VM 이미지를 내보내는 데 필요합니다.

그러나 Compute Engine 서비스 계정의 기본 역할 및 권한을 수정한 경우 서비스 계정에 필수 역할이 여전히 적용되어 있는지 확인합니다.

Console

  1. 프로젝트 또는 조직의 IAM 및 관리자 페이지로 이동합니다.

    IAM 및 관리자로 이동

  2. Compute Engine 서비스 계정을 찾고 수정을 클릭합니다.

  3. 역할 선택 목록에서 다음 역할을 선택합니다.

    • Compute Engine > Compute Storage 관리자
    • Cloud Storage > 스토리지 객체 뷰어
    • Cloud Storage > 스토리지 객체 관리자
  4. 변경사항을 저장합니다.

gcloud

다음 단계에서는 gcloud projects add-iam-policy-binding 명령어를 사용하여 프로젝트 수준에서 필요한 역할을 부여합니다.

  1. roles/compute.storageAdmin 역할을 부여합니다.

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member='serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com' \
      --role='roles/compute.storageAdmin'
    
  2. 이미지를 가져오는 경우 roles/storage.objectViewer 역할을 부여합니다.

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member='serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com' \
      --role='roles/storage.objectViewer'
    
  3. 이미지를 내보내는 경우 roles/storage.objectAdmin 역할을 부여합니다.

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member='serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com' \
      --role='roles/storage.objectAdmin'
    

REST

  1. 리소스의 getIamPolicy 메서드로 기존 정책을 읽습니다. 프로젝트의 경우 projects.getIamPolicy 메서드를 사용합니다.

    POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:getIamPolicy
    

    PROJECT_ID를 프로젝트 ID(예: my-project-1)로 바꿉니다.

  2. 필수 역할을 계정에 부여하려면 텍스트 편집기를 사용하여 정책을 수정합니다.

    예를 들어 이미지를 가져오는 데 필요한 역할을 serviceAccount:12345-compute@developer.gserviceaccount.com에 부여하려면 정책에 다음 binding을 추가합니다.

    {
       {
         "role":"roles/compute.storageAdmin",
         "member":[
           "serviceAccount:12345-compute@developer.gserviceaccount.com"
         ]
       }
       {
         "roles":"roles/storage.objectViewer",
         "member":[
           "serviceAccount:12345-compute@developer.gserviceaccount.com"
         ]
       }
    }
    
  3. 업데이트된 정책을 작성하려면 setIamPolicy 메서드를 사용합니다.

    예를 들어 프로젝트 수준에서 정책을 설정하려면 project.setIamPolicy 메서드를 사용합니다. 요청 본문에 이전 단계에서 업데이트한 IAM 정책을 제공합니다.

    POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:setIamPolicy
    

기본 Compute Engine 서비스 계정을 사용하지 않으려면 gcloud 가져오기 및 내보내기 명령어에서 --compute-service-account 플래그를 사용하여 사용자 관리 서비스 계정을 지정하면 됩니다. 커스텀 Compute Engine 서비스 계정 사용에 대한 자세한 내용은 다음 리소스를 참조하세요.

다음 단계