Membuat VM yang menggunakan akun layanan yang dikelola pengguna


Dokumen ini menjelaskan cara membuat instance virtual machine (VM) yang dikonfigurasi untuk menggunakan akun layanan yang dikelola pengguna. Akun layanan adalah jenis akun khusus yang biasanya digunakan oleh aplikasi atau workload komputasi untuk melakukan panggilan API resmi.

Akun layanan diperlukan untuk skenario saat beban kerja, seperti aplikasi kustom, perlu mengakses resource Google Cloud atau melakukan tindakan tanpa interaksi pengguna akhir. Untuk informasi selengkapnya tentang kapan harus menggunakan akun layanan, lihat Praktik terbaik untuk menggunakan akun layanan.

Jika Anda memiliki aplikasi yang perlu melakukan panggilan ke Google Cloud API, Google merekomendasikan agar Anda menyertakan akun layanan yang dikelola pengguna ke VM tempat aplikasi atau workload berjalan. Kemudian, Anda harus memberikan peran IAM ke akun layanan, sehingga akun layanan dan aplikasi yang berjalan di VM dapat mengakses resource Google Cloud.

Sebelum memulai

  • Jika Anda belum melakukannya, siapkan autentikasi. Autentikasi adalah proses verifikasi identitas Anda untuk mengakses layanan dan API Google Cloud. Untuk menjalankan kode atau contoh dari lingkungan pengembangan lokal, Anda dapat mengautentikasi ke Compute Engine dengan memilih salah satu opsi berikut:

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    1. Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init
    2. Set a default region and zone.
    3. Terraform

      Untuk menggunakan contoh Terraform di halaman ini dalam lingkungan pengembangan lokal, instal dan lakukan inisialisasi gcloud CLI, lalu siapkan Kredensial Default Aplikasi dengan kredensial pengguna Anda.

      1. Install the Google Cloud CLI.
      2. To initialize the gcloud CLI, run the following command:

        gcloud init
      3. If you're using a local shell, then create local authentication credentials for your user account:

        gcloud auth application-default login

        You don't need to do this if you're using Cloud Shell.

      Untuk informasi selengkapnya, lihat Set up authentication for a local development environment.

      REST

      Untuk menggunakan contoh REST API di halaman ini dalam lingkungan pengembangan lokal, gunakan kredensial yang Anda berikan ke gcloud CLI.

        Install the Google Cloud CLI, then initialize it by running the following command:

        gcloud init

      Untuk informasi selengkapnya, lihat Melakukan autentikasi untuk menggunakan REST dalam dokumentasi autentikasi Google Cloud.

Peran yang diperlukan

Untuk mendapatkan izin yang diperlukan untuk membuat VM yang menggunakan akun layanan, minta administrator untuk memberi Anda peran IAM berikut pada project:

Untuk mengetahui informasi selengkapnya tentang cara memberikan peran, lihat Mengelola akses ke project, folder, dan organisasi.

Peran bawaan ini berisi izin yang diperlukan untuk membuat VM yang menggunakan akun layanan. Untuk melihat izin yang benar-benar diperlukan, luaskan bagian Izin yang diperlukan:

Izin yang diperlukan

Izin berikut diperlukan untuk membuat VM yang menggunakan akun layanan:

  • Untuk membuat akun layanan: Semua izin dalam peran serviceAccountCreator
  • Untuk membuat VM:
    • compute.instances.create pada project
    • Untuk menggunakan image kustom guna membuat VM: compute.images.useReadOnly pada image
    • Untuk menggunakan snapshot guna membuat VM: compute.snapshots.useReadOnly pada snapshot
    • Untuk menggunakan template instance guna membuat VM: compute.instanceTemplates.useReadOnly di template instance
    • Untuk menetapkan jaringan lama ke VM: compute.networks.use di project
    • Untuk menentukan alamat IP statis untuk VM: compute.addresses.use pada project
    • Untuk menetapkan alamat IP eksternal ke VM saat menggunakan jaringan lama: compute.networks.useExternalIp di project
    • Untuk menentukan subnet bagi VM: compute.subnetworks.use di project atau di subnet yang dipilih
    • Untuk menetapkan alamat IP eksternal ke VM saat menggunakan jaringan VPC: compute.subnetworks.useExternalIp di project atau di subnet yang dipilih
    • Untuk menetapkan metadata instance VM untuk VM: compute.instances.setMetadata di project
    • Untuk menetapkan tag untuk VM: compute.instances.setTags di VM
    • Untuk menetapkan label untuk VM: compute.instances.setLabels di VM
    • Untuk menetapkan akun layanan yang akan digunakan VM: compute.instances.setServiceAccount di VM
    • Untuk membuat disk baru bagi VM: compute.disks.create pada project
    • Untuk memasang disk yang ada dalam mode hanya baca atau baca-tulis: compute.disks.use pada disk
    • Untuk memasang disk yang ada dalam mode hanya baca: compute.disks.useReadOnly pada disk

