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

사용자가 커스텀 이미지를 생성, 삭제, 사용 또는 공유할 수 있도록 하려면 적절한 IAM(Identity and Access Management) 역할을 부여해야 합니다. IAM을 사용하여 다음을 수행합니다.

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

시작하기 전에

제한사항

사용자에게 이미지에 대한 allUsers 역할을 부여할 수 없습니다.

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

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

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

  • compute.images.create를 통해 새 이미지 생성
  • compute.images.list를 통해 프로젝트의 이미지 나열
  • compute.disks.use를 통해 디스크에서 이미지 생성
  • compute.disks.list를 통해 사용자에게 프로젝트의 디스크 목록을 볼 수 있는 권한 부여

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

Console

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

    IAM 및 관리자 페이지로 이동

  2. 추가 버튼을 클릭해 새 구성원을 추가합니다.

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

  4. 역할 선택 목록에서 Compute Engine > Compute 스토리지 관리자를 선택하거나, 커스텀 역할을 생성한 경우에는 커스텀 역할을 선택합니다.

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

gcloud

조직 수준에서 roles/compute.storageAdmin 역할을 부여하려면 다음을 수행합니다.

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

프로젝트 수준에서 roles/compute.storageAdmin 역할을 부여하려면 다음을 수행합니다.

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입니다. user|group|serviceAccount:email 또는 domain:domain 형식이어야 합니다. 예를 들면 다음과 같습니다.
    • user:test-user@gmail.com
    • group:admins@example.com
    • serviceAccount:test123@example.domain.com
    • domain:example.domain.com

API

API를 통해 직접 IAM 정책을 수정하려면 다음 안내를 따르세요.

  1. getIamPolicy 메서드로 기존 정책을 읽습니다. 프로젝트의 경우 다음 URL을 사용합니다. 여기서 project-id를 프로젝트 ID로 바꿉니다. 예를 들면 my-project-1입니다.

    POST https://cloudresourcemanager.googleapis.com/v1/projects/project-id:getIamPolicy

    조직의 경우 다음 URL을 사용합니다. 여기서 organization-id를 12자리 숫자로 된 조직 ID로 바꿉니다 예를 들면 123456578920입니다.

    POST https://cloudresourcemanager.googleapis.com/v1/organizations/organization-id:getIamPolicy

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

  2. 텍스트 편집기로 정책을 수정하여 구성원과 연결된 역할을 추가 또는 삭제합니다. 예를 들어 1email@example.com에 roles/compute.storageAdmin 역할을 부여하려면 다음 새 binding을 정책에 추가합니다.

    {
      "members": [
        "group:admins@example.com"
      ],
      "role":"roles/compute.storageAdmin"
    }
    
  3. setIamPolicy()로 업데이트된 정책을 작성합니다.

    POST https://cloudresourcemanager.googleapis.com/v1/projects/project-id:setIamPolicy

    project-id를 프로젝트 ID로 바꿉니다. 요청 본문에 이전 단계에서 업데이트한 IAM 정책을 제공합니다.

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

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

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

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

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

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

Console

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

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

    이미지 페이지로 이동

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

  3. 오른쪽의 권한 패널에서 구성원 추가를 클릭합니다.

  4. 이미지를 공유할 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
  5. 역할 목록에서 Compute Engine을 가리키고 스토리지 관리자를 선택하거나 커스텀 목록에서 커스텀 역할을 선택합니다.

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

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

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

    IAM 및 관리자 페이지로 이동

  2. 페이지 상단에서 추가 버튼을 클릭합니다.

  3. 새 구성원 필드에서 액세스 권한을 부여할 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
  4. 역할 목록에서 Compute Engine을 가리키고 스토리지 관리자를 선택하거나 커스텀 목록에서 커스텀 역할을 선택합니다.

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

gcloud

조직 수준에서 이미지를 삭제할 권한을 사용자에게 부여하려면 다음을 수행하세요.

gcloud organizations add-iam-policy-binding organization-id \
    --member='member' \
    --role='role'

프로젝트 수준에서 이미지를 삭제할 권한을 부여하려면 다음을 수행하세요.

gcloud projects add-iam-policy-binding project-id \
    --member='member' \
    --role='role'

특정 이미지를 삭제할 권한을 부여하려면 다음을 수행하세요.

gcloud 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입니다. 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에 할당할 역할입니다(예: roles/compute.storageAdmin 또는 roles/customImageDeletionRole과 같은 커스텀 역할).

