다른 프로젝트의 이미지 사용

이 페이지에서는 Deployment Manager가 다른 프로젝트에 속하는 운영체제 이미지를 사용하여 Compute Engine 가상 머신 인스턴스를 만들 수 있도록 프로젝트를 구성하는 방법을 설명합니다.

예를 들어 Deployment Manager가 VM 인스턴스를 만들고 관리하는 Awesome Project라는 프로젝트가 있다고 가정해보세요. 그리고 Database Images라는 다른 프로젝트에 속하는 비공개 이미지를 사용해야 한다고 가정해 봅니다. 이러한 이미지에 대한 액세스 권한을 부여하려면 Database Images 소유자가 Awesome Project의 Google API 서비스 계정에 IAM 역할 roles/compute.imageUser를 부여해야 합니다. 그러면 Awesome Project가 Database Images 프로젝트의 이미지를 사용할 수 있습니다.

또한 이 프로세스를 사용하여 다른 프로젝트의 이미지에 대한 액세스 권한을 관리형 인스턴스 그룹에 부여할 수 있습니다.

시작하기 전에

제한사항

이 기능에 적용되는 제한사항은 다음과 같습니다.

  • 프로젝트 수준에서 compute.imageUser 역할을 프로젝트의 Google API 서비스 계정에 부여해야 합니다.
  • compute.imageUser 역할을 부여하면 특정 프로젝트의 모든 이미지에 대한 권한이 부여됩니다. 특정 이미지를 공유할 수 없습니다.
  • allAuthenticatedUsers 또는 allUsers가 아닌 특정 사용자에게 이 역할을 부여해야 합니다.

이미지에 대한 액세스 권한 부여

다른 프로젝트에 속하는 이미지에 대한 액세스 권한을 부여하려면 이미지를 소유하는 프로젝트 소유자가 이미지를 사용하려는 프로젝트의 Google API 서비스 계정에 액세스 권한을 부여해야 합니다.

  1. 다른 프로젝트에서 소유한 비공개 이미지에 대한 액세스 권한이 필요한 프로젝트의 Google Cloud 콘솔에서 IAM 페이지로 이동합니다.

    IAM 페이지로 이동

  2. 메시지가 나타나면 목록에서 프로젝트를 선택합니다. 다른 프로젝트에 저장된 이미지에 대한 액세스 권한이 필요한 프로젝트를 선택해야 합니다.
  3. 다음 형식의 이메일 주소가 포함된 Google API 서비스 계정을 찾습니다.

    [PROJECT_NUMBER]@cloudservices.gserviceaccount.com
    
  4. 위의 이메일 주소를 기록합니다. 그러면 원하는 이미지가 있는 프로젝트의 프로젝트 소유자가 Google API 서비스 계정에 roles/compute.imageUser 역할을 부여할 수 있습니다.

    Console

    1. Google Cloud Console에서 액세스하려는 이미지가 포함된 프로젝트의 IAM 페이지로 이동합니다.

      IAM 페이지로 이동

    2. 프로젝트 목록에서 프로젝트를 선택합니다.
    3. 추가 버튼을 클릭해 새 구성원을 추가합니다.
    4. 구성원 상자에 서비스 계정의 이메일 주소를 입력합니다.
    5. 역할 드롭다운을 펼치고 Compute Engine > Compute 이미지 사용자를 선택합니다.
    6. 추가를 클릭해 계정을 추가합니다.

    gcloud

    Google Cloud CLI를 사용하여 프로젝트의 IAM 정책에 binding을 추가합니다.

    gcloud projects add-iam-policy-binding [PROJECT_ID] \
        --member serviceAccount:[SERVICE_ACCOUNT_EMAIL] --role roles/compute.imageUser

    각 항목의 의미는 다음과 같습니다.

    • [PROJECT_ID]는 공유하려는 이미지가 포함된 프로젝트의 ID입니다.
    • [SERVICE_ACCOUNT_EMAIL]은 서비스 계정의 이메일입니다.

    예를 들면 다음과 같습니다.

    gcloud projects add-iam-policy-binding database-images \
        --member serviceAccount:123456789012@cloudservices.gserviceaccount.com  \
        --role roles/compute.imageUser

    API

    API에서 POST 요청을 다음 URL로 보냅니다. 여기서 [PROJECT_ID]는 공유하려는 이미지가 포함된 프로젝트의 ID입니다.

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

    프로젝트에 적용할 바인딩 목록이 요청 본문에 포함되어야 하며, roles/compute.imageUser 역할이 바인딩의 일부여야 합니다. 예를 들면 다음과 같습니다.

    {
       "policy": {
           "version": "0",
           "bindings": [
           {
               "role": "roles/owner",
               "members": [
                   "user:example@gmail.com"
               ]
           },
           {
               "role": "roles/compute.imageUser",
               "members": [
                   "serviceAccount:123456789012@cloudservices.gservbiceaccount.com"
               ]
           }
           ]
       }
    

    }

구성에서 다른 프로젝트의 이미지 사용

프로젝트가 다른 프로젝트의 이미지에 대한 액세스 권한을 부여받으면 프로젝트 사용자는 템플릿 또는 구성에서 이미지가 속한 프로젝트의 프로젝트 ID를 지정하여 이미지를 사용할 수 있습니다.

image: projects/[PROJECT_ID]/global/images/[IMAGE_NAME]

예를 들어 이미지 프로젝트 ID가 database-images이면 구성에 다음 이미지 URI를 제공할 수 있습니다.

resources:
- name: a-special-vm
  type: compute.v1.instances
  properties:
    machineType: zones/us-central1-a/machineTypes/f1-micro
    image: projects/database-images/global/images/example-database-image
    ...

이미지를 추가하면 구성 만들기를 완료한 후 배포합니다.

다음 단계