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


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

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

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

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

시작하기 전에

  • IAM 개요를 검토합니다.
  • Compute Engine 액세스 제어 개요를 읽습니다.
  • Compute Engine의 IAM 역할을 숙지합니다.
  • 아직 인증을 설정하지 않았다면 설정합니다. 인증은 Google Cloud 서비스 및 API에 액세스하기 위해 ID를 확인하는 프로세스입니다. 로컬 개발 환경에서 코드 또는 샘플을 실행하려면 다음과 같이 Compute Engine에 인증하면 됩니다.

    이 페이지의 샘플 사용 방법에 대한 탭을 선택하세요.

    콘솔

    Google Cloud 콘솔을 사용하여 Google Cloud 서비스 및 API에 액세스할 때는 인증을 설정할 필요가 없습니다.

    gcloud

    1. Google Cloud CLI를 설치한 후 다음 명령어를 실행하여 초기화합니다.

      gcloud init
    2. 기본 리전 및 영역을 설정합니다.

    REST

    로컬 개발 환경에서 이 페이지의 REST API 샘플을 사용하려면 gcloud CLI에 제공한 사용자 인증 정보를 사용합니다.

      Google Cloud CLI를 설치한 후 다음 명령어를 실행하여 초기화합니다.

      gcloud init

필요한 역할

Compute Engine 리소스에 대한 액세스를 관리하는 데 필요한 권한을 얻으려면 관리자에게 리소스에 대한 Compute 관리자(roles/compute.admin) IAM 역할을 부여해 달라고 요청하세요. 역할 부여에 대한 자세한 내용은 액세스 관리를 참조하세요.

이 사전 정의된 역할에는 Compute Engine 리소스에 대한 액세스를 관리하는 데 필요한 권한이 포함되어 있습니다. 필요한 정확한 권한을 보려면 필수 권한 섹션을 펼치세요.

필수 권한

Compute Engine 리소스에 대한 액세스를 관리하려면 다음 권한이 필요합니다.

  • 리소스에 대한 액세스 권한 부여 또는 취소:
    • 프로젝트에 대한 compute.projects.get 권한
    • 리소스에 대한 compute.RESOURCE_TYPE.get 권한
    • 리소스에 대한 compute.RESOURCE_TYPE.getIamPolicy 권한
    • 리소스에 대한 compute.RESOURCE_TYPE.setIamPolicy 권한
  • 호출자 권한 테스트: 리소스에 대한 compute.RESOURCE_TYPE.getIamPolicy 권한

    RESOURCE_TYPE을 액세스를 관리하려는 리소스로 바꿉니다. 예를 들면 instances, instanceTemplates 또는 images입니다.

커스텀 역할이나 다른 사전 정의된 역할을 사용하여 이 권한을 부여받을 수도 있습니다.

지원되는 리소스

리소스 수준 액세스 제어를 지원하는 Compute Engine 리소스 목록을 보려면 IAM 정책을 허용하는 리소스 유형을 참조하고 Compute Engine을 필터링하세요.

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

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

사용자 또는 서비스 계정과 같은 주 구성원이 Compute Engine 리소스에 액세스할 수 있습니다. ID는 주 구성원의 속성입니다. 주 구성원 ID는 일반적으로 계정과 연결된 이메일 주소로 표시됩니다.

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

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

콘솔

  1. Google Cloud Console에서 권한을 추가할 해당 리소스 페이지로 이동합니다.
  2. 업데이트할 리소스 옆에 있는 체크박스를 선택합니다.
  3. 리소스 페이지를 기준으로 다음 단계를 완료합니다.
    • VM 인스턴스의 경우 권한을 클릭합니다.
    • 다른 모든 리소스의 경우 다음을 완료합니다.
      1. 정보 패널이 표시되었는지 확인합니다. 표시되지 않았으면 정보 패널 표시를 클릭합니다.
      2. 권한 탭을 선택합니다.
  4. 주 구성원 추가를 클릭합니다.
  5. 주 구성원의 ID를 추가하고 필요한 역할을 선택합니다.
  6. 변경사항을 저장하려면 저장을 클릭합니다.

gcloud

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

gcloud compute RESOURCE_TYPE add-iam-policy-binding RESOURCE_NAME \
    --member='PRINCIPAL' \
    --role='ROLE'