API

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

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

    POST https://cloudresourcemanager.googleapis.com/v1/projects/project-id:getIamPolicy

    project-id를 프로젝트 ID로 바꿉니다.

    조직의 경우 다음을 사용하세요.

    POST https://cloudresourcemanager.googleapis.com/v1/organizations/organization-id:getIamPolicy

    organization-id를 12자리 숫자로 된 조직 ID로 바꿉니다.

    특정 이미지의 경우 다음을 사용하세요.

    POST https://compute.googleapis.com/compute/v1/projects/project-id/global/images/image-name:getIamPolicy

    project-id를 프로젝트 ID로, image-name을 이미지 이름으로 바꿉니다.

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

  2. 텍스트 편집기로 정책을 수정하여 구성원과 연결된 역할을 추가 또는 삭제합니다. 예를 들어 email@example.com에 roles/compute.storageAdmin 역할을 부여하려면 다음 새 binding을 정책에 추가합니다.

    {
      "members": [
        "user:email@example.com"
      ],
      "role":"roles/compute.storageAdmin"
    }
    
  3. setIamPolicy()로 업데이트된 정책을 작성합니다. 예를 들면 다음과 같습니다.

    POST https://cloudresourcemanager.googleapis.com/v1/projects/project-id:setIamPolicy

    project-id를 프로젝트 ID로 바꿉니다. 요청 본문에 이전 단계에서 업데이트한 IAM 정책을 제공합니다.

조직 내 커스텀 이미지 공유

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

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

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

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

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

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

Console

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

    이미지 페이지로 이동

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

  3. 오른쪽의 권한 패널에서 구성원 추가를 클릭합니다.

  4. 이미지를 공유할 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
  5. 역할 목록의 Compute Engine에서 이미지 사용자 또는 스토리지 관리자를 선택하거나 커스텀 역할을 선택합니다.

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

사용자가 Cloud Console에서 공유 커스텀 이미지를 실행하도록 하려면 사용자를 이미지 프로젝트에 프로젝트 뷰어로 추가해야 합니다. 이렇게 하면 공유 이미지가 이미지 선택 목록에 표시됩니다.

  1. Google Cloud Console에서 IAM 및 관리자 페이지로 이동합니다.

    IAM 및 관리자 페이지로 이동

  2. 페이지 상단에서 추가 버튼을 클릭합니다.

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

  4. 역할 목록에서 프로젝트를 가리키고 뷰어를 선택합니다.

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

gcloud

gcloud 명령줄 도구를 사용하여 특정 이미지의 IAM 정책을 업데이트합니다.

gcloud compute images add-iam-policy-binding image-name \
    --member='member' \
    --role='role'

다음을 바꿉니다.

  • image-name: 이미지의 이름입니다. 예를 들면 custom-centos-8입니다.
  • 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: roles/compute.imageUser, roles/compute.storageAdmin 또는 커스텀 역할 등 이 ID를 할당하는 역할입니다.

필요한 경우 images.list 요청에서 사용자가 공유 이미지를 볼 수 있도록 하려면 사용자를 이미지 프로젝트에 프로젝트 뷰어로 추가합니다. 사용자가 공유 이미지 목록을 볼 필요가 없는 경우에는 이 단계를 건너뜁니다.

gcloud compute projects add-iam-policy-binding project-id \
    --member='member' \
    --role='roles/viewer'

API

API를 통해 직접 IAM 정책을 수정하려면 다음 안내를 따르세요.

  1. 리소스의 해당 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|group|serviceAccount:email 또는 domain:domain 형식을 사용하여 사용자를 추가합니다. 예를 들면 user:test-user@gmail.com, group:admins@example.com, serviceAccount:test123@example.domain.com, domain:example.domain.com입니다. 예를 들어 email@example.comroles/compute.imageUser 역할을 부여하려면 다음을 추가합니다.

    {
      "members": [
        "user:email@example.com"
      ],
      "role":"roles/compute.imageUser"
    }
    
  3. setIamPolicy()로 업데이트된 정책을 작성합니다.

    POST https://compute.googleapis.com/compute/v1/projects/project-id/global/images/image-name:setIamPolicy

    다음을 바꿉니다.

    • project-id: 이 이미지가 속한 프로젝트의 프로젝트 ID입니다.
    • image-name: 이미지의 이름입니다.

    요청 본문에 이전 단계에서 업데이트한 IAM 정책을 제공합니다.

필요한 경우 images.list 요청에서 사용자가 공유 이미지를 볼 수 있도록 하려면 사용자를 이미지 프로젝트에 프로젝트 뷰어로 추가합니다. 사용자가 공유 이미지 목록을 볼 필요가 없는 경우에는 이 단계를 건너뜁니다.

POST https://cloudresourcemanager.googleapis.com/v1/projects/project-id:setIamPolicy

조직 간 커스텀 이미지 공유

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

Console

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

    이미지 페이지로 이동

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

  3. 오른쪽의 권한 패널에서 구성원 추가를 클릭합니다.

  4. 이미지를 공유할 그룹의 이메일 주소를 입력합니다. 예를 들면 group:admins@example.com입니다.

  5. 역할 목록에서 Compute Engine을 가리키고 이미지 사용자를 선택합니다.

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

