Akun layanan

Halaman ini menjelaskan cara kerja akun layanan dengan Compute Engine.

Untuk mengetahui informasi langkah demi langkah terkait cara menambahkan akun layanan ke instance virtual machine (VM), pelajari salah satu dokumen berikut:

Untuk mempelajari praktik terbaik dalam membuat dan mengelola akun layanan, baca dokumentasi Praktik terbaik untuk menggunakan akun layanan.

Cobalah sendiri

Jika Anda baru pertama kali menggunakan Google Cloud, buat akun untuk mengevaluasi performa Compute Engine dalam skenario dunia nyata. Pelanggan baru mendapatkan kredit gratis senilai $300 untuk menjalankan, menguji, dan men-deploy workload.

Coba Compute Engine gratis

Apa yang dimaksud dengan akun layanan?

Akun layanan adalah jenis akun khusus yang digunakan oleh aplikasi atau workload komputasi, bukan pengguna. Akun layanan dikelola oleh Identity and Access Management (IAM).

Perhatikan hal-hal berikut saat menggunakan akun layanan dengan VM Anda:

  • Anda dapat menambahkan akun layanan yang sama ke beberapa VM, tetapi satu VM hanya dapat memiliki satu akun layanan yang ditambahkan kepadanya.
  • Jika Anda menambahkan akun layanan yang sama ke beberapa VM, setiap perubahan berikutnya yang Anda lakukan pada akun layanan akan memengaruhi semua VM yang menggunakan akun layanan tersebut. Hal ini mencakup perubahan apa pun yang Anda buat pada peran IAM yang diberikan ke akun layanan. Misalnya, jika Anda menghapus peran, semua VM yang menggunakan akun layanan akan kehilangan izin yang diberikan oleh peran tersebut.

Cara Compute Engine menggunakan akun layanan

Compute Engine menggunakan dua jenis akun layanan:

Akun layanan yang dikelola pengguna dapat dipasang ke instance Compute Engine untuk memberikan kredensial ke aplikasi yang berjalan pada instance tersebut. Kredensial ini digunakan oleh aplikasi untuk melakukan autentikasi ke Google Cloud API dan otorisasi untuk mengakses resource Google Cloud. Hanya akun layanan yang dikelola pengguna yang dapat dipasangkan ke instance, dan sebuah instance hanya dapat memiliki satu akun layanan yang ditambahkan. Anda dapat mengubah akun layanan yang ditambahkan ke instance pada waktu pembuatan atau nanti.

Akun layanan yang dikelola Google digunakan oleh instance untuk mengakses proses internal atas nama Anda.

Selain itu, Anda dapat membuat aturan firewall yang mengizinkan atau menolak traffic ke dan dari instance berdasarkan akun layanan yang Anda kaitkan dengan setiap instance.

Cara otorisasi ditentukan

Otorisasi yang diberikan ke aplikasi yang dihosting di instance Compute Engine dibatasi oleh dua konfigurasi terpisah: peran yang diberikan ke akun layanan yang ditambahkan dan cakupan akses yang Anda tetapkan pada instance. Kedua konfigurasi ini harus mengizinkan akses sebelum aplikasi yang berjalan pada instance dapat mengakses resource.

Misalkan Anda memiliki aplikasi yang membaca dan menulis file di Cloud Storage, aplikasi tersebut harus melakukan autentikasi ke Cloud Storage API terlebih dahulu. Anda dapat membuat instance dengan cakupan cloud-platform dan menambahkan akun layanan ke instance tersebut. Kemudian, Anda dapat memberikan peran Identity and Access Management (IAM) ke akun layanan untuk memberi aplikasi Anda akses ke resource yang sesuai. Aplikasi Anda menggunakan kredensial akun layanan untuk mengautentikasi ke Cloud Storage API tanpa menyematkan kunci rahasia atau kredensial pengguna apa pun di instance, image, atau kode aplikasi Anda. Aplikasi Anda juga menggunakan otorisasi yang diberikan oleh peran IAM pada akun layanan untuk mengakses resource. Untuk mengetahui informasi selengkapnya tentang otorisasi, lihat Otorisasi di halaman ini.

Akun layanan yang dikelola pengguna

Akun layanan yang dikelola pengguna mencakup akun layanan baru yang Anda buat secara eksplisit dan akun layanan default Compute Engine.

Akun layanan baru

Anda dapat membuat dan mengelola akun layanan Anda sendiri menggunakan IAM. Setelah membuat akun, Anda memberikan peran IAM akun dan menyiapkan instance untuk dijalankan sebagai akun layanan. Aplikasi yang berjalan pada instance dengan akun layanan yang ditambahkan dapat menggunakan kredensial akun untuk membuat permintaan ke Google API lainnya.

