커스텀 이미지에 대한 액세스 관리

사용자가 커스텀 이미지를 생성, 삭제, 사용 또는 공유할 수 있도록 하려면 적절한 IAM(Identity and Access Management) 역할을 부여해야 합니다. 이 문서에서는 커스텀 이미지를 만들고 관리하는 데 필요한 IAM 권한과 사용자에게 권한을 부여하는 방법을 설명합니다.

Compute Engine 리소스에 대한 액세스 권한을 부여하는 방법에 대한 일반적인 정보는 Compute Engine 리소스에 대한 액세스 관리를 참조하세요. IAM에 대한 자세한 내용은 IAM 문서를 참조하세요.

시작하기 전에

제한사항

이미지에서는 특수 구성원 유형인 allUsers에 역할을 부여할 수 없습니다.

커스텀 이미지 생성 권한 부여

조직 또는 프로젝트에서 사용자가 커스텀 이미지를 생성할 수 있도록 권한을 부여할 수 있습니다.

Compute Engine은 사용자가 이미지, 디스크, 스냅샷 등의 스토리지 관련 리소스를 생성, 삭제, 관리할 수 있도록 사용자에게 할당 가능한 사전 정의된 Compute 스토리지 관리자 역할(roles/compute.storageAdmin)을 제공합니다. 이미지 생성만을 허용하는 역할이 필요한 경우 커스텀 역할을 만들어야 합니다. 커스텀 역할에 다음 권한을 포함합니다.

  • compute.images.create를 통해 새 이미지 생성
  • compute.images.list를 통해 프로젝트의 이미지 나열
  • compute.disks.use를 통해 디스크에서 이미지 생성
  • compute.disks.list를 통해 사용자가 프로젝트의 모든 디스크를 나열

사용자가 조직 수준에서 커스텀 이미지를 생성할 수 있도록 권한을 부여하면 사용자는 조직 내 모든 프로젝트의 커스텀 이미지를 생성할 수 있습니다.

콘솔

  1. Google Cloud Console에서 프로젝트 또는 조직의 IAM 페이지로 이동합니다.

    IAM으로 이동

  2. 신규 회원을 추가하려면 액세스 권한 부여를 클릭합니다.

  3. 새 주 구성원 필드에서 액세스 권한을 부여할 ID의 이메일 주소를 입력합니다.

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

    • Google 계정 이메일: test-user@gmail.com
    • Google 그룹: admins@googlegroups.com
    • 서비스 계정: server@example.gserviceaccount.com
    • Google Workspace 도메인: example.com
  4. 역할 선택 목록에서 Compute Engine > Compute 스토리지 관리자를 선택하거나, 커스텀 역할을 생성한 경우에는 커스텀 역할을 선택합니다.

  5. 선택사항: Google Cloud 리소스에 대한 사용자의 액세스를 추가로 제어하려면 조건부 역할 결합을 추가합니다.

  6. 변경사항을 저장합니다.

gcloud

조직 수준에서 roles/compute.storageAdmin 역할을 부여하려면 gcloud organizations add-iam-policy-binding 명령어를 사용합니다.

gcloud organizations add-iam-policy-binding ORGANIZATION_ID \
    --member='MEMBER' \
    --role='roles/compute.storageAdmin'

프로젝트 수준에서 roles/compute.storageAdmin 역할을 부여하려면 gcloud projects add-iam-policy-binding 명령어를 사용합니다.

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

다음을 바꿉니다.

  • ORGANIZATION_ID 또는 PROJECT_ID: 조직 ID 또는 프로젝트 ID(예: my-organization-1 또는 my-project-1)
  • MEMBER: 역할을 부여할 유효한 ID

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

    • Google 계정 이메일: user:user@gmail.com
    • Google 그룹: group:admins@googlegroups.com
    • 서비스 계정: serviceAccount:server@example.gserviceaccount.com
    • Google Workspace 도메인: domain:example.com

API

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

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

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

    조직의 경우 organizations.getIamPolicy 메서드를 사용합니다.

    POST https://cloudresourcemanager.googleapis.com/v1/organizations/ORGANIZATION_ID:getIamPolicy
    

    ORGANIZATION_ID를 조직 ID(예: 123456578920)로 바꿉니다.

    Compute Engine은 응답의 현재 정책을 반환합니다.

  2. 구성원과 연결된 역할을 추가하거나 삭제하려면 텍스트 편집기로 정책을 수정합니다. 구성원을 추가하려면 다음 형식을 사용하세요.

    • user:test-user@gmail.com
    • group:admins@example.com
    • serviceAccount:test123@example.domain.com
    • domain:example.domain.com

    예를 들어 group:admins@example.comroles/compute.storageAdmin 역할을 부여하려면 다음 binding을 정책에 추가합니다.

    {
     "members": [
       "group:admins@example.com"
     ],
     "role":"roles/compute.storageAdmin"
    }
    
  3. setIamPolicy 메서드를 사용하여 업데이트된 정책을 작성합니다.

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

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

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

커스텀 이미지 삭제 권한 부여

필요에 따라 사용자에게 다음 작업에 대한 권한을 부여할 수 있습니다.

  • 특정 이미지 삭제
  • 특정 프로젝트에서 소유한 이미지 삭제
  • 조직 내 모든 프로젝트의 이미지 삭제

프로젝트 수준에서 권한을 부여하면 사용자가 프로젝트에서 소유한 모든 이미지를 삭제할 수 있습니다. 조직 수준에서 권한을 부여하면 사용자가 프로젝트에 관계없이 해당 조직에서 소유한 모든 이미지를 삭제할 수 있습니다.