사용자가 Cloud Console에서 공유 커스텀 이미지를 실행하도록 하려면 사용자를 이미지 프로젝트에 프로젝트 뷰어로 추가해야 합니다. 이렇게 하면 공유 이미지가 이미지 선택 목록에 표시됩니다.

  1. Google Cloud Console에서 IAM 및 관리자 페이지로 이동합니다.

    IAM 및 관리자 페이지로 이동

  2. 페이지 상단에서 추가 버튼을 클릭합니다.

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

  4. 역할 목록에서 프로젝트를 가리키고 뷰어를 선택합니다.

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

gcloud

gcloud 명령줄 도구를 사용합니다.

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 compute projects add-iam-policy-binding project-id \
    --member='member' \
    --role='roles/viewer'

API

API를 통해 이미지의 IAM 정책을 직접 수정하려면 다음 안내를 따르세요.

  1. 리소스의 해당 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|group|serviceAccount:email 또는 domain:domain 형식을 사용하여 사용자를 추가합니다. 예를 들면 user:test-user@gmail.com, group:admins@example.com, serviceAccount:test123@example.domain.com, domain:example.domain.com입니다. 예를 들어 email@example.com에 roles/compute.imageUser 역할을 부여하려면 다음을 추가합니다.

    {
      "members": [
        "user:email@example.com"
      ],
      "role":"roles/compute.imageUser"
    }
    
  3. setIamPolicy()로 업데이트된 정책을 작성합니다.

    POST https://compute.googleapis.com/compute/v1/projects/project-id/global/images/image-name:setIamPolicy

    다음을 바꿉니다.

    • project-id: 이 이미지가 속한 프로젝트의 프로젝트 ID입니다.
    • image-name: 이미지의 이름입니다.

    요청 본문에 이전 단계에서 업데이트한 IAM 정책을 제공합니다.

    필요한 경우 images.list 요청에서 사용자가 공유 이미지를 볼 수 있도록 하려면 사용자를 이미지 프로젝트에 프로젝트 뷰어로 추가합니다. 사용자가 공유 이미지 목록을 볼 필요가 없는 경우에는 이 단계를 건너뜁니다.

    POST https://cloudresourcemanager.googleapis.com/v1/projects/project-id:setIamPolicy

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

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

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

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

gcloud

다음 명령어에서 image-name을 리소스 이름(예: my_image)으로 바꿉니다.

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

API

API를 통해 직접 IAM 정책을 수정하려면 다음 안내를 따르세요.

  1. 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()로 업데이트된 정책을 작성합니다.

    POST https://compute.googleapis.com/compute/v1/projects/project-id/global/images/image-name:setIamPolicy

    다음을 바꿉니다.

    • project-id: 이 이미지가 속한 프로젝트의 프로젝트 ID입니다.
    • image-name: 이미지의 이름입니다.

    요청 본문에 이전 단계에서 업데이트한 IAM 정책을 제공합니다.

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

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

다른 프로젝트의 이미지를 사용하여 관리형 인스턴스 그룹을 만들려면 관리형 인스턴스 그룹을 만들 프로젝트에 속한 API 서비스 계정에 roles/compute.imageUser 역할을 추가합니다. 예를 들면 다음과 같습니다.

  1. 프로젝트 A는 프로젝트 B가 소유한 이미지를 사용하여 관리형 인스턴스 그룹을 만들려고 합니다.
  2. 프로젝트 B는 프로젝트 A의 서비스 계정에 roles/compute.imageUser 역할을 부여합니다.
  3. 이제 프로젝트 A는 프로젝트 B의 이미지를 사용하여 관리형 인스턴스 그룹을 만들 수 있습니다.

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

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

서비스 계정의 이메일 주소를 가져오려면 다음 단계를 따르세요.

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

    IAM 페이지로 이동

  2. 메시지가 나타나면 목록에서 프로젝트를 선택합니다.
  3. 다음과 같은 형식의 이메일 주소를 사용하는 Google API 서비스 계정을 찾습니다.

    project-number@cloudservices.gserviceaccount.com
    
  4. 위의 이메일 주소를 기록합니다.

서비스 계정의 이메일 주소를 검색한 후 다음 링크 중 하나를 클릭합니다.

관리형 인스턴스 그룹에 프로젝트의 모든 이미지에 대한 액세스 권한 부여

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

Console

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

    IAM 및 관리자 페이지로 이동

  2. 새 구성원을 추가하려면 추가를 클릭합니다.

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

  4. 역할 목록에서 Compute를 가리키고 Compute 이미지 사용자를 선택합니다.

  5. 저장을 클릭합니다.

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

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

