Compute Engine 리소스에 대한 액세스 관리

이 가이드에서는 프로젝트, 폴더 또는 조직 등의 상위 리소스 대신 특정 Compute Engine 리소스에 대한 액세스 권한을 부여하여 최소 권한 원칙을 적용하는 방법을 설명합니다.

리소스에 ID 및 액세스 관리(IAM) 정책을 설정하여 리소스에 대한 액세스 권한을 부여합니다. 이 정책은 사용자 또는 서비스 계정 같은 하나 이상의 구성원을 하나 이상의 역할에 결합합니다. 각 역할에는 구성원이 리소스와 상호작용할 수 있는 권한 목록이 포함됩니다.

상위 리소스(예: 프로젝트)에 대한 액세스 권한을 부여하면 모든 하위 리소스(예: 해당 프로젝트의 모든 VM)에 대한 액세스 권한이 암시적으로 부여됩니다. 리소스에 대한 액세스를 제한하려면 가급적 프로젝트 수준 이상이 아니라 하위 수준 리소스에 IAM 정책을 설정합니다.

예를 들어 Compute Engine과 관련없는 리소스에 대한 액세스 권한을 부여, 변경, 취소하는 방법에 대한 일반적인 정보는 리소스에 대한 액세스 권한 부여, 변경, 취소에 대한 IAM 문서를 참조하세요.

시작하기 전에

지원되는 리소스

Compute Engine에서는 다음 리소스에 리소스 수준 액세스 제어를 지원합니다.

다른 Compute Engine 리소스에서는 리소스 수준 액세스 제어를 지원하지 않으므로, 프로젝트, 폴더 또는 조직 수준에서 다른 유형의 리소스 액세스를 관리해야 합니다. 조직, 폴더 또는 프로젝트에 대한 자세한 내용은 리소스 계층 구조를 참조하세요.

Compute Engine 리소스에 대한 액세스 권한 부여

사용자에게 IAM 역할을 부여하기 전에 특정 리소스에 대해 부여할 수 있는 역할을 확인합니다. 자세한 내용은 리소스에 대해 부여할 수 있는 역할 보기를 참조하세요.

사용자에게 특정 Compute Engine 리소스에 액세스할 수 있는 권한을 부여하려면 리소스에 IAM 정책을 설정합니다.

Console

  1. Google Cloud Console에서 권한을 추가할 해당 리소스 페이지로 이동합니다.
  2. 업데이트할 리소스 옆에 있는 체크박스를 선택합니다.
  3. 정보 패널 표시를 클릭하여 권한 열을 펼칩니다.
  4. 멤버 추가 필드에서 구성원을 한 명 이상 추가합니다.
  5. 역할 선택 목록에서 역할을 한 개 이상 선택합니다.
  6. 추가를 클릭하여 변경사항을 저장합니다.

gcloud

리소스에 대한 역할을 구성원에게 부여하려면 리소스의 add-iam-policy-binding 하위 명령어를 --member--role 플래그와 함께 사용합니다.

gcloud compute resource-type add-iam-policy-binding resource-name \
    --member='member' \
    --role='role'

다음을 바꿉니다.

  • resource-type: 리소스 유형입니다. 유효한 값으로 다음이 포함되어 있습니다.
    • disks
    • images
    • instances
    • instance-templates
    • regionDisks
    • sole-tenancy node-groups
    • sole-tenancy node-templates
    • snapshots
  • resource-name: 리소스 이름입니다. 예를 들면 my_instance입니다.
  • 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 메서드로 기존 정책을 읽습니다. 예를 들어 다음 HTTP 요청은 VM의 IAM 정책을 읽습니다.

    POST https://compute.googleapis.com/compute/v1/projects/project-id/zones/zone/instances/instance:getIamPolicy

    다음을 바꿉니다.

    • project-id: 이 VM이 속한 프로젝트 ID입니다.
    • zone: VM의 영역입니다. 리전 또는 전역 리소스의 경우 zones/zoneregions/region 또는 global로 바꿉니다.
    • instance: VM 인스턴스 이름입니다.

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

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

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

    POST https://compute.googleapis.com/compute/v1/projects/project-id/zones/zone/instances/instance:setIamPolicy

    다음을 바꿉니다.

    • project-id: 이 VM이 속한 프로젝트 ID입니다.
    • zone: VM의 영역입니다. 리전 또는 전역 리소스의 경우 zones/zoneregions/region 또는 global로 바꿉니다.
    • instance: VM 인스턴스 이름입니다.

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

리소스에 대한 액세스 권한 취소

구성원이 Compute Engine 리소스에 더 이상 액세스할 필요가 없으면 액세스를 취소하는 것이 좋습니다.