Compute Engine은 사용자가 이미지, 디스크, 스냅샷 등의 스토리지 관련 리소스를 생성, 삭제, 관리할 수 있도록 사용자에게 할당 가능한 사전 정의된 Compute 스토리지 관리자 역할(roles/compute.storageAdmin)을 제공합니다. 이미지 삭제만을 허용하는 역할이 필요한 경우 커스텀 역할을 만들어야 합니다. 커스텀 역할에 다음 권한을 포함합니다.

  • compute.images.delete를 통해 이미지 삭제
  • compute.images.list를 통해 프로젝트 또는 조직의 이미지 나열
  • compute.images.get을 통해 이미지 가져오기

콘솔

특정 이미지를 삭제할 권한을 부여하려면 다음 안내를 따르세요.

  1. Google Cloud 콘솔에서 이미지 페이지로 이동합니다.

    이미지로 이동

  2. 권한을 부여할 이미지를 선택합니다.

  3. 권한 열을 펼치려면 정보 패널 표시를 클릭합니다.

  4. 구성원을 하나 이상 추가하려면 주 구성원 추가를 클릭합니다.

  5. 새 주 구성원 필드에서 이미지를 공유할 ID의 이메일 주소를 입력합니다.

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

    • Google 계정 이메일: test-user@gmail.com
    • Google 그룹: admins@googlegroups.com
    • 서비스 계정: server@example.gserviceaccount.com
    • Google Workspace 도메인: example.com
  6. 역할 목록에서 Compute Engine 위에 마우스 포인터를 올려놓고 스토리지 관리자를 선택하거나 커스텀 목록에서 커스텀 역할을 선택합니다.

  7. 선택사항: Google Cloud 리소스에 대한 사용자의 액세스를 추가로 제어하려면 조건부 역할 결합을 추가합니다.

  8. 변경사항을 저장합니다.

프로젝트 또는 조직의 이미지를 삭제할 수 있는 권한을 부여하려면 다음 안내를 따르세요.

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

    IAM으로 이동

  2. 액세스 권한 부여를 클릭합니다.

  3. 새 주 구성원 필드에서 액세스 권한을 부여할 ID의 이메일 주소를 입력합니다. 예를 들면 다음과 같습니다.

    • Google 계정 이메일: test-user@gmail.com
    • Google 그룹: admins@googlegroups.com
    • 서비스 계정: server@example.gserviceaccount.com
    • Google Workspace 도메인: example.com
  4. 역할 목록에서 Compute Engine 위에 마우스 포인터를 올려놓고 스토리지 관리자를 선택하거나 커스텀 목록에서 커스텀 역할을 선택합니다.

  5. 선택사항: Google Cloud 리소스에 대한 사용자의 액세스를 추가로 제어하려면 조건부 역할 결합을 추가합니다.

  6. 변경사항을 저장합니다.

gcloud

조직 수준에서 이미지를 삭제할 수 있는 권한을 부여하려면 gcloud organizations add-iam-policy-binding 명령어를 사용합니다.

gcloud organizations add-iam-policy-binding ORGANIZATION_ID \
    --member='MEMBER' \
    --role='ROLE'

프로젝트 수준에서 이미지를 삭제할 수 있는 권한을 부여하려면 gcloud projects add-iam-policy-binding 명령어를 사용합니다.

gcloud projects add-iam-policy-binding PROJECT_ID \
    --member='MEMBER' \
    --role='ROLE'

특정 이미지를 삭제할 수 있는 권한을 부여하려면 gcloud compute images add-iam-policy-binding 명령어를 사용합니다.

gcloud compute images add-iam-policy-binding IMAGE_NAME \
    --member='MEMBER' \
    --role='ROLE'

다음을 바꿉니다.

  • ORGANIZATION_ID 또는 PROJECT_ID 또는 IMAGE_NAME: 12자리 숫자로 된 조직 ID, 프로젝트 ID 또는 이미지 이름(예: 123456578920, my-project-1 또는 my-custom-image)
  • MEMBER: 역할을 부여할 유효한 ID

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

    • Google 계정 이메일: user:user@gmail.com
    • Google 그룹: group:admins@googlegroups.com
    • 서비스 계정: serviceAccount:server@example.gserviceaccount.com
    • Google Workspace 도메인: domain:example.com
  • ROLE: 이 ID에 할당할 역할(예: roles/compute.storageAdmin 역할 또는 roles/customImageDeletionRole과 같은 커스텀 역할)

API

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

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

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

    조직의 경우 organizations.getIamPolicy 메서드를 사용합니다.

    POST https://cloudresourcemanager.googleapis.com/v1/organizations/ORGANIZATION_ID:getIamPolicy
    

    ORGANIZATION_ID를 12자리 숫자로 된 조직 ID로 바꿉니다.

    특정 이미지의 경우 images.getIamPolicy 메서드를 사용합니다.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/images/IMAGE_NAME:getIamPolicy
    

    다음을 바꿉니다.

    • PROJECT_ID: 프로젝트 ID입니다.
    • IMAGE_NAME: 이미지의 이름입니다.

    Compute Engine은 응답의 현재 정책을 반환합니다.

  2. 구성원과 연결된 역할을 추가 또는 삭제하려면 텍스트 편집기로 정책을 수정하면 됩니다. 구성원을 추가하려면 다음 형식을 사용하세요.

    • user:test-user@gmail.com
    • group:admins@example.com
    • serviceAccount:test123@example.domain.com
    • domain:example.domain.com

    예를 들어 user:test-email@example.comroles/compute.storageAdmin 역할을 부여하려면 다음 binding을 정책에 추가합니다.

    {
     "members": [
       "user:test-email@example.com"
     ],
     "role":"roles/compute.storageAdmin"
    }
    
  3. setIamPolicy 메서드를 사용하여 업데이트된 정책을 작성합니다.

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

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

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

조직 내 커스텀 이미지 공유