Untuk membuat dan menyiapkan akun layanan baru, lihat Membuat VM yang menggunakan akun layanan yang dikelola pengguna.

Akun layanan default Compute Engine

Project baru yang telah mengaktifkan Compute Engine API memiliki akun layanan default Compute Engine, yang memiliki email berikut:

PROJECT_NUMBER-compute@developer.gserviceaccount.com

Akun layanan default Compute Engine memiliki atribut berikut:

  • Dibuat secara otomatis, dengan nama dan alamat email yang dibuat secara otomatis, dan ditambahkan ke project saat Anda mengaktifkan Compute Engine API. Anda memiliki kontrol penuh atas akun tersebut.
  • Secara otomatis memberikan peran Editor dasar IAM, jika Anda belum menonaktifkan perilaku ini. Anda dapat mengubah peran akun layanan untuk mengontrol akses akun layanan ke Google API.
  • Dipasang secara default ke semua VM yang Anda buat dengan menggunakan Google Cloud CLI atau Konsol Google Cloud. Anda dapat mengganti perilaku ini dengan menentukan akun layanan yang berbeda ketika membuat VM, atau dengan secara eksplisit menentukan bahwa tidak ada akun layanan yang ditambahkan ke VM.

Anda dapat menonaktifkan atau menghapus akun layanan ini dari project Anda. Namun, tindakan ini dapat menyebabkan kegagalan aplikasi yang bergantung pada kredensial akun layanan. Jika tidak sengaja menghapus akun layanan default Compute Engine, Anda dapat mencoba memulihkan akun tersebut dalam waktu 30 hari. Untuk mengetahui informasi selengkapnya, lihat Menghapus dan membatalkan penghapusan akun layanan.

Jika akun layanan default Compute Engine dihapus lebih dari 30 hari yang lalu, Anda dapat mencoba memulihkan akun layanan dengan mengikuti proses dalam Memecahkan masalah akun layanan default.

Akun layanan yang dikelola Google

Akun layanan ini (terkadang dikenal sebagai agen layanan) dibuat dan dikelola oleh Google dan ditetapkan ke project Anda secara otomatis. Akun ini mewakili layanan Google yang berbeda dan setiap akun memiliki tingkat akses tertentu ke project Google Cloud Anda.

Anda tidak dapat menambahkan akun layanan yang dikelola Google ke instance Compute Engine.

Agent Layanan Google API

Selain akun layanan default, semua project yang diaktifkan dengan Compute Engine dilengkapi dengan Agen Layanan Google API, yang dapat diidentifikasi menggunakan email:

PROJECT_NUMBER@cloudservices.gserviceaccount.com

Akun layanan ini dirancang khusus untuk menjalankan proses internal Google atas nama Anda. Akun ini dimiliki oleh Google dan tidak tercantum di bagian Akun Layanan pada Konsol Google Cloud. Secara default, akun otomatis diberi peran editor project pada project dan tercantum di bagian IAM di Konsol Google Cloud. Akun layanan ini hanya akan dihapus jika project dihapus. Namun, Anda dapat mengubah peran yang diberikan ke akun ini, termasuk mencabut semua akses ke project Anda.

Resource tertentu bergantung pada akun layanan ini dan izin editor default yang diberikan ke akun layanan. Misalnya, grup instance terkelola dan penskalaan otomatis menggunakan kredensial akun ini untuk membuat, menghapus, dan mengelola instance. Jika Anda mencabut izin ke akun layanan, atau mengubah izin sedemikian rupa sehingga tidak memberikan izin untuk membuat instance, hal ini akan menyebabkan grup instance terkelola dan penskalaan otomatis berhenti berfungsi.

Karena alasan ini, Anda tidak boleh mengubah peran akun layanan ini kecuali jika rekomendasi peran secara eksplisit menyarankan Anda untuk mengubahnya.

Agen Layanan Compute Engine

Semua project yang telah mengaktifkan Compute Engine API memiliki Agen Layanan Compute Engine, yang memiliki email berikut:

service-PROJECT_NUMBER@compute-system.iam.gserviceaccount.com

Akun layanan ini dirancang khusus untuk Compute Engine guna menjalankan tugas layanannya pada project Anda. Akun ini bergantung pada Kebijakan IAM Agen Layanan yang diberikan pada Project Google Cloud Anda. Akun ini juga merupakan akun layanan yang digunakan Compute Engine untuk mengakses akun layanan milik pelanggan pada instance VM. Google memiliki akun ini, tetapi akun ini khusus untuk project Anda. Akun ini disembunyikan dari halaman IAM di konsol, kecuali jika Anda memilih Include Google-provided role grants. Secara default, akun tersebut otomatis diberi peran compute.serviceAgent di project Anda.