다음을 바꿉니다.

  • RESOURCE_TYPE: 리소스 유형입니다. 유효한 값은 다음과 같습니다.
    • disks
    • images
    • instances
    • instance-templates
    • machine-images
    • reservations
    • sole-tenancy node-groups
    • sole-tenancy node-templates
    • snapshots
  • RESOURCE_NAME: 리소스 이름입니다. 예를 들면 my_instance입니다.
  • PRINCIPAL: 역할을 부여할 주 구성원의 유효한 ID입니다. user|group|serviceAccount:EMAIL_ADDRESS 또는 domain:DOMAIN_ADDRESS 양식이어야 합니다. 예를 들면 다음과 같습니다.
    • user:test-user@gmail.com
    • group:admins@example.com
    • serviceAccount:test123@example.domain.com
    • domain:example.domain.com
  • ROLE: 이 주 구성원을 할당할 역할입니다.

미리보기 상태인 리소스에 대한 액세스 권한을 부여하는 경우에는 대신 gcloud beta compute 명령어를 사용합니다.

REST

API를 통해 IAM 정책을 수정하려면 다음 안내를 수행합니다.

  1. 리소스의 해당 getIamPolicy 메서드로 기존 정책을 읽습니다. 예를 들어 다음 HTTP 요청은 VM의 IAM 정책을 읽습니다.

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

    다음을 바꿉니다.

    • PROJECT_ID: 이 VM이 속한 프로젝트의 프로젝트 ID입니다.
    • ZONE: VM의 영역 리전 또는 전역 리소스의 경우 zones/ZONEregions/REGION 또는 global로 바꿉니다.
    • VM_NAME: 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/VM_NAME:setIamPolicy

    다음을 바꿉니다.

    • PROJECT_ID: 이 VM이 속한 프로젝트의 프로젝트 ID입니다.
    • ZONE: VM의 영역 리전 또는 전역 리소스의 경우 zones/ZONEregions/REGION 또는 global로 바꿉니다.
    • VM_NAME: VM 인스턴스의 이름입니다.

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

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

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

콘솔

  1. Google Cloud Console에서 권한을 추가할 해당 리소스 페이지로 이동합니다.
  2. 업데이트할 리소스 옆에 있는 체크박스를 선택합니다.
  3. 리소스 페이지를 기준으로 다음 단계를 완료합니다.
    • VM 인스턴스의 경우 권한을 클릭합니다.
    • 다른 모든 리소스의 경우 다음을 완료합니다.
      1. 정보 패널이 표시되었는지 확인합니다. 표시되지 않았으면 정보 패널 표시를 클릭합니다.
      2. 권한 탭을 선택합니다.
  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
    • machine-images
    • reservations
    • sole-tenancy node-groups
    • sole-tenancy node-templates
    • snapshots
  • RESOURCE_NAME: 리소스 이름입니다. 예를 들면 my_instance입니다.
  • PRINCIPAL: 주 구성원의 유효한 ID입니다. user|group|serviceAccount:EMAIL_ADDRESS 또는 domain:DOMAIN_ADDRESS 양식이어야 합니다. 예를 들면 다음과 같습니다.
    • user:test-user@gmail.com
    • group:admins@example.com
    • serviceAccount:test123@example.domain.com
    • domain:example.domain.com
  • ROLE: 주 구성원을 삭제할 역할입니다.

미리보기 상태의 리소스에 대한 액세스 권한을 취소하려면 대신 gcloud beta compute 명령어를 사용합니다.

REST

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

  1. 리소스의 해당 getIamPolicy 메서드로 기존 정책을 읽습니다. 예를 들어 다음 HTTP 요청은 VM의 IAM 정책을 읽습니다.

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

    다음을 바꿉니다.

    • PROJECT_ID: 이 VM이 속한 프로젝트의 프로젝트 ID입니다.
    • ZONE: VM의 영역 리전 또는 전역 리소스의 경우 zones/ZONEregions/REGION 또는 global로 바꿉니다.
    • VM_NAME: 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/VM_NAME:setIamPolicy

    다음을 바꿉니다.

    • PROJECT_ID: 이 VM이 속한 프로젝트의 프로젝트 ID입니다.
    • ZONE: VM의 영역 리전 또는 전역 리소스의 경우 zones/ZONEregions/REGION 또는 global로 바꿉니다.
    • VM_NAME: 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/VM_NAME/testIamPermissions
        {
          "permissions": [
            "compute.instances.start",
            "compute.instances.stop",
            "compute.instances.delete"
           ]
        }
  2. 요청이 호출자에게 사용 설정되어 있는 권한을 반환합니다.

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

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

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

다음 단계