프로젝트가 조직에 속한 경우 조직은 다른 프로젝트에 대한 액세스 수준이 다양한 여러 프로젝트를 가질 수 있습니다. 커스텀 이미지를 생성할 때 조직 내 다른 프로젝트의 다른 사용자와 이미지를 공유할 수 있습니다.

Compute Engine은 이미지 관리에 사용할 수 있는 다음과 같은 사전 정의된 IAM 역할을 제공합니다.

  • Compute 이미지 사용자(roles/compute.imageUser): 이미지에 대한 다른 권한 없이 요청에 이미지를 나열하고 읽고 사용할 수 있는 권한입니다.
  • Compute 스토리지 관리자(roles/compute.storageAdmin): 디스크, 이미지, 스냅샷을 생성, 수정, 삭제할 수 있는 권한입니다.

또는 자체적인 커스텀 IAM 역할을 만들 수도 있습니다.

모든 커스텀 이미지를 호스팅하는 전용 단일 프로젝트에 해당 이미지를 보관하는 것이 좋습니다. 이렇게 하면 이러한 이미지 관리를 개선하고 특정 팀에게 필요한 이미지에만 액세스하도록 허용할 수 있습니다. 팀에게 전체 이미지 프로젝트에 대한 액세스 권한을 부여할 수도 있지만, 전체 이미지 프로젝트에 대한 팀 액세스 권한은 최소 권한의 원칙에 위배되므로 권장하지 않습니다.

아래의 예시는 해당 그룹의 사용자가 이미지에 액세스할 수 있도록 그룹을 추가하는 방법을 보여줍니다.

콘솔

  1. Google Cloud 콘솔에서 이미지 페이지로 이동합니다.

    이미지로 이동

  2. 다른 사용자와 공유할 이미지를 선택합니다.

  3. 권한 열을 펼치려면 정보 패널 표시를 클릭합니다.

  4. 구성원을 하나 이상 추가하려면 주 구성원 추가를 클릭합니다.

  5. 새 주 구성원 필드에서 이미지를 공유할 ID의 이메일 주소를 입력합니다.

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

    • Google 계정 이메일: test-user@gmail.com
    • Google 그룹: admins@googlegroups.com
    • 서비스 계정: server@example.gserviceaccount.com
    • Google Workspace 도메인: example.com
  6. 역할 목록의 Compute Engine 위에 마우스 포인터를 올려놓고 이미지 사용자 또는 스토리지 관리자를 선택하거나 커스텀 역할을 선택합니다.

  7. 선택사항: Google Cloud 리소스에 대한 사용자의 액세스를 추가로 제어하려면 조건부 역할 결합을 추가합니다.

  8. 변경사항을 저장합니다.

사용자가 Google Cloud 콘솔에서 공유 커스텀 이미지를 실행하도록 하려면 이미지 프로젝트에 대한 뷰어 IAM 역할(roles/viewer)을 사용자에게 부여합니다. 이 역할을 부여하면 공유 이미지가 이미지 선택 목록에 표시되는 데 도움이 됩니다.

  1. Google Cloud 콘솔에서 IAM 페이지로 이동합니다.

    IAM으로 이동

  2. 액세스 권한 부여를 클릭합니다.

  3. 새 주 구성원 필드에서 이미지를 공유할 ID의 이메일 주소를 입력합니다. 예를 들면 다음과 같습니다.

    • Google 계정 이메일: test-user@gmail.com
    • Google 그룹: admins@googlegroups.com
    • 서비스 계정: server@example.gserviceaccount.com
    • Google Workspace 도메인: example.com
  4. 역할 목록에서 프로젝트 위에 마우스 포인터를 올려놓고 뷰어를 선택합니다.

  5. 선택사항: Google Cloud 리소스에 대한 사용자의 액세스를 추가로 제어하려면 조건부 역할 결합을 추가합니다.

  6. 변경사항을 저장합니다.

gcloud

특정 이미지의 IAM 정책을 업데이트하려면 gcloud compute images add-iam-policy-binding 명령어를 사용합니다.

gcloud compute images add-iam-policy-binding IMAGE_NAME \
    --member='MEMBER' \
    --role='ROLE'

다음을 바꿉니다.

  • IMAGE_NAME: 이미지의 이름(예: custom-centos-8)
  • MEMBER: 역할을 부여할 유효한 ID

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

    • user:test-user@gmail.com
    • group:admins@example.com
    • serviceAccount:test123@example.domain.com
    • domain:example.domain.com
  • ROLE: roles/compute.imageUser, roles/compute.storageAdmin 또는 커스텀 역할 등 이 ID를 할당할 역할

필요한 경우 images.list 요청에서 사용자가 공유 이미지를 볼 수 있도록 하려면 gcloud projects add-iam-policy-binding 명령어를 사용해 이미지 프로젝트의 뷰어 IAM 역할(roles/viewer)을 사용자에게 부여합니다. 사용자가 공유 이미지 목록을 볼 필요가 없는 경우에는 이 단계를 건너뜁니다.

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