Akun layanan ini hanya akan dihapus jika Anda menghapus project Anda. Anda dapat mengubah peran yang diberikan ke akun ini dan mencabut semua akses ke project Anda dari akun. Mencabut atau mengubah izin untuk akun layanan ini akan mencegah Compute Engine mengakses identitas akun layanan di VM Anda, dan dapat menyebabkan pemadaman software yang berjalan di dalam VM Anda.

Karena alasan ini, sebaiknya hindari modifikasi peran untuk akun layanan ini sebisa mungkin.

Menambahkan akun layanan ke instance

Agar tidak memberikan izin berlebih pada aplikasi, sebaiknya Anda membuat akun layanan yang dikelola pengguna, memberikannya hanya peran yang diperlukan aplikasi agar dapat berfungsi dengan benar, dan menambahkannya ke instance Compute Engine Anda. Selanjutnya, kode Anda dapat menggunakan Kredensial Default Aplikasi untuk melakukan autentikasi dengan kredensial yang diberikan oleh akun layanan.

Anda dapat memasang akun layanan ke instance Compute Engine saat membuat instance atau nanti. Hanya satu akun layanan yang dapat ditambahkan ke satu instance pada satu waktu; jika Anda menambahkan akun layanan ke instance yang sudah ditambahkan akun layanan, akun layanan sebelumnya tidak akan lagi digunakan oleh instance tersebut.

Saat menambahkan akun layanan ke instance Compute Engine, Anda juga harus memastikan bahwa cakupan yang ditetapkan pada instance sudah benar. Jika tidak, aplikasi Anda mungkin tidak dapat mengakses semua API yang diperlukan. Untuk informasi selengkapnya, lihat Cakupan akses di halaman ini.

Untuk mengetahui informasi langkah demi langkah tentang cara menambahkan akun layanan ke instance Compute Engine, pelajari salah satu dokumen berikut:

Otorisasi

Saat menyiapkan instance untuk dijalankan sebagai akun layanan, Anda menentukan tingkat akses yang dimiliki akun layanan dengan peran IAM yang Anda berikan ke akun layanan. Jika akun layanan tidak memiliki peran IAM, tidak ada resource yang dapat diakses menggunakan akun layanan pada instance tersebut.

Selain itu, cakupan akses instance menentukan cakupan OAuth default untuk permintaan yang dibuat melalui gcloud CLI dan library klien pada instance. Akibatnya, cakupan akses berpotensi membatasi akses lebih lanjut ke metode API saat mengautentikasi melalui OAuth. Namun, mereka tidak meluas ke protokol autentikasi lain seperti gRPC.

Sebaiknya tetapkan cakupan akses cloud-platform penuh pada instance, lalu mengontrol akses akun layanan menggunakan peran IAM.

Pada dasarnya:

  • IAM membatasi akses ke API berdasarkan peran IAM yang diberikan ke akun layanan.
  • Cakupan akses berpotensi membatasi akses lebih jauh ke metode API.

Cakupan akses dan peran IAM dijelaskan secara mendetail di bagian di bawah ini.

Peran IAM

Anda harus memberikan peran IAM yang sesuai ke akun layanan untuk mengizinkan akun layanan tersebut mengakses metode API yang relevan.

Misalnya, Anda dapat memberikan peran IAM kepada akun layanan untuk mengelola objek Cloud Storage, atau mengelola bucket Cloud Storage, atau keduanya, yang membatasi akun pada izin yang diberikan oleh peran tersebut.

Saat Anda memberikan peran IAM ke akun layanan, aplikasi apa pun yang berjalan pada instance yang menambahkan akun layanan tersebut akan memiliki otorisasi yang diberikan oleh peran tersebut.

Beberapa hal yang perlu diingat:

  • Beberapa peran IAM masih dalam versi Beta.

    Jika tidak ada peran yang telah ditetapkan untuk tingkat akses yang diinginkan, Anda dapat membuat dan memberikan peran khusus.

  • Anda harus menetapkan cakupan akses pada instance untuk mengizinkan akses.

    Meskipun tingkat akses akun layanan ditentukan oleh peran yang diberikan ke akun layanan, cakupan akses instance menentukan cakupan OAuth default untuk permintaan yang dibuat melalui gcloud CLI dan library klien pada instance. Akibatnya, cakupan akses berpotensi membatasi akses lebih lanjut ke metode API saat mengautentikasi melalui OAuth.