Console

  1. Google Cloud Console에서 권한을 추가할 해당 리소스 페이지로 이동합니다.
  2. 업데이트할 리소스 옆에 있는 체크박스를 선택합니다.
  3. 정보 패널 표시를 클릭하여 권한 열을 펼칩니다.
  4. 구성원을 제거하려는 리소스의 역할 카드를 클릭합니다. 그러면 카드가 펼쳐지고 리소스에 대한 역할이 있는 구성원이 표시됩니다.
  5. 삭제를 클릭하여 역할에서 구성원을 삭제합니다.

gcloud

리소스의 구성원에서 역할을 삭제하려면 리소스의 remove-iam-policy-binding 하위 명령어를 --member--role 플래그와 함께 사용합니다.

gcloud compute resource-type remove-iam-policy-binding resource-name \
    --member='member' \
    --role='role'

다음을 바꿉니다.

  • resource-type: 리소스 유형입니다. 유효한 값으로 다음이 포함되어 있습니다.
    • disks
    • images
    • instances
    • instance-templates
    • regionDisks
    • sole-tenancy node-groups
    • sole-tenancy node-templates
    • snapshots
  • resource-name: 리소스 이름입니다. 예를 들면 my_instance입니다.
  • 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 메서드로 기존 정책을 읽습니다. 예를 들어 다음 HTTP 요청은 VM의 IAM 정책을 읽습니다.

    POST https://compute.googleapis.com/compute/v1/projects/project-id/zones/zone/instances/instance:getIamPolicy

    다음을 바꿉니다.

    • project-id: 이 VM 인스턴스의 프로젝트 ID입니다.
    • zone: VM의 영역입니다. 리전 또는 전역 리소스의 경우 zones/zoneregions/region 또는 global로 바꿉니다.
    • instance: VM 인스턴스 이름입니다.

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

  2. 텍스트 편집기로 정책을 수정하여 연결된 역할에서 구성원을 삭제합니다. 예를 들어 compute.admin 역할에서 email@example.com을 삭제합니다.

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

    POST https://compute.googleapis.com/compute/v1/projects/project-id/zones/zone/instances/instance:setIamPolicy

    다음을 바꿉니다.

    • project-id: 이 VM이 속한 프로젝트 ID입니다.
    • zone: VM의 영역입니다. 리전 또는 전역 리소스의 경우 zones/zoneregions/region 또는 global로 바꿉니다.
    • instance: VM 인스턴스 이름입니다.

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

호출자의 권한 유무 테스트

ID에 어떠한 권한이 있는지 모르는 경우 testIamPermissions API 메서드를 사용하여 ID에 사용 가능한 권한을 확인합니다.

이 메서드는 리소스 URL과 권한 집합을 입력 매개변수로 취하고 호출자에게 허용된 권한 집합을 반환합니다. 모든 지원되는 리소스에 이 메서드를 사용할 수 있습니다.

일반적으로 testIamPermissions는 맞춤설정된 그래픽 사용자 인터페이스와 같은 독점 소프트웨어와 통합할 때 사용됩니다. Google Cloud를 직접 사용하여 권한을 관리하는 경우에는 일반적으로 testIamPermissions를 호출하지 않습니다.

예를 들어 Compute Engine API 위에 GUI를 빌드하고 GUI에 인스턴스를 시작하는 '시작' 버튼이 있는 경우 compute.instances.testIamPermissions()를 호출하여 버튼을 사용할지 여부를 결정할 수 있습니다.

호출자에게 리소스에 대한 특정 권한이 있는지 테스트하려면 다음 안내를 따르세요.

  1. 요청을 리소스에게 전송하면서 확인할 권한 목록을 요청 본문에 추가합니다.

    예를 들어 인스턴스에서 compute.instances.start, compute.instances.stop, compute.instances.delete를 확인할 수 있습니다.

    POST https://compute.googleapis.com/compute/v1/projects/project-id/zones/zone/instances/instance-name/setIamPolicy
        {
          "permissions": [
            "compute.instances.start",
            "compute.instances.stop",
            "compute.instances.delete"
           ]
        }
  2. 요청이 호출자에게 사용 설정되어 있는 권한을 반환합니다.

    {
      "permissions": [
        "compute.instances.start",
        "compute.instances.stop"
      ]
    }
    

여러 구성원의 리소스 액세스 권한 수정

Compute Engine 리소스에 대한 여러 구성원의 액세스 권한을 동시에 수정하려면 IAM 정책을 프로그래매틱 방식으로 수정하는 방법의 권장사항을 살펴보세요.

다음 단계