API

  1. 리소스의 getIamPolicy 메서드로 기존 정책을 읽습니다. 예를 들어 특정 이미지의 정책을 가져오려면 images.getIamPolicy 메서드를 사용합니다.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/images/IMAGE_NAME:getIamPolicy
    

    다음을 바꿉니다.

    • PROJECT_ID: 이 이미지가 속한 프로젝트의 프로젝트 ID입니다.
    • IMAGE_NAME: 이미지의 이름입니다.

    Compute Engine은 응답의 현재 정책을 반환합니다.

  2. 구성원과 연결된 역할을 추가하거나 삭제하려면 텍스트 편집기로 정책을 수정합니다. 구성원을 추가하려면 다음 형식을 사용하세요.

    • user:test-user@gmail.com
    • group:admins@example.com
    • serviceAccount:test123@example.domain.com
    • domain:example.domain.com

    예를 들어 test-email@example.comroles/compute.imageUser 권한을 부여하려면 다음 binding을 정책에 추가합니다.

    {
     "members": [
       "user:test-email@example.com"
     ],
     "role":"roles/compute.imageUser"
    }
    
  3. setIamPolicy 메서드를 사용하여 업데이트된 정책을 작성합니다. 예를 들어 특정 이미지에 대한 정책을 설정하려면 project.setIamPolicy 메서드를 사용합니다. 요청 본문에 이전 단계에서 업데이트한 IAM 정책을 제공합니다.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/images/IMAGE_NAME:setIamPolicy
    

    다음을 바꿉니다.

    • PROJECT_ID: 이 이미지가 속한 프로젝트의 프로젝트 ID입니다.
    • IMAGE_NAME: 이미지의 이름입니다.

필요한 경우 images.list 요청에서 사용자가 공유 이미지를 볼 수 있도록 하려면 projects.setIamPolicy 메서드를 사용해 이미지 프로젝트의 뷰어 IAM 역할(roles/viewer)을 사용자에게 부여합니다. 사용자가 공유 이미지 목록을 볼 필요가 없는 경우에는 이 단계를 건너뜁니다.

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

조직 간 커스텀 이미지 공유

커스텀 이미지 카탈로그를 생성하면 조직 외부의 파트너, 사용자 또는 계약자와 이미지를 공유할 때 유용합니다. 조직 외부 사용자와 이미지를 공유하려면 조직 외부 사용자를 이미지 사용자로 프로젝트에 추가합니다.

콘솔

  1. Google Cloud 콘솔에서 이미지 페이지로 이동합니다.

    이미지로 이동

  2. 다른 사용자와 공유할 이미지를 선택합니다.

  3. 권한 열을 펼치려면 정보 패널 표시를 클릭합니다.

  4. 구성원을 하나 이상 추가하려면 주 구성원 추가를 클릭합니다.

  5. 새 주 구성원 필드에서 이미지를 공유할 그룹의 이메일 주소를 입력합니다. 예를 들면 admins@example.com입니다.

  6. 역할 목록에서 Compute Engine 위에 마우스 포인터를 올려놓고 Compute 이미지 사용자를 선택합니다.

  7. 선택사항: Google Cloud 리소스에 대한 사용자의 액세스를 추가로 제어하려면 조건부 역할 결합을 추가합니다.

  8. 변경사항을 저장합니다.

사용자가 Google Cloud 콘솔에서 공유 커스텀 이미지를 실행하도록 하려면 이미지 프로젝트에 대한 뷰어 IAM 역할(roles/viewer)을 사용자에게 부여합니다. 이 역할을 부여하면 공유 이미지가 이미지 선택 목록에 표시되는 데 도움이 됩니다.

  1. Google Cloud 콘솔에서 IAM 페이지로 이동합니다.

    IAM으로 이동

  2. 액세스 권한 부여를 클릭합니다.

  3. 새 주 구성원 필드에서 이미지를 공유할 ID의 이메일 주소를 입력합니다. 예를 들면 admins@example.com입니다.

  4. 역할 목록에서 프로젝트 위에 마우스 포인터를 올려놓고 뷰어를 선택합니다.

  5. 선택사항: Google Cloud 리소스에 대한 사용자의 액세스를 추가로 제어하려면 조건부 역할 결합을 추가합니다.

  6. 변경사항을 저장합니다.

gcloud

사용자에게 roles/compute.imageUser 역할을 부여하려면 gcloud compute images add-iam-policy-binding 명령어를 사용합니다.

gcloud compute images add-iam-policy-binding IMAGE_NAME \
    --member='MEMBER' \
    --role='roles/compute.imageUser'

다음을 바꿉니다.

  • IMAGE_NAME: 이미지의 이름(예: custom-centos-8)
  • MEMBER: 역할을 부여할 유효한 ID(예: group:admins@example.com)

필요한 경우 images.list 요청에서 사용자가 공유 이미지를 볼 수 있도록 하려면 gcloud projects add-iam-policy-binding 명령어를 사용해 이미지 프로젝트의 뷰어 IAM 역할(roles/viewer)을 사용자에게 부여합니다. 사용자가 공유 이미지 목록을 볼 필요가 없는 경우에는 이 단계를 건너뜁니다.

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

API

  1. 리소스의 getIamPolicy 메서드로 기존 정책을 읽습니다. 예를 들어 특정 이미지의 정책을 가져오려면 images.getIamPolicy 메서드를 사용합니다.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/images/IMAGE_NAME:getIamPolicy
    

    다음을 바꿉니다.

    • PROJECT_ID: 이 이미지가 속한 프로젝트의 프로젝트 ID입니다.
    • IMAGE_NAME: 이미지의 이름입니다.

    Compute Engine은 응답의 현재 정책을 반환합니다.

  2. 구성원과 연결된 역할을 추가 또는 삭제하려면 텍스트 편집기로 정책을 수정하면 됩니다. 구성원을 추가하려면 다음 형식을 사용하세요.

    • user:test-user@gmail.com
    • group:admins@example.com
    • serviceAccount:test123@example.domain.com
    • domain:example.domain.com

    예를 들어 test-user@example.comroles/compute.imageUser 권한을 부여하려면 다음 binding을 정책에 추가합니다.

    {
      "members": [
        "user:test-user@example.com"
      ],
      "role":"roles/compute.imageUser"
    }
    
  3. setIamPolicy 메서드를 사용하여 업데이트된 정책을 작성합니다. 예를 들어 특정 이미지에 대한 정책을 설정하려면 images.setIamPolicy 메서드를 사용합니다. 요청 본문에 이전 단계에서 업데이트한 IAM 정책을 제공합니다.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/images/IMAGE_NAME:setIamPolicy
    

    다음을 바꿉니다.

    • PROJECT_ID: 이 이미지가 속한 프로젝트의 프로젝트 ID입니다.
    • IMAGE_NAME: 이미지의 이름입니다.

    필요한 경우 images.list 요청에서 사용자가 공유 이미지를 볼 수 있도록 하려면 projects.setIamPolicy 메서드를 사용해 이미지 프로젝트의 뷰어 IAM 역할(roles/viewer)을 사용자에게 부여합니다. 사용자가 공유 이미지 목록을 볼 필요가 없는 경우에는 이 단계를 건너뜁니다.

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