Access scopes

Cakupan akses adalah metode lama dalam menentukan otorisasi untuk instance Anda. Library ini menentukan cakupan OAuth default yang digunakan dalam permintaan dari gcloud CLI atau library klien. (Cakupan akses tidak berlaku untuk panggilan yang dilakukan menggunakan gRPC.)

Cakupan akses berlaku per instance. Anda menetapkan cakupan akses saat membuat instance, dan cakupan akses hanya akan dipertahankan selama masa pakai instance.

Umumnya, dokumentasi untuk setiap metode API mencantumkan cakupan yang diperlukan untuk metode tersebut. Misalnya, metode instances.insert menyediakan daftar cakupan yang valid di bagian otorisasi.

Cakupan akses tidak akan berpengaruh jika Anda belum mengaktifkan API terkait pada project yang memiliki akun layanan tersebut. Misalnya, memberikan cakupan akses untuk Cloud Storage pada instance mesin virtual memungkinkan instance memanggil Cloud Storage API hanya jika Anda telah mengaktifkan Cloud Storage API pada project.

Cakupan default

Saat Anda membuat instance Compute Engine baru, instance tersebut akan otomatis dikonfigurasi dengan cakupan akses berikut:

  • Akses hanya baca ke Cloud Storage:
    https://www.googleapis.com/auth/devstorage.read_only
  • Akses tulis untuk menulis log Compute Engine:
    https://www.googleapis.com/auth/logging.write
  • Akses tulis untuk memublikasikan data metrik ke project Google Cloud Anda:
    https://www.googleapis.com/auth/monitoring.write
  • Akses hanya baca ke fitur Pengelolaan Layanan yang diperlukan untuk Google Cloud Endpoint(Alfa):
    https://www.googleapis.com/auth/service.management.readonly
  • Akses baca/tulis ke fitur Kontrol Layanan yang diperlukan untuk Google Cloud Endpoint(Alfa):
    https://www.googleapis.com/auth/servicecontrol
  • Akses tulis ke Cloud Trace memungkinkan aplikasi yang berjalan di VM untuk menulis data rekaman aktivitas ke sebuah project.
    https://www.googleapis.com/auth/trace.append

Praktik terbaik cakupan

Ada banyak cakupan akses yang dapat dipilih, tetapi sebaiknya tetapkan cakupan akses cloud-platform, yang merupakan cakupan OAuth untuk layanan Google Cloud, lalu mengontrol akses akun layanan dengan memberikan peran IAM.

https://www.googleapis.com/auth/cloud-platform

Contoh cakupan

Dengan mengikuti praktik terbaik cakupan, jika Anda mengaktifkan cakupan akses cloud-platform pada instance, lalu memberikan peran IAM yang telah ditetapkan sebelumnya berikut:

  • roles/compute.instanceAdmin.v1
  • roles/storage.objectViewer
  • roles/compute.networkAdmin

Kemudian, akun layanan hanya memiliki izin yang disertakan dalam ketiga peran tersebut. Aplikasi yang meniru akun layanan tersebut tidak dapat melakukan tindakan di luar peran ini meskipun ada cakupan akses Google Cloud.

Di sisi lain, jika Anda memberikan cakupan yang lebih ketat pada instance, seperti cakupan hanya baca (https://www.googleapis.com/auth/devstorage.read_only) Cloud Storage, dan menetapkan peran administrator roles/storage.objectAdmin di akun layanan, maka secara default, permintaan dari gcloud CLI dan library klien tidak akan dapat mengelola objek Cloud Storage dari instance tersebut, meskipun Anda sudah memberikan izin untuk akun layanan peran roles/storage.ObjectAdmin. Hal ini dikarenakan cakupan hanya baca Cloud Storage tidak mengizinkan instance untuk memanipulasi data Cloud Storage.

Contoh cakupan akses meliputi:

  • https://www.googleapis.com/auth/cloud-platform. Lihat dan kelola data Anda di seluruh layanan Google Cloud pada project Google Cloud yang ditentukan.
  • https://www.googleapis.com/auth/compute. Akses kontrol penuh ke metode Compute Engine.
  • https://www.googleapis.com/auth/compute.readonly. Akses hanya baca ke metode Compute Engine.
  • https://www.googleapis.com/auth/devstorage.read_only. Akses hanya baca ke Cloud Storage.
  • https://www.googleapis.com/auth/logging.write. Akses tulis ke log Compute Engine.

Langkah selanjutnya