이미지 및 스냅샷 공유

이미지와 스냅샷을 프로젝트 또는 조직 외부의 사용자와 공유할 수 있습니다. 다른 프로젝트 및 조직에서 이러한 리소스에 대한 액세스 권한이 있는 사용자는 해당 리소스를 사용하여 작업을 완료할 수 있습니다. 예를 들어 다른 프로젝트의 이미지 또는 스냅샷에 대한 읽기 액세스 권한을 부여받은 사용자는 자신의 프로젝트에서 해당 리소스를 사용하여 영구 디스크를 만들 수 있습니다. 이미지와 스냅샷에 대한 읽기 액세스 권한을 공유하려면 IAM 역할을 사용하세요.

경우에 따라 승인된 사용자에게 이러한 스토리지 리소스에 대한 액세스 권한을 부여하되, 해당 리소스를 현재 조직 또는 특정 프로젝트 내에서만 사용하도록 해야 할 수 있습니다. 사용자가 액세스 권한을 부여받은 이미지와 스냅샷을 사용하여 리소스를 만들 수 있는 프로젝트를 제한하려면 스토리지 리소스 사용량 제약조건을 조직 정책으로 설정하세요.

IAM 역할에 대해 자세히 알아보려면 IAM 문서를 읽어보세요.

전체 프로젝트 대신 이미지와 같은 특정 리소스에 대한 액세스 권한을 부여할 수 있도록 하는 리소스 수준의 IAM 정책에 대해 알아보려면 Compute Engine 리소스에 액세스 권한 부여를 참조하세요.

시작하기 전에

제한사항

스토리지 리소스를 공유할 때는 다음과 같은 제한사항이 적용됩니다.

  • 이미지나 스냅샷에 대한 액세스 권한을 허용하는 allAuthenticatedUsers 또는 allUsers에는 역할을 부여할 수 없습니다.

  • constraints/compute.storageResourceUseRestrictions 제약조건은 조직 수준에서만 설정할 수 있습니다.

  • 프로젝트 외부의 리소스로 이미지 또는 스냅샷을 만들려면 Compute Engine API를 사용해야 합니다. 예를 들어 이미지나 스냅샷의 경로를 지정해야 하는 메서드를 실행할 때 원격 프로젝트의 이미지 및 스냅샷을 참조할 수 있습니다. 이러한 메서드의 몇 가지 예는 다음과 같습니다.

프로젝트 및 조직 간에 스토리지 리소스 공유

리소스, 프로젝트, 폴더 또는 조직 수준에서 다음 IAM 역할 또는 권한을 다른 사용자에게 부여하여 이미지 및 스냅샷에 대한 액세스 권한을 공유할 수 있습니다.

  • 이미지: roles/compute.imageUser 역할 또는 compute.images.useReadOnly 권한
  • 스냅샷: roles/compute.storageAdmin 역할 또는 compute.snapshots.useReadOnly 권한

이러한 역할 및 권한을 사용하면 이미지와 스냅샷을 소유한 프로젝트 외부의 다른 팀 구성원과 이미지 및 스냅샷을 공유할 수 있습니다. 예를 들어 회사의 특정 프로젝트에 회사의 나머지 프로젝트에서 사용하기에 적합한 이미지가 포함되어 있을 수 있습니다. 팀 구성원에게 프로젝트 수준의 roles/compute.imageUser 역할을 부여하여 이들이 자체 프로젝트에서 이러한 이미지를 사용하도록 할 수 있습니다.

이미지 공유 역할을 부여하려면 Console, gcloud 명령줄 도구 또는 API를 사용합니다. IAM 사용 방법을 알아보려면 IAM 문서를 읽어보세요.

콘솔

  1. GCP 콘솔의 IAM 페이지로 이동합니다.

    IAM 페이지로 이동

  2. 메시지가 나타나면 프로젝트를 선택합니다.
  3. 새 사용자를 추가하는 경우:
    1. 페이지 상단의 추가를 클릭합니다.
    2. 액세스 권한을 부여할 계정의 이메일 주소를 하나 이상 지정합니다.
    3. 구성원에게 역할을 하나 이상 부여합니다.
      • 이미지: 역할 선택기에서 Compute Engine > Compute 이미지 사용자를 선택합니다.
      • 스냅샷: 역할 선택기에서 Compute Engine > Compute Storage 관리자를 선택합니다.
  4. 변경사항을 저장합니다.

gcloud

gcloud 명령줄 도구를 사용하여 이미지 또는 이미지 프로젝트의 Cloud IAM 정책에 바인딩을 추가합니다. 다음은 프로젝트에 바인딩을 추가하는 예시입니다.

gcloud projects add-iam-policy-binding [PROJECT_ID] \
    --member [MEMBER_TYPE]:[ACCOUNT] --role [ROLE]

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

  • [PROJECT_ID]는 공유하려는 이미지가 포함된 프로젝트의 ID입니다.
  • [MEMBER_TYPE]은 액세스 권한을 부여할 계정의 유형입니다. 예를 들어 개별 사용자에는 user, 서비스 계정에는 serviceAccount, Google 그룹에는 group을 사용합니다.
  • [ACCOUNT]는 이 역할을 부여할 계정의 이메일 주소입니다. 예를 들어 서비스 계정이라면 my-sa@my-project-123.iam.gserviceaccount.com과 같은 이메일 주소를 사용할 수 있습니다.
  • [ROLE]은 사용자에게 부여할 역할입니다. 이미지의 경우 roles/compute.imageUser를 지정합니다. 스냅샷은 roles/compute.storageAdmin을 지정합니다.