Anda mungkin juga bisa mendapatkan izin ini dengan peran khusus atau peran bawaan lainnya.

Ringkasan

Sebaiknya konfigurasi akun layanan untuk VM Anda sebagai berikut:

  1. Buat akun layanan baru yang dikelola pengguna, daripada menggunakan akun layanan default Compute Engine, dan berikan peran IAM ke akun layanan tersebut hanya untuk resource dan operasi yang dibutuhkan.
  2. Sertakan akun layanan ke VM Anda.
  3. Tetapkan cakupan platform cloud (https://www.googleapis.com/auth/cloud-platform) pada VM Anda. Hal ini memungkinkan akun layanan VM memanggil Google Cloud API yang dapat digunakannya.
    • Jika Anda menentukan akun layanan menggunakan konsol Google Cloud, cakupan akses VM otomatis ditetapkan ke cakupan cloud-platform secara default.
    • Jika menentukan akun layanan menggunakan Google Cloud CLI atau Compute Engine API, Anda dapat menggunakan parameter scopes untuk menetapkan cakupan akses.

Menyiapkan akun layanan

Buat akun layanan dan tetapkan peran IAM yang diperlukan. Tetapkan peran IAM sebanyak atau sesedikit mungkin sesuai kebutuhan. Anda dapat mengubah peran IAM di akun layanan sesuai kebutuhan.

Google merekomendasikan agar Anda membatasi hak istimewa akun layanan dan memeriksa izin akun layanan Anda secara rutin untuk memastikan bahwa izin tersebut merupakan yang terbaru.

Gunakan salah satu metode berikut untuk menyiapkan akun layanan.

Konsol

    In the Google Cloud console, go to the Create service account page.

    Go to Create service account
  1. Select your project.
  2. In the Service account name field, enter a name. The Google Cloud console fills in the Service account ID field based on this name.

    In the Service account description field, enter a description. For example, Service account for quickstart.

  3. Click Create and continue.
  4. Grant the required roles to the service account.

    To grant a role, find the Select a role list, then select the role.

    To grant additional roles, click Add another role and add each additional role.

  5. Click Continue.
  6. In the Service account users role field, enter the identifier for the principal that will attach the service account to other resources, such as Compute Engine instances.

    This is typically the email address for a Google Account.

  7. Click Done to finish creating the service account.

gcloud

    Set up authentication:

    1. Create the service account:

      gcloud iam service-accounts create SERVICE_ACCOUNT_NAME

      Replace SERVICE_ACCOUNT_NAME with a name for the service account.

    2. To provide access to your project and your resources, grant a role to the service account:

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

      Replace the following:

      • SERVICE_ACCOUNT_NAME: the name of the service account
      • PROJECT_ID: the project ID where you created the service account
      • ROLE: the role to grant
    3. To grant another role to the service account, run the command as you did in the previous step.
    4. Grant the required role to the principal that will attach the service account to other resources.

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

      Replace the following:

      • SERVICE_ACCOUNT_NAME: the name of the service account
      • PROJECT_ID: the project ID where you created the service account
      • USER_EMAIL: the email address for a Google Account

Terraform

Untuk membuat akun layanan, Anda dapat menggunakan resource google_service_account.

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

Jangan lupa mengganti nilai placeholder untuk atribut account_id dan display_name.

Untuk mempelajari cara menerapkan atau menghapus konfigurasi Terraform, lihat Perintah dasar Terraform.

Membuat VM dan memasang akun layanan

Setelah membuat akun layanan, buat VM dan pasang akun layanan yang Anda buat di bagian sebelumnya. Tetapkan juga cakupan akses VM ke cloud-platform.

Jika Anda sudah memiliki VM dan ingin mengonfigurasi VM tersebut untuk menggunakan akun layanan lain, lihat Mengubah akun layanan yang terpasang.

Gunakan salah satu metode berikut untuk membuat VM dan memasang akun layanan.

Konsol

  1. Di konsol Google Cloud, buka halaman Instance VM.

Buka halaman VM instances

  1. Pilih project Anda, lalu klik Continue.
  2. Klik Create instance.
  3. Tentukan Name untuk VM Anda.
  4. Buka bagian Identity and API access.
  5. Dalam daftar Service account, pilih akun layanan yang Anda buat. Saat Anda memasang akun layanan ke VM, cakupan akses cloud-platform Google Cloud akan otomatis ditetapkan di VM.
  6. Buat penyesuaian VM tambahan, sesuai kebutuhan.
  7. Untuk membuat dan memulai VM, klik Create.

gcloud

Untuk membuat instance VM baru dan mengonfigurasinya agar menggunakan akun layanan khusus melalui Google Cloud CLI, gunakan perintah gcloud compute instances create dan masukkan email akun layanan serta cakupan akses cloud-platform ke instance VM.

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

Ganti kode berikut:

  • SERVICE_ACCOUNT_EMAIL: alamat email untuk akun layanan yang Anda buat. Contoh: my-sa-123@my-project-123.iam.gserviceaccount.com. Untuk melihat alamat email, lihat Mencantumkan akun layanan.
  • VM_NAME: nama instance VM.

Contoh:

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

Anda juga dapat menentukan cakupan menggunakan alias: --scopes=cloud-platform. Alias ini hanya dikenali oleh gcloud CLI. API dan library lainnya tidak mengenali alias ini, jadi Anda harus menentukan URI cakupan lengkap.

Terraform

Untuk menyiapkan VM baru agar dapat menggunakan akun layanan, Anda dapat menggunakan resource 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

Gunakan metode instances.insert untuk membuat VM dan tentukan email akun layanan serta cakupan akses untuk instance 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"
   }
}