커스텀 이미지 공개적으로 공유

조직이나 프로젝트에 속해 있는지 여부에 관계없이 인증된 모든 Compute Engine 사용자와 커스텀 이미지를 공유할 수 있습니다.

이미지와 같은 리소스는 모든 인증된 사용자와만 공유할 수 있으며, 프로젝트 또는 조직을 인증된 모든 사용자와 공유할 수는 없습니다. 이러한 제한사항과 리소스 계층 구조를 사용하면 조직이 실수로 모든 프로젝트를 인증된 모든 Compute Engine 사용자와 공유하는 것을 방지할 수 있습니다.

다음 예시에서는 인증된 모든 Compute Engine 사용자에게 커스텀 이미지에 대한 Compute 이미지 사용자 역할(roles/compute.imageUser)을 부여하는 방법을 보여줍니다.

gcloud

이미지를 공개로 설정하려면 gcloud compute images add-iam-policy-binding 명령어를 사용합니다.

gcloud compute images add-iam-policy-binding IMAGE_NAME \
    --member='allAuthenticatedUsers' \
    --role='roles/compute.imageUser'

IMAGE_NAME을 리소스 이름으로 바꿉니다(예: my_image).

API

  1. getIamPolicy 메서드로 기존 정책을 읽습니다. 예를 들어 특정 이미지의 정책을 가져오려면 images.getIamPolicy 메서드를 사용합니다.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/images/IMAGE_NAME:getIamPolicy
    

    다음을 바꿉니다.

    • PROJECT_ID: 이 이미지가 속한 프로젝트의 프로젝트 ID입니다.
    • IMAGE_NAME: 이미지의 이름입니다.

    Compute Engine은 응답의 현재 정책을 반환합니다.

  2. 구성원과 연결된 역할을 추가하거나 삭제하려면 텍스트 편집기로 정책을 수정합니다.

    {
     "members": [
       "allAuthenticatedUsers"
     ],
     "role":"roles/compute.imageUser"
    }
    
  3. setIamPolicy 메서드를 사용하여 업데이트된 정책을 작성합니다. 예를 들어 특정 이미지에 대한 정책을 설정하려면 images.setIamPolicy 메서드를 사용합니다. 요청 본문에 이전 단계에서 업데이트한 IAM 정책을 제공합니다.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/images/IMAGE_NAME:setIamPolicy
    

    다음을 바꿉니다.

    • PROJECT_ID: 이 이미지가 속한 프로젝트의 프로젝트 ID입니다.
    • IMAGE_NAME: 이미지의 이름입니다.

관리형 인스턴스 그룹에 이미지 액세스 권한 부여

Compute Engine에서는 VM 그룹을 관리형 또는 비관리형 인스턴스 그룹으로 만들 수 있습니다. 관리형 인스턴스 그룹(MIG)을 만들면 Compute Engine은 Google API 서비스 에이전트를 사용하여 Compute Engine API를 호출하고 비정상 VM을 다시 만들고 VM을 업데이트하는 등 그룹과 관련된 작업을 수행합니다.

다른 프로젝트의 이미지를 사용해 MIG를 만들려면 MIG를 만드는 프로젝트에 속한 API 서비스 계정에 Compute 이미지 사용자 역할(roles/compute.imageUser)을 부여합니다. 예를 들면 다음과 같습니다.

  1. 프로젝트 A는 프로젝트 B가 소유한 이미지를 사용하여 MIG를 만들려고 합니다.
  2. 프로젝트 B는 프로젝트 A의 서비스 계정에 Compute 이미지 사용자 역할을 부여합니다.
  3. 이제 프로젝트 A는 프로젝트 B의 이미지를 사용하여 MIG를 만들 수 있습니다.

Compute 이미지 사용자 역할을 부여한 후에는 관리형 그룹의 인스턴스 템플릿 생성 시 Console 또는 이미지의 URL을 사용하여 다른 프로젝트에서 이미지에 액세스할 수 있습니다.

서비스 계정의 이메일 주소 가져오기

  1. Google Cloud 콘솔에서 서비스 계정에 액세스 권한을 부여할 프로젝트의 IAM 페이지로 이동합니다.

    IAM으로 이동

  2. 메시지가 나타나면 목록에서 프로젝트를 선택합니다.

  3. 다음과 같은 형식의 이메일 주소를 사용하는 Google API 서비스 에이전트를 찾습니다.

    PROJECT_NUMBER@cloudservices.gserviceaccount.com
    

서비스 계정의 이메일 주소를 가져온 후 다음 섹션 중 하나로 이동하면 됩니다.

MIG에 프로젝트의 모든 이미지에 대한 액세스 권한 부여

이제 서비스 계정의 이메일 주소를 보유하고 있으므로 다른 프로젝트에 주소를 추가하고 Compute 이미지 사용자 역할(roles/compute.imageUser)을 부여할 수 있습니다.