gcloud

다음과 같이 이미지 프로젝트에서 서비스 계정을 추가합니다.

gcloud projects add-iam-policy-binding project-id \
  --member 'serviceAccount:service-account-email' --role 'roles/compute.imageUser'

다음을 바꿉니다.

  • project-id: 공유할 이미지가 포함된 프로젝트의 ID입니다.
  • service-account-email: 서비스 계정의 이메일입니다.

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

API

  1. 이미지 프로젝트의 IAM 정책을 가져오고 project-id를 이미지 프로젝트의 프로젝트 ID로 바꿉니다.

    POST https://cloudresourcemanager.googleapis.com/v1/projects/project-id:getIamPolicy

  2. 텍스트 편집기를 사용하여 정책을 수정하여 서비스 계정에 roles/compute.imageUser 역할을 부여합니다. 예를 들면 다음과 같습니다.

    {
      "bindings": [
         {
          "role": "roles/compute.imageUser",
          "members": [
            "serviceAccount:service-account-email"
          ]
        }
      ]
    }
    

    service-account-email을 서비스 계정 이메일로 바꿉니다.

  3. 업데이트된 정책을 작성합니다.

    POST https://cloudresourcemanager.googleapis.com/v1/projects/project-id:setIamPolicy

    project-id를 이미지 프로젝트의 제품 ID로 바꿉니다. 요청 본문에 이전 단계에서 업데이트한 IAM 정책을 제공합니다.

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

관리형 인스턴스 그룹에 프로젝트의 특정 이미지에 대한 액세스 권한 부여

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

Console

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

    이미지 페이지로 이동

  2. 공유하려는 이미지를 선택합니다.

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

  4. 서비스 계정 이메일을 입력합니다.

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

  6. 저장을 클릭합니다.

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

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

gcloud

서비스 계정에 특정 이미지에 대한 액세스 권한을 부여하려면 다음을 수행하세요.

gcloud images add-iam-policy-binding image-name \
  --member 'serviceAccount:service-account-email' \
  --role 'roles/compute.imageUser'

다음을 바꿉니다.

  • image-name: 공유할 이미지 이름입니다.
  • service-account-email: 서비스 계정의 이메일입니다.

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

API

  1. 이미지의 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. 업데이트된 정책을 작성합니다.

    POST https://compute.googleapis.com/compute/v1/projects/project-id/global/images/image-name:setIamPolicy

    다음을 바꿉니다.

    • project-id: 이미지 프로젝트의 프로젝트 ID입니다.
    • image-name: 공유할 이미지의 이름입니다.

    요청 본문에 이전 단계에서 업데이트한 IAM 정책을 제공합니다.

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

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

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

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

  1. 조직의 조직 ID를 확인합니다.

    gcloud organizations list
    
  2. 조직의 기존 정책 설정을 가져옵니다. organization-id를 12자리 숫자로 된 조직 ID로 바꿉니다.

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

    constraint: compute.storageResourceUseRestrictions
    listPolicy:
      allowedValues:
        - under:organization/organization-id
    
  4. 조직에 policy.yaml 파일을 적용합니다. organization-id를 12자리 숫자로 된 조직 ID로 바꿉니다.

    gcloud beta resource-manager org-policies set-policy \
        --organization organization-id org-policy.yaml
    

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

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

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

이미지를 사용하여 인스턴스 등의 새 리소스를 만드는 방법은 인스턴스 만들기 및 시작을 참조하세요.

예를 들어 다음 명령어를 실행하면 database-images 프로젝트에 포함된 database-image-a라는 이름의 이미지를 사용하여 인스턴스가 생성됩니다.

gcloud compute instances create test-instance \
    --image database-image-a --image-project database-images

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

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

사용자가 Compute Engine 리소스에 더 이상 액세스할 필요가 없는 경우 Google Cloud Console, gcloud 명령줄 도구 또는 Compute Engine API를 사용하여 액세스 권한을 취소합니다.

Console

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

    이미지 페이지로 이동

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

  3. 정보 패널 표시를 클릭하여 권한 열을 펼칩니다.

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

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

gcloud

이미지의 역할에서 사용자를 삭제하려면 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

API를 통해 직접 IAM 정책을 수정하려면 다음 안내를 따르세요.

  1. 리소스의 해당 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. setIamPolicy()로 업데이트된 정책을 작성합니다.

    POST https://compute.googleapis.com/compute/v1/projects/project-id/zones/global/images/image-name:setIamPolicy

    다음을 바꿉니다.

    • project-id: 이미지가 속한 프로젝트 ID입니다.
    • image-name: 이미지의 이름입니다.

      요청 본문에 이전 단계에서 업데이트한 IAM 정책을 제공합니다.

다음 단계