사용자 관리형 서비스 계정을 사용하는 VM 만들기


이 문서에서는 사용자 관리형 서비스 계정을 사용하도록 구성된 가상 머신(VM) 인스턴스를 만드는 방법을 설명합니다. 서비스 계정은 승인된 API 호출을 수행하기 위해 일반적으로 애플리케이션 또는 컴퓨팅 워크로드에서 사용되는 특별한 종류의 계정입니다.

서비스 계정은 커스텀 애플리케이션과 같은 워크로드가 최종 사용자의 개입 없이 Google Cloud 리소스에 액세스해야 하는 시나리오에 필요합니다. 서비스 계정을 사용해야 하는 경우에 대한 자세한 내용은 서비스 계정 사용 권장사항을 참조하세요.

Google Cloud API를 호출해야 하는 애플리케이션이 있는 경우 애플리케이션 또는 워크로드가 실행 중인 VM에 사용자 관리형 서비스 계정을 연결하는 것이 좋습니다. 그런 다음 서비스 계정에 IAM 역할을 부여하면 서비스 계정 및 VM에서 실행되는 애플리케이션까지 Google Cloud 리소스에 액세스할 수 있습니다.

시작하기 전에

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

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

    콘솔

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

    gcloud

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

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

    Terraform

    로컬 개발 환경에서 이 페이지의 Terraform 샘플을 사용하려면 gcloud CLI를 설치 및 초기화한 다음 사용자 인증 정보로 애플리케이션 기본 사용자 인증 정보를 설정하세요.

    1. Google Cloud CLI를 설치합니다.
    2. gcloud CLI를 초기화하려면 다음 명령어를 실행합니다.

      gcloud init
    3. Google 계정의 로컬 인증 사용자 인증 정보를 만듭니다.

      gcloud auth application-default login

    자세한 내용은 로컬 개발 환경의 인증 설정를 참조하세요.

    REST

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

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

      gcloud init

필요한 역할

서비스 계정을 사용하는 VM을 만드는 데 필요한 권한을 얻으려면 관리자에게 프로젝트에 대한 다음 IAM 역할을 부여해 달라고 요청하세요.

역할 부여에 대한 자세한 내용은 액세스 관리를 참조하세요.

이러한 사전 정의된 역할에는 서비스 계정을 사용하는 VM을 만드는 데 필요한 권한이 포함되어 있습니다. 필요한 정확한 권한을 보려면 필수 권한 섹션을 펼치세요.

필수 권한

서비스 계정을 사용하는 VM을 만드는 데 필요한 권한은 다음과 같습니다.

  • 서비스 계정 만들기: serviceAccountCreator 역할의 모든 권한
  • VM을 만들려면 다음 안내를 따르세요.
    • 프로젝트에 대한 compute.instances.create 권한
    • 커스텀 이미지를 사용하여 VM 만들기: 이미지에 대한 compute.images.useReadOnly 권한
    • 스냅샷을 사용하여 VM 만들기: 스냅샷에 대한 compute.snapshots.useReadOnly 권한
    • 인스턴스 템플릿을 사용하여 VM 만들기: 인스턴스 템플릿에 대한 compute.instanceTemplates.useReadOnly 권한
    • VM에 기존 네트워크 할당: 프로젝트에 대한 compute.networks.use 권한
    • VM의 고정 IP 주소 지정: 프로젝트에 대한 compute.addresses.use 권한
    • 기존 네트워크 사용 시 VM에 외부 IP 주소 할당: 프로젝트에 대한 compute.networks.useExternalIp 권한
    • VM의 서브넷 지정: 프로젝트 또는 선택한 서브넷에 대한 compute.subnetworks.use 권한
    • VPC 네트워크를 사용할 때 VM에 외부 IP 주소 할당: 프로젝트 또는 선택한 서브넷에 대한 compute.subnetworks.useExternalIp 권한
    • VM에 VM 인스턴스 메타데이터 설정: 프로젝트에 대한 compute.instances.setMetadata 권한
    • VM에 태그 설정: VM에 대한 compute.instances.setTags 권한
    • VM에 라벨 설정: VM에 대한 compute.instances.setLabels 권한
    • VM에 사용할 서비스 계정 설정: VM에 대한 compute.instances.setServiceAccount 권한
    • VM의 새 디스크 만들기: 프로젝트에 대한 compute.disks.create 권한
    • 기존 디스크를 읽기 전용 또는 읽기-쓰기 모드로 연결: 디스크에 대한 compute.disks.use 권한
    • 기존 디스크를 읽기 전용 모드로 연결: 디스크에 대한 compute.disks.useReadOnly 권한

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

개요

다음과 같이 VM의 서비스 계정을 구성하는 것이 좋습니다.

  1. Compute Engine 기본 서비스 계정을 사용하는 대신 새로운 사용자 관리 서비스 계정을 만들고 이 서비스 계정에 필요한 리소스 및 작업에 대해서만 IAM 역할을 부여합니다.
  2. VM에 서비스 계정을 연결합니다.
  3. VM에서 클라우드 플랫폼(https://www.googleapis.com/auth/cloud-platform) 범위를 설정합니다. 이렇게 하면 VM의 서비스 계정이 사용할 권한이 있는 Google Cloud API를 호출할 수 있습니다.
    • Google Cloud 콘솔을 사용하여 서비스 계정을 지정하는 경우 VM의 액세스 범위는 기본적으로 cloud-platform 범위로 지정됩니다.
    • Google Cloud CLI 또는 Compute Engine API를 사용하여 서비스 계정을 지정하는 경우 scopes 매개변수를 사용하여 액세스 범위를 설정할 수 있습니다.

서비스 계정 설정

서비스 계정을 만들고 필요한 IAM 역할을 할당합니다. IAM 역할을 필요한 만큼 할당하세요. 필요에 따라 서비스 계정에서 IAM 역할을 수정할 수 있습니다.

서비스 계정 권한을 제한하고 서비스 계정 권한을 정기적으로 확인하여 최신 상태인지 확인하는 것이 좋습니다.

다음 방법 중 하나를 사용하여 서비스 계정을 설정합니다.

콘솔

    Google Cloud Console에서 서비스 계정 만들기 페이지로 이동합니다.

    서비스 계정 만들기로 이동
  1. 프로젝트를 선택합니다.
  2. 서비스 계정 이름 필드에 이름을 입력합니다. Google Cloud 콘솔은 이 이름을 기반으로 서비스 계정 ID 필드를 채웁니다.

    서비스 계정 설명 필드에 설명을 입력합니다. 예를 들면 Service account for quickstart입니다.

  3. 만들고 계속하기를 클릭합니다.
  4. 서비스 계정에 필요한 역할을 부여합니다.

    역할을 부여하려면 역할 선택 목록을 찾은 후 역할을 선택합니다.

    역할을 추가로 부여하려면 다른 역할 추가를 클릭하고 각 역할을 추가합니다.

  5. 계속을 클릭합니다.
  6. 서비스 계정 사용자 역할 상자에 Google 계정의 이메일 주소를 입력합니다.
  7. 완료를 클릭하여 서비스 계정 만들기를 마칩니다.

gcloud

    인증을 설정합니다.

    1. 서비스 계정을 만듭니다.

      gcloud iam service-accounts create SERVICE_ACCOUNT_NAME

      SERVICE_ACCOUNT_NAME을 서비스 계정 이름으로 바꿉니다.

    2. 프로젝트 및 리소스에 대한 액세스 권한을 제공하려면 서비스 계정에 역할을 부여합니다.

      gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" --role=ROLE

      다음을 바꿉니다.

      • SERVICE_ACCOUNT_NAME: 서비스 계정의 이름입니다.
      • PROJECT_ID: 서비스 계정을 만든 프로젝트 ID입니다.
      • ROLE: 부여할 역할입니다.
    3. 서비스 계정에 다른 역할을 부여하려면 이전 단계에서 한 것처럼 명령어를 실행합니다.
    4. Google 계정에 서비스 계정 역할을 사용하고 서비스 계정을 다른 리소스에 연결할 수 있게 해주는 역할을 부여합니다.

      gcloud iam service-accounts add-iam-policy-binding SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com --member="user:USER_EMAIL" --role=roles/iam.serviceAccountUser

      다음을 바꿉니다.

      • SERVICE_ACCOUNT_NAME: 서비스 계정의 이름입니다.
      • PROJECT_ID: 서비스 계정을 만든 프로젝트 ID입니다.
      • USER_EMAIL: Google 계정의 이메일 주소입니다.

Terraform

google_service_account 리소스를 사용하여 서비스 계정을 만들 수 있습니다.

resource "google_service_account" "default" {
  account_id   = "service-account-id"
  display_name = "Service Account"
}

account_iddisplay_name 속성의 자리표시자 값을 바꿔야 합니다.

Terraform 구성을 적용하거나 삭제하는 방법은 기본 Terraform 명령어를 참조하세요.

VM 만들기 및 서비스 계정 연결

서비스 계정을 만든 후 VM을 만들고 이전 섹션에서 만든 서비스 계정을 연결합니다. 또한 VM의 액세스 범위를 cloud-platform으로 설정합니다.

기존 VM이 이미 있고 다른 VM 계정을 사용하도록 해당 VM을 구성하려면 연결된 서비스 계정 변경을 참조하세요.

다음 방법 중 하나를 사용하여 VM을 만들고 서비스 계정을 연결합니다.

콘솔

  1. Google Cloud 콘솔에서 VM 인스턴스 페이지로 이동합니다.

VM 인스턴스로 이동

  1. 프로젝트를 선택하고 계속을 클릭합니다.
  2. 인스턴스 만들기를 클릭합니다.
  3. VM의 이름을 지정합니다.
  4. ID 및 API 액세스 섹션으로 이동합니다.
  5. 서비스 계정 목록에서 만든 서비스 계정을 선택합니다. VM에 서비스 계정을 연결하면 Google Cloud 액세스 범위 cloud-platform 액세스 범위가 VM에 자동으로 설정됩니다.
  6. 필요에 따라 VM을 추가로 맞춤설정합니다.
  7. 만들기를 클릭하여 VM을 만들고 시작합니다.

gcloud

Google Cloud CLI를 사용하여 새 VM 인스턴스를 만들고 커스텀 서비스 계정을 사용하도록 구성하려면 gcloud compute instances create 명령어를 사용하고 VM 인스턴스에 서비스 계정 이메일 및 cloud-platform 액세스 범위를 제공합니다.

gcloud compute instances create VM_NAME \
    --service-account=SERVICE_ACCOUNT_EMAIL \
    --scopes=https://www.googleapis.com/auth/cloud-platform

다음을 바꿉니다.

  • SERVICE_ACCOUNT_EMAIL: 만든 서비스 계정의 이메일 주소입니다. 예를 들면 my-sa-123@my-project-123.iam.gserviceaccount.com입니다. 이메일 주소를 보려면 서비스 계정 나열을 참조하세요.
  • VM_NAME: VM 인스턴스의 이름입니다.

예를 들면 다음과 같습니다.

gcloud compute instances create example-vm \
    --service-account 123-my-sa@my-project-123.iam.gserviceaccount.com \
    --scopes=https://www.googleapis.com/auth/cloud-platform

별칭 --scopes=cloud-platform을 사용하여 범위를 지정할 수도 있습니다. 이러한 별칭은 gcloud CLI에서만 인식됩니다. API와 다른 라이브러리에서는 이러한 별칭이 인식되지 않으므로 전체 범위 URI를 지정해야 합니다.

Terraform

서비스 계정을 사용하도록 새 VM을 설정하려면 google_compute_instance 리소스를 사용하면 됩니다.

resource "google_compute_instance" "default" {
  name         = "my-test-vm"
  machine_type = "n1-standard-1"
  zone         = "us-central1-a"

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

  // Local SSD disk
  scratch_disk {
    interface = "SCSI"
  }

  network_interface {
    network = "default"

    access_config {
      // Ephemeral public IP
    }
  }

  service_account {
    # Google recommends custom service accounts with `cloud-platform` scope with
    # specific permissions granted via IAM Roles.
    # This approach lets you avoid embedding secret keys or user credentials
    # in your instance, image, or app code
    email  = google_service_account.default.email
    scopes = ["cloud-platform"]
  }
}

REST

instances.insert 메서드를 사용하여 VM을 만들고 VM 인스턴스의 서비스 계정 이메일과 액세스 범위를 지정합니다.

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

{
   "machineType":"zones/MACHINE_TYPE_ZONE/machineTypes/MACHINE_TYPE",
   "name":"VM_NAME",

   "disks":[
      {
         "initializeParams":{
            "sourceImage":"projects/IMAGE_PROJECT/global/images/IMAGE"
         },
         "boot":true
      }
   ],

   "networkInterfaces":[
      {
         "network":"global/networks/NETWORK_NAME"
      }
   ],

  "serviceAccounts": [
      {
      "email": "SERVICE_ACCOUNT_EMAIL",
      "scopes": ["https://www.googleapis.com/auth/cloud-platform"]
      }
   ],
   "shieldedInstanceConfig":{
      "enableSecureBoot":"ENABLE_SECURE_BOOT"
   }
}

다음을 바꿉니다.

  • PROJECT_ID: VM을 만들 프로젝트의 ID
  • ZONE: VM을 만들 영역
  • MACHINE_TYPE_ZONE: 새 VM에 사용할 머신 유형이 포함된 영역
  • MACHINE_TYPE: 새 VM의 머신 유형(사전 정의 또는 커스텀)
  • VM_NAME: 새 VM의 이름
  • IMAGE_PROJECT: 이미지가 포함된 프로젝트
    예를 들어 debian-10을 이미지 계열로 지정하는 경우 debian-cloud를 이미지 프로젝트로 지정합니다.
  • IMAGE or IMAGE_FAMILY: 다음 중 하나를 지정합니다.
    • IMAGE: 공개 이미지의 특정 버전
      예를 들어 "sourceImage": "projects/debian-cloud/global/images/debian-10-buster-v20200309"
    • IMAGE_FAMILY: 이미지 계열
      이렇게 하면 지원 중단되지 않은 최신 OS 이미지에서 VM을 만듭니다. 예를 들어 "sourceImage": "projects/debian-cloud/global/images/family/debian-10"을 지정하면 Compute Engine이 Debian 10 이미지 계열에서 최신 버전의 OS 이미지를 사용하여 VM을 만듭니다.
  • NETWORK_NAME: VM에 사용하려는 VPC 네트워크입니다. 기본 네트워크를 사용하도록 default를 지정할 수 있습니다.
  • SERVICE_ACCOUNT_EMAIL: 만든 서비스 계정의 이메일 주소입니다. 예를 들면 my-sa-123@my-project-123.iam.gserviceaccount.com입니다. 이메일 주소를 보려면 서비스 계정 이메일 가져오기를 참조하세요.
  • ENABLE_SECURE_BOOT: 선택사항: 보안 VM 기능을 지원하는 이미지를 선택한 경우 기본적으로 Compute Engine은 vTPM(Virtual Trusted Platform Module)무결성 모니터링을 사용 설정합니다. Compute Engine은 기본적으로 보안 부팅을 사용 설정하지 않습니다.

    enableSecureBoottrue를 지정하면 Compute Engine은 보안 VM 기능 3가지를 모두 사용 설정하여 VM을 만듭니다. Compute Engine에서 VM을 시작한 후 보안 VM 옵션을 수정하려면 VM을 중지해야 합니다.

다른 Google Cloud 서비스 액세스 및 사용

VM이 서비스 계정을 사용하도록 구성된 후 애플리케이션은 서비스 계정을 사용하여 인증할 수 있습니다. 가장 일반적인 방법은 애플리케이션 기본 사용자 인증 정보와 클라이언트 라이브러리를 사용하여 인증하는 것입니다. gcloud CLI 및 gsutil과 같은 일부 Google Cloud 도구는 서비스 계정을 사용하여 VM에서 Google Cloud API에 자동으로 액세스할 수 있습니다. 자세한 내용은 서비스 계정을 사용하여 워크로드 인증을 참조하세요.

서비스 계정이 삭제되면 애플리케이션이 해당 서비스 계정을 통해 Google Cloud 리소스에 더 이상 액세스할 수 없습니다. 기본 App Engine 및 Compute Engine 서비스 계정을 삭제하면 VM에서 프로젝트의 리소스에 더 이상 액세스할 수 없습니다. 서비스 계정이 사용 중인지 잘 모르는 경우, Google은 서비스 계정을 삭제하기 전에 먼저 사용 중지하는 것을 권장합니다. 사용 중지된 서비스 계정은 필요한 경우 다시 사용할 수 있습니다.

예: VM에서 Cloud Storage 리소스에 액세스

storage.admin 역할이 있는 서비스 계정을 사용하도록 VM을 구성한 후에는 gcloud CLI 및 gsutil과 같은 도구를 사용하여 Cloud Storage에 저장된 파일을 관리할 수 있습니다. Cloud Storage 리소스에 액세스하려면 다음을 완료합니다.

  1. VM에 연결된 서비스 계정에 roles/storage.admin 역할이 있는지 확인합니다.

  2. VM이 커스텀 OS 이미지를 사용하는 경우 gcloud CLI를 설치합니다. 기본적으로 gcloud CLI는 Google Cloud에서 제공하는 대부분의 공개 OS 이미지에 설치됩니다.

  3. VM에 연결합니다.

  4. VM에서 다음 도구 중 하나를 사용하여 Cloud Storage 리소스를 관리합니다.

다음 단계