콘솔

  1. Google Cloud Console에서 이미지 프로젝트의 IAM 페이지로 이동합니다.

    IAM으로 이동

  2. 신규 회원을 추가하려면 액세스 권한 부여를 클릭합니다.

  3. 새 주 구성원 필드에 서비스 계정 이메일 주소를 추가합니다.

  4. 역할 목록에서 Compute 위에 마우스 포인터를 올려놓고 Compute 이미지 사용자를 선택합니다.

  5. 선택사항: Google Cloud 리소스에 대한 사용자의 액세스를 추가로 제어하려면 조건부 역할 결합을 추가합니다.

  6. 저장을 클릭합니다.

  7. 서비스 계정의 프로젝트로 다시 전환합니다.

이제 이미지 프로젝트의 이미지를 기반으로 인스턴스 템플릿을 생성하고 인스턴스 템플릿을 기반으로 MIG를 만들 수 있습니다.

gcloud

gcloud projects add-iam-policy-binding 명령어를 사용하여 이미지 프로젝트에서 서비스 계정을 추가합니다.

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

다음을 바꿉니다.

  • PROJECT_ID: 공유할 이미지가 포함된 프로젝트의 ID
  • SERVICE_ACCOUNT_EMAIL: 서비스 계정의 이메일

이제 이미지 프로젝트의 이미지를 기반으로 인스턴스 템플릿을 생성하고 인스턴스 템플릿을 기반으로 MIG를 만들 수 있습니다.

API

  1. projects.getIamPolicy 메서드를 사용하여 이미지 프로젝트의 IAM 정책을 가져옵니다.

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

    PROJECT_ID를 이미지 프로젝트의 프로젝트 ID로 바꿉니다.

  2. 서비스 계정에 roles/compute.imageUser 역할을 부여하려면 텍스트 편집기로 정책을 수정합니다.

    {
      "bindings": [
         {
          "role": "roles/compute.imageUser",
          "members": [
            "serviceAccount:SERVICE_ACCOUNT_EMAIL"
          ]
        }
      ]
    }
    

    SERVICE_ACCOUNT_EMAIL을 서비스 계정 이메일로 바꿉니다.

  3. projects.setIamPolicy를 사용하여 업데이트된 정책을 작성합니다. 요청 본문에 이전 단계에서 업데이트한 IAM 정책을 제공합니다.

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

    PROJECT_ID를 이미지 프로젝트의 제품 ID로 바꿉니다.

    이제 이미지 프로젝트의 이미지를 기반으로 인스턴스 템플릿을 생성하고 인스턴스 템플릿을 기반으로 MIG를 만들 수 있습니다.

MIG에 프로젝트의 특정 이미지에 대한 액세스 권한 부여

이제 서비스 계정의 이메일 주소를 보유하고 있으므로 다른 프로젝트에 주소를 추가하고 특정 이미지의 Compute 이미지 사용자 역할(roles/compute.imageUser)을 부여할 수 있습니다.

콘솔

  1. Google Cloud 콘솔에서 이미지 프로젝트의 이미지 페이지로 이동합니다.

    이미지로 이동

  2. 공유하려는 이미지 옆에 있는 체크박스를 선택합니다.

  3. 권한 열을 펼치려면 정보 패널 표시를 클릭합니다.

  4. 권한 패널에서 주 구성원 추가를 클릭합니다.

  5. 새 주 구성원 필드에 이미지를 공유할 서비스 계정 이메일을 입력합니다. test123@example.domain.com).

  6. 역할 목록에서 Compute을 선택하고 Compute 이미지 사용자를 선택합니다.

  7. 선택사항: Google Cloud 리소스에 대한 사용자의 액세스를 추가로 제어하려면 조건부 역할 결합을 추가합니다.

  8. 저장을 클릭합니다.

  9. 서비스 계정의 프로젝트로 다시 전환합니다.

이제 이미지 프로젝트의 이미지를 기반으로 인스턴스 템플릿을 생성하고 인스턴스 템플릿을 기반으로 MIG를 만들 수 있습니다.

gcloud

서비스 계정에 특정 이미지에 대한 액세스 권한을 부여하려면 gcloud compute images add-iam-policy-binding 명령어를 사용합니다.

gcloud compute images add-iam-policy-binding IMAGE_NAME \
    --member='serviceAccount:SERVICE_ACCOUNT_EMAIL' \
    --role='roles/compute.imageUser'

다음을 바꿉니다.

  • IMAGE_NAME: 공유할 이미지 이름
  • SERVICE_ACCOUNT_EMAIL: 서비스 계정의 이메일

이제 이미지 프로젝트의 이미지를 기반으로 인스턴스 템플릿을 생성하고 인스턴스 템플릿을 기반으로 MIG를 만들 수 있습니다.

API

  1. images.getIamPolicy 메서드를 사용하여 이미지의 IAM 정책을 가져옵니다.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/images/IMAGE_NAME:getIamPolicy
    

    다음을 바꿉니다.

    • PROJECT_ID: 이미지 프로젝트의 프로젝트 ID
    • IMAGE_NAME: 공유할 이미지의 이름
  2. 서비스 계정에 roles/compute.imageUser 역할을 부여하려면 텍스트 편집기로 정책을 수정합니다.

    {
      "bindings": [
         {
          "role": "roles/compute.imageUser",
          "members": [
            "serviceAccount:SERVICE_ACCOUNT_EMAIL"
          ]
        }
      ]
    }
    

    SERVICE_ACCOUNT_EMAIL을 서비스 계정 이메일로 바꿉니다.

  3. images.setIamPolicy 메서드를 사용하여 업데이트된 정책을 작성합니다. 요청 본문에 이전 단계에서 업데이트한 IAM 정책을 제공합니다.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/images/IMAGE_NAME:setIamPolicy
    

    다음을 바꿉니다.

    • PROJECT_ID: 이미지 프로젝트의 프로젝트 ID
    • IMAGE_NAME: 공유할 이미지의 이름

    이제 이미지 프로젝트의 이미지를 기반으로 인스턴스 템플릿을 생성하고 인스턴스 템플릿을 기반으로 MIG를 만들 수 있습니다.

