GCP VM의 서비스 계정과 실제 권한 점검

VM 워크로드에 맞는 계정을 연결하고 실제 IAM 권한을 최소화하세요.

설명

기본 Compute Engine 서비스 계정은 환경의 IAM 정책에 따라 넓은 권한을 가질 수 있지만, 기본 계정이라는 이유만으로 모든 API 권한을 갖는 것은 아닙니다. 워크로드마다 필요한 리소스에만 접근할 수 있는 전용 계정을 사용하면 권한 검토가 쉬워집니다.

계정 이름을 바꾸는 것만으로 최소 권한이 보장되지는 않습니다. 연결된 IAM 역할과 해당 계정을 사용할 수 있는 주체를 함께 확인하세요.

잠재적 영향

  • VM이 침해되면 연결된 서비스 계정의 권한 범위까지 피해가 확산될 수 있습니다.
  • 여러 워크로드가 계정을 공유하면 권한 변경의 영향과 사용 주체를 추적하기 어려워질 수 있습니다.

해결 방법

  • 필요한 Google Cloud API를 사용하는 VM에는 적절한 전용 계정을 service_account.email로 지정하고 최소 IAM 역할만 부여하세요. API 접근이 필요하지 않다면 서비스 계정 연결 자체를 검토하세요.
  • 기본 계정의 실제 Editor 등 광범위한 권한과 의존 워크로드를 확인한 뒤 불필요한 권한을 줄이세요. 계정을 즉시 삭제하거나 사용 중지해 기존 서비스를 중단시키지 않도록 하세요.

예시

구형 이미지, 네트워크와 계정 이메일은 실제 배포 값으로 바꾸세요. IAM 역할은 생략했으며 스코프만으로 권한이 부여되지는 않습니다. cloud-platform과 최소 IAM 역할을 함께 사용하는 것도 권장되는 구성입니다.

변경 전

hcl
resource "google_compute_instance" "vm" {
  name         = "test"
  machine_type = "e2-medium"
  zone         = "us-central1-a"

  boot_disk {
    initialize_params {
      image = "debian-cloud/debian-9"
    }
  }

  network_interface {
    network = "default"

    access_config {}
  }

  service_account {
    email  = "123456789-compute@developer.gserviceaccount.com"
    scopes = ["cloud-platform"]
  }
}

변경 후

hcl
resource "google_compute_instance" "vm" {
  name         = "test"
  machine_type = "e2-medium"
  zone         = "us-central1-a"

  boot_disk {
    initialize_params {
      image = "debian-cloud/debian-9"
    }
  }

  network_interface {
    network = "default"

    access_config {}
  }

  service_account {
    email  = "app-runtime@my-project.iam.gserviceaccount.com"
    scopes = ["userinfo-email", "compute-ro", "storage-ro"]
  }
}

설명:

  • 변경 전: 기본 계정과 cloud-platform 스코프를 사용합니다. 실제 권한은 IAM 역할 등에도 달려 있습니다.
  • 변경 후: 전용 계정과 제한된 스코프를 지정합니다. 필요한 작업에 맞는 IAM 역할을 별도로 검토해야 합니다.

참조