예를 들어 다음은 john@example.comroles/compute.imageUser 역할을 부여하여 이 계정이 database-images라는 프로젝트의 이미지에 액세스할 수 있도록 하는 예입니다.

gcloud projects add-iam-policy-binding database-images \
    --member user:john@example.com --role roles/compute.imageUser

API

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

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

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

{
   "policy": {
       "version": "0",
       "bindings": [
       {
           "role": "roles/compute.admin",
           "members": [
               "user:example@gmail.com"
           ]
       },
       {
           "role": "roles/compute.imageUser",
           "members": [
               "user:john@gmail.com"
           ]
       }
       ]
   }

}

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

Compute Engine에서는 인스턴스 그룹을 관리형 또는 비관리형 인스턴스 그룹으로 만들 수 있습니다. 관리형 인스턴스 그룹을 만드는 경우 Compute Engine은 Google API 서비스 계정을 사용해 Compute Engine API를 호출하고 비정상 인스턴스를 다시 만들거나 인스턴스를 업데이트하는 등 그룹과 관련된 작업을 수행합니다. 다른 프로젝트의 이미지를 사용해 관리형 인스턴스 그룹을 만들려면 관리형 인스턴스 그룹을 만드는 프로젝트에 속한 API 서비스 계정에 compute.imageUser 역할을 부여하면 됩니다.

예를 들어 프로젝트 A에서 프로젝트 B에 포함된 이미지를 사용해 관리형 인스턴스 그룹을 만들어야 하는 경우, 프로젝트 B의 소유자가 프로젝트 A의 Google API 서비스 계정에 프로젝트 B의 compute.imageUser 역할을 부여해야 합니다. 그러면 해당 계정에서 프로젝트 B의 이미지를 사용해 프로젝트 A의 관리형 인스턴스 그룹을 만들 수 있습니다.

compute.imageUser 역할을 부여한 후 해당 그룹의 인스턴스 템플릿을 만들 때 특정 이미지의 URL을 제공할 수 있습니다.

서비스 계정 이메일을 가져오고 계정에 액세스 권한을 부여하려면 다음 단계를 따르세요.

  1. 관리형 인스턴스 그룹을 만들 프로젝트의 GCP Console에서 IAM 페이지로 이동합니다.

    IAM 페이지로 이동

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

    [PROJECT_NUMBER]@cloudservices.gserviceaccount.com
    
  4. 위의 이메일 주소를 적어 둡니다. 그런 다음 이미지를 소유한 프로젝트의 액세스 권한을 계정에 부여합니다.

    콘솔

    1. Google Cloud Platform 콘솔에서 액세스할 이미지가 포함된 프로젝트의 IAM 페이지로 이동합니다.

      IAM 페이지로 이동

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

    gcloud

    gcloud 명령줄 도구를 사용하여 이미지 또는 이미지 프로젝트의 Cloud IAM 정책에 바인딩을 추가합니다. 다음은 프로젝트 수준에서 바인딩을 추가하는 예시입니다.

    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에서 다음 URL에 POST 요청을 전송합니다. 여기서 [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"
               ]
           }
           ]
       }
    }
    

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

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

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

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

    gcloud organizations list
    
  2. 조직의 기존 정책 설정을 확인합니다.

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

    여기서 [ORGANIZATION_ID]는 조직 ID입니다.

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

    constraint: compute.storageResourceUseRestrictions
    listPolicy:
      allowedValues:
        - under:organization/[ORGANIZATION_ID]
    
  4. 조직에 policy.yaml 파일을 적용합니다.

    gcloud beta resource-manager org-policies set-policy
    --organization [ORGANIZATION_ID] org-policy.yaml
    

    여기서 [ORGANIZATION_ID]는 조직 ID입니다.

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

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

다른 사용자가 자신에게 compute.imageUser 역할을 부여한 경우 해당 프로젝트의 이미지에 액세스하려면 요청에 이미지 프로젝트를 지정하면 됩니다. 예를 들어 자신이 사용할 수 있는 이미지 목록을 가져오는 방법은 다음과 같습니다.

gcloud compute images list --project [IMAGE_PROJECT]

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

예를 들어 다음 명령어는 database-images 프로젝트에 포함된 database-image-a라는 이름의 이미지를 사용해 인스턴스를 만듭니다.

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

이와 유사한 방법으로 이미지를 사용해 영구 디스크를 만들 수 있습니다. 이미지로 디스크를 만드는 방법은 독립형 루트 영구 디스크 만들기를 참조하세요.

다음 단계

이 페이지가 도움이 되었나요? 평가를 부탁드립니다.

다음에 대한 의견 보내기...

Compute Engine 문서