공유 이미지 및 스냅샷 사용 제어

이미지를 다른 사용자와 공유한 후에는 해당 사용자가 조직 내에서 리소스를 사용하는 위치를 제어할 수 있습니다. constraints/compute.storageResourceUseRestrictions 제약조건을 설정하여 사용자가 스토리지 리소스를 사용할 수 있는 프로젝트를 정의합니다.

이러한 제약 조건을 설정하려면 조직 정책을 수정할 권한이 있어야 합니다. 예를 들어 resourcemanager.organizationAdmin 역할에 이러한 제약조건을 설정할 권한이 있습니다.

  1. gcloud organization list 명령어를 사용하여 조직의 조직 ID를 찾습니다.

    gcloud organizations list
    
  2. gcloud resource-manager org-policies describe 명령어를 사용하여 조직의 기존 정책 설정을 가져옵니다.

    gcloud resource-manager org-policies describe \
        compute.storageResourceUseRestrictions \
        --organization ORGANIZATION_ID > org-policy.yaml
    

    ORGANIZATION_ID를 12자리 숫자로 된 조직 ID로 바꿉니다.

  3. 텍스트 편집기에서 org-policy.yaml 파일을 열고 compute.storageResourceUseRestrictions 제약조건을 수정합니다. 필요한 제한사항을 추가하거나 더 이상 필요하지 않은 제한사항을 삭제합니다. 파일 수정이 끝나면 변경사항을 저장합니다. 예를 들어 정책 파일에서 설정할 수 있는 제약조건 항목은 다음과 같습니다.

    constraint: compute.storageResourceUseRestrictions
    listPolicy:
      allowedValues:
        - under:organization/organization-id
    
  4. gcloud resource-manager org-policies set-policy 명령어를 사용하여 조직에 org-policy.yaml 파일을 적용합니다.

    gcloud resource-manager org-policies set-policy \
       --organization=ORGANIZATION_ID org-policy.yaml
    

    ORGANIZATION_ID를 12자리 숫자로 된 조직 ID로 바꿉니다.

조직 정책의 제약조건 구성을 완료한 후에는 이 제약조건을 테스트하여 제한사항이 원하는 대로 구현되는지 확인합니다.

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

다른 프로젝트의 하나 이상의 이미지에 대한 액세스 권한을 부여받은 경우 요청에 이미지 프로젝트를 지정하여 프로젝트의 이미지에 액세스할 수 있습니다.

예를 들어 다른 프로젝트의 공유 이미지를 사용하여 VM을 만들려면 다음 단계를 수행합니다.

콘솔

  1. Google Cloud 콘솔에서 인스턴스 만들기 페이지로 이동합니다.

    인스턴스 만들기로 이동

  2. VM의 이름을 지정합니다. 자세한 내용은 리소스 이름 지정 규칙을 참조하세요.
  3. 선택사항: 이 VM의 영역을 변경합니다. Compute Engine은 각 리전 내의 영역 목록 순서를 무작위로 지정하여 여러 영역에서 사용하도록 권장합니다.
  4. VM의 머신 구성을 선택합니다.
  5. 부팅 디스크 섹션에서 변경을 클릭하여 부팅 디스크를 구성한 후 다음을 수행합니다.
    1. 커스텀 이미지 탭을 선택합니다.
    2. 이미지 프로젝트를 선택하려면 프로젝트 선택을 클릭한 후 다음을 수행합니다.
      1. 이미지가 포함된 프로젝트를 선택합니다.
      2. 열기를 클릭합니다.
    3. 이미지 목록에서 가져올 이미지를 클릭합니다.
    4. 부팅 디스크의 유형과 크기를 선택합니다.
    5. 부팅 디스크 옵션을 확인하려면 선택을 클릭합니다.
  6. VM에 HTTP 또는 HTTPS 트래픽을 허용하려면 방화벽 섹션에서 HTTP 트래픽 허용이나 HTTPS 트래픽 허용을 선택합니다.

    Google Cloud 콘솔은 인스턴스에 네트워크 태그를 추가하고 tcp:80(HTTP) 또는 tcp:443(HTTPS)에서 들어오는 모든 트래픽을 허용하는 인그레스 방화벽 규칙을 만듭니다. 네트워크 태그는 방화벽 규칙을 VM과 연결합니다. 자세한 내용은 Virtual Private Cloud 문서의 방화벽 규칙 개요를 참조하세요.

  7. VM을 시작하고 만들려면 만들기를 클릭합니다.

gcloud

gcloud compute instances create command를 사용하여 VM을 만들고 --image--image-project 플래그를 사용하여 이미지 이름과 이미지가 상주하는 프로젝트를 지정합니다.

 gcloud compute instances create VM_NAME \
        --image=IMAGE \
        --image-project=IMAGE_PROJECT
    

다음을 바꿉니다.

  • VM_NAME: 새 VM의 이름입니다.
  • IMAGE: 이미지의 이름입니다.
  • IMAGE_PROJECT: 이미지가 속한 프로젝트입니다.

명령어가 정상적으로 실행되면 gcloud에서 새 VM의 속성으로 응답합니다.

    Created [https://compute.googleapis.com/compute/v1/projects/myproject/zones/us-central1-b/instances/example-instance].
    NAME                 ZONE           MACHINE_TYPE   PREEMPTIBLE  INTERNAL_IP  EXTERNAL_IP    STATUS
    example-instance     us-central1-b  e2-standard-2               10.240.0.4   104.198.53.60  RUNNING

API

API에서 공유 이미지를 사용하여 VM을 만드는 프로세스는 공개적으로 사용 가능한 이미지로 VM을 만드는 프로세스와 동일합니다. 공유 이미지에서 VM을 만들려면 instances.insert 메서드를 사용합니다.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances

{
   "machineType":"zones/MACHINE_TYPE_ZONE/machineTypes/MACHINE_TYPE",
   "name":"VM_NAME",

   "disks":[
      {
         "initializeParams":{
            "sourceImage":"projects/IMAGE_PROJECT/global/images/IMAGE"
         },
         "boot":true
      }
   ],

   "networkInterfaces":[
      {
         "network":"global/networks/NETWORK_NAME"
      }
   ],

   "shieldedInstanceConfig":{
      "enableSecureBoot":"ENABLE_SECURE_BOOT"
   }
}

다음을 바꿉니다.

  • PROJECT_ID: VM을 만들 프로젝트의 ID
  • ZONE: VM을 만들 영역
  • MACHINE_TYPE_ZONE: 새 VM에 사용할 머신 유형이 포함된 영역
  • MACHINE_TYPE: 새 VM의 머신 유형(사전 정의 또는 커스텀)
  • VM_NAME: 새 VM의 이름
  • IMAGE_PROJECT: 공유 이미지가 포함된 프로젝트의 이름
  • IMAGE 또는 IMAGE_FAMILY: 다음 중 하나를 지정합니다.
    • IMAGE: 공유 이미지 이름. 예를 들면 "sourceImage": "projects/finance-project-1234/global/images/finance-debian-image-v2"입니다.
    • IMAGE_FAMILY: 공유 이미지가 커스텀 이미지 계열의 일부로 생성된 경우 커스텀 이미지 계열을 지정합니다.

      이렇게 하면 커스텀 이미지 계열에서 지원 중단되지 않은 최신 OS 이미지로 VM이 생성됩니다. 예를 들어 "sourceImage": "projects/finance-project-1234/global/images/family/finance-debian-family"를 지정하면 Compute Engine이 커스텀 finance-debian-family 이미지 계열에서 최신 버전의 OS 이미지를 사용하여 VM을 만듭니다.

  • NETWORK_NAME: VM에 사용하려는 VPC 네트워크입니다. 기본 네트워크를 사용하도록 default를 지정할 수 있습니다.
  • ENABLE_SECURE_BOOT: 선택사항: 보안 VM 기능을 지원하는 이미지를 선택한 경우 기본적으로 Compute Engine은 vTPM(Virtual Trusted Platform Module)무결성 모니터링을 사용 설정합니다. Compute Engine은 기본적으로 보안 부팅을 사용 설정하지 않습니다.
    enableSecureBoottrue를 지정하면 Compute Engine은 보안 VM 기능 3가지를 모두 사용 설정하여 VM을 만듭니다. Compute Engine에서 VM을 시작한 후 보안 VM 옵션을 수정하려면 VM을 중지해야 합니다.

다른 프로젝트의 이미지에서 부팅 영구 디스크를 만들 수도 있습니다. 이미지로 부팅 디스크를 만드는 방법에 대한 자세한 내용은 독립형 부팅 영구 디스크 만들기를 참조하세요.

공유 이미지에 대한 액세스 권한 취소

사용자가 Compute Engine 리소스에 더 이상 액세스할 필요가 없는 경우 Google Cloud 콘솔, Google Cloud CLI 또는 Compute Engine API를 사용하여 액세스 권한을 취소합니다.

콘솔

  1. Google Cloud 콘솔에서 이미지 프로젝트의 이미지 페이지로 이동합니다.

    이미지로 이동

  2. 업데이트할 이미지 옆에 있는 체크박스를 선택합니다.

  3. 권한 열을 펼치려면 정보 패널 표시를 클릭합니다.

  4. 사용자를 삭제할 역할을 펼칩니다.

  5. 이 역할에서 사용자를 삭제하려면 삭제를 클릭합니다.

gcloud

이미지의 역할에서 사용자를 삭제하려면 gcloud compute images remove-iam-policy-binding 명령어--member--role 플래그와 함께 사용합니다.

gcloud compute images remove-iam-policy-binding IMAGE_NAME \
    --member='MEMBER' \
    --role='ROLE'

다음을 바꿉니다.

  • IMAGE_NAME: 이미지의 이름(예: my_image)
  • MEMBER: 삭제할 ID

    user|group|serviceAccount:email 또는 domain:domain 형식이어야 합니다. 예를 들면 다음과 같습니다.

    • user:test-user@gmail.com
    • group:admins@example.com
    • serviceAccount:test123@example.domain.com
    • domain:example.domain.com
  • ROLE: ID를 삭제할 역할

베타 버전인 리소스에 대한 액세스 권한을 취소하려면 대신 gcloud beta compute 명령어를 사용합니다.

API

  1. images.getIamPolicy 메서드로 기존 정책을 읽습니다.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/images/IMAGE_NAME:getIamPolicy
    

    다음을 바꿉니다.

    • PROJECT_ID: 이미지가 속한 프로젝트 ID입니다.
    • IMAGE_NAME: 이미지의 이름입니다.

    Compute Engine은 응답의 현재 정책을 반환합니다.

  2. 구성원과 연결된 역할을 삭제하려면 텍스트 편집기로 정책을 수정합니다.

  3. images.setIamPolicy 메서드를 사용하여 업데이트된 정책을 작성합니다. 요청 본문에 이전 단계에서 업데이트한 IAM 정책을 제공합니다.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/global/images/IMAGE_NAME:setIamPolicy
    

    다음을 바꿉니다.

    • PROJECT_ID: 이미지가 속한 프로젝트 ID입니다.
    • IMAGE_NAME: 이미지의 이름입니다.

다음 단계