Ganti kode berikut:

  • PROJECT_ID: ID project tempat VM akan dibuat
  • ZONE: zone tempat VM akan dibuat
  • MACHINE_TYPE_ZONE: zona yang berisi jenis mesin yang akan digunakan untuk VM baru
  • MACHINE_TYPE: jenis mesin, telah ditetapkan atau kustom, untuk VM baru
  • VM_NAME: nama VM baru
  • IMAGE_PROJECT: project yang berisi image
    Misalnya, jika Anda menentukan debian-10 sebagai kelompok image, tentukan debian-cloud sebagai project image tersebut.
  • IMAGE or IMAGE_FAMILY: menentukan salah satu dari berikut ini:
    • IMAGE: versi spesifik dari image publik
      Misalnya "sourceImage": "projects/debian-cloud/global/images/debian-10-buster-v20200309"
    • IMAGE_FAMILY: kelompok image
      Ini akan membuat VM dari OS image terbaru yang masih digunakan. Misalnya, jika Anda menentukan "sourceImage": "projects/debian-cloud/global/images/family/debian-10", Compute Engine akan membuat VM dari versi terbaru OS image dalam kelompok image Debian 10.
  • NETWORK_NAME: jaringan VPC yang akan digunakan untuk VM. Anda dapat menentukan default untuk menggunakan jaringan default.
  • SERVICE_ACCOUNT_EMAIL: alamat email untuk akun layanan yang Anda buat. Contoh: my-sa-123@my-project-123.iam.gserviceaccount.com. Untuk melihat alamat email, lihat cara mendapatkan email akun layanan.
  • ENABLE_SECURE_BOOT: Opsional: Jika Anda memilih image yang mendukung fitur Shielded VM, Compute Engine secara default akan mengaktifkan virtual Trusted Platform Module (vTPM) dan pemantauan integritas. Compute Engine tidak mengaktifkan Booting Aman secara default.

    Jika Anda menentukan true untuk enableSecureBoot, Compute Engine akan membuat VM dengan ketiga fitur Shielded VM diaktifkan. Setelah Compute Engine memulai VM Anda, untuk mengubah opsi Shielded VM, Anda harus menghentikan VM tersebut.

Mengakses dan menggunakan layanan Google Cloud lainnya

Setelah VM dikonfigurasi untuk menggunakan akun layanan, selanjutnya aplikasi dapat menggunakan akun layanan ini untuk melakukan autentikasi. Metode yang paling umum adalah melakukan autentikasi menggunakan Kredensial Default Aplikasi dan library klien. Beberapa alat Google Cloud seperti gcloud CLI dapat otomatis menggunakan akun layanan untuk mengakses Google Cloud API dari VM. Untuk mengetahui informasi selengkapnya, lihat Mengautentikasi workload menggunakan akun layanan.

Jika akun layanan dihapus, aplikasi tidak akan lagi memiliki akses ke resource Google Cloud melalui akun layanan tersebut. Jika Anda menghapus akun layanan App Engine dan Compute Engine default, VM Anda tidak akan lagi memiliki akses ke resource dalam project. Jika Anda tidak yakin apakah akun layanan sedang digunakan, sebaiknya nonaktifkan akun layanan sebelum menghapusnya. Akun layanan yang dinonaktifkan dapat diaktifkan kembali jika masih diperlukan.

Contoh: Mengakses resource Cloud Storage dari VM

Setelah mengonfigurasi VM untuk menggunakan akun layanan yang memiliki peran storage.admin, Anda dapat menggunakan alat seperti gcloud CLI untuk mengelola file yang telah Anda simpan di Cloud Storage. Untuk mengakses resource Cloud Storage, lakukan langkah berikut:

  1. Pastikan akun layanan yang terpasang ke VM Anda memiliki peran roles/storage.admin.

  2. Jika VM Anda menggunakan OS image kustom, instal gcloud CLI. Secara default, gcloud CLI diinstal pada sebagian besar OS image publik yang disediakan oleh Google Cloud.

  3. Hubungkan ke VM.

  4. Dari VM, gunakan Google Cloud CLI untuk mengelola resource Cloud Storage Anda.

Apa langkah selanjutnya?