Dokumen ini menjelaskan cara mengonfigurasi virtual machine (VM) yang sudah ada agar dapat menggunakan akun layanan lain. 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 workload, seperti aplikasi kustom, perlu mengakses resource Google Cloud atau melakukan tindakan tanpa melibatkan 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
-
Siapkan autentikasi, jika Anda belum melakukannya.
Autentikasi adalah proses verifikasi identitas Anda untuk akses ke layanan dan API Google Cloud.
Untuk menjalankan kode atau contoh dari lingkungan pengembangan lokal, Anda dapat melakukan autentikasi ke Compute Engine sebagai berikut.
Pilih tab untuk melihat bagaimana Anda berencana menggunakan contoh di halaman ini:
Konsol
Saat menggunakan Konsol Google Cloud untuk mengakses API dan layanan Google Cloud, Anda tidak perlu menyiapkan autentikasi.
gcloud
-
Instal Google Cloud CLI, lalu initialize dengan menjalankan perintah berikut:
gcloud init
- Menetapkan region dan zona default.
REST
Untuk menggunakan contoh REST API di halaman ini dalam lingkungan pengembangan lokal, gunakan kredensial yang Anda berikan ke gcloud CLI.
Instal Google Cloud CLI, lalu initialize dengan menjalankan perintah berikut:
gcloud init
-
Peran yang diperlukan
Untuk mendapatkan izin yang diperlukan untuk mengonfigurasi akun layanan pada VM,
minta administrator untuk memberi Anda
peran IAM Compute Instance Admin (v1) (roles/compute.instanceAdmin.v1
) di VM atau project Anda.
Untuk mengetahui informasi selengkapnya tentang cara memberikan peran, lihat Mengelola akses.
Peran bawaan ini berisi izin yang diperlukan untuk mengonfigurasi akun layanan di VM Anda. Untuk melihat izin yang benar-benar diperlukan, perluas bagian Izin yang diperlukan:
Izin yang diperlukan
Izin berikut diperlukan untuk mengonfigurasi akun layanan di VM Anda:
-
compute.instances.setServiceAccount
-
compute.instances.stop
-
compute.instances.start
Anda mungkin juga bisa mendapatkan izin ini dengan peran khusus atau peran bawaan lainnya.
Ringkasan
Sebaiknya konfigurasi akun layanan untuk VM Anda sebagai berikut:
- 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.
- Sertakan akun layanan ke VM Anda.
- 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.
- Jika Anda menentukan akun layanan menggunakan konsol Google Cloud, cakupan akses VM otomatis ditetapkan ke cakupan
Menyiapkan akun layanan
Anda dapat membuat akun layanan yang dikelola pengguna atau menggunakan akun layanan default Compute Engine. Sebaiknya gunakan akun layanan yang dikelola pengguna.
Untuk akun layanan yang dipilih, pastikan peran Identity and Access Management (IAM) yang diperlukan telah ditetapkan.
Dikelola pengguna
Jika Anda belum memiliki akun layanan yang dikelola pengguna, buat akun layanan. Untuk mengetahui petunjuk detailnya, lihat Menyiapkan akun layanan.
Default
Jika Anda familier dengan akun layanan default Compute Engine dan ingin menggunakan kredensial yang disediakan oleh akun layanan default daripada membuat akun layanan baru, Anda dapat memberikan peran IAM ke akun layanan default.
Sebelum Anda menetapkan peran IAM ke akun layanan default, perhatikan bahwa:
Pemberian peran IAM ke akun layanan default akan memengaruhi semua VM yang berjalan sebagai akun layanan default. Misalnya, jika Anda memberikan peran
roles/storage.objectAdmin
kepada akun layanan default, semua VM yang berjalan sebagai akun layanan default dengan cakupan akses yang diperlukan akan memiliki izin yang diberikan oleh peranroles/storage.objectAdmin
. Demikian pula, jika Anda membatasi akses dengan menghilangkan peran tertentu, hal ini akan memengaruhi semua VM yang berjalan sebagai akun layanan default.Sebaiknya hapus peran Editor dasar untuk akun layanan default. Akun layanan default ditambahkan sebagai editor project ke project secara default. Untuk menggunakan peran IAM, cabut peran Editor dasar.
Jika Anda tidak yakin dengan pemberian peran IAM ke akun layanan default, buat akun layanan baru yang dikelola pengguna.
Ikuti petunjuk berikut untuk memberikan peran IAM ke akun layanan default:
Di konsol Google Cloud, buka halaman IAM.
Jika diminta, pilih sebuah project.
Cari akun layanan bernama Akun Layanan Default Compute Engine.
Di kolom Peran, luaskan menu drop-down untuk Akun Layanan Default Compute Engine.
Hapus akses Editor dan simpan perubahan Anda.
Selanjutnya, berikan peran IAM ke akun layanan.
Kini, setiap instance virtual machine yang saat ini berjalan sebagai akun layanan default akan memiliki akses ke Google Cloud API lainnya sesuai dengan peran IAM yang Anda berikan ke akun.
Menyertakan akun layanan dan memperbarui cakupan akses
Untuk mengubah akun layanan dan cakupan akses VM, VM harus dihentikan untuk sementara.
Jika akun layanan berada di project yang berbeda dengan VM, Anda harus mengonfigurasi akun layanan untuk resource di project yang berbeda.
Gunakan salah satu metode berikut untuk mengubah akun layanan dan cakupan akses di VM Anda.
Konsol
Buka halaman VM instances.
Klik nama instance VM yang akun layanannya ingin Anda ubah.
Jika VM tidak dihentikan, klik Hentikan. Tunggu hingga VM dihentikan.
Klik Edit.
Scroll ke bawah ke bagian Service Account.
Dari menu drop-down, pilih akun layanan yang akan ditetapkan ke VM.
- Jika Anda memilih akun layanan yang dikelola pengguna, cakupan akses VM akan ditetapkan secara default ke cakupan
cloud-platform
yang direkomendasikan. Jika Anda memerlukan cakupan yang berbeda untuk akun layanan yang dikelola pengguna, gunakan gcloud CLI atau Compute Engine API untuk menambahkan akun layanan. - Jika memilih akun layanan default Compute Engine, Anda dapat mengubah cakupan aksesnya di konsol Google Cloud.
- Untuk mengubah cakupan, di bagian Cakupan akses, pilih Tetapkan akses untuk setiap API, lalu tetapkan cakupan yang sesuai dengan kebutuhan Anda.
- Direkomendasikan Jika tidak yakin dengan cakupan akses yang tepat untuk ditetapkan, pilih Izinkan akses penuh ke semua Cloud API lalu pastikan untuk membatasi akses dengan menetapkan peran IAM pada akun layanan.
- Jika Anda memilih akun layanan yang dikelola pengguna, cakupan akses VM akan ditetapkan secara default ke cakupan
Klik Simpan untuk menyimpan perubahan.
Klik Mulai/Lanjutkan untuk mereset VM.
gcloud
Hentikan VM dengan menggunakan perintah
instances stop
. GantiVM_NAME
dengan nama instance VM Anda.gcloud compute instances stop VM_NAME
Sertakan akun layanan. Untuk menyertakan akun layanan, gunakan perintah
instances set-service-account
dan masukkan nama VM, email akun layanan, dan cakupan yang diinginkan. Untuk mengetahui informasi selengkapnya tentang cara menetapkan cakupan akses, lihat Praktik terbaik.gcloud compute instances set-service-account VM_NAME \ --service-account=SERVICE_ACCOUNT_EMAIL \ --scopes=SCOPES
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.Jika Anda ingin menghapus akun layanan dari VM, gunakan flag
--no-service-account
.VM_NAME
: nama instance VM.SCOPES
: daftar URI atau alias cakupan yang dipisahkan koma, yang diberikan dalam deskripsi tanda--scopes
.Jika Anda ingin menghapus semua cakupan untuk VM, gunakan flag
--no-scopes
.
Misalnya, perintah berikut menetapkan akun layanan
my-sa-123@my-project-123.iam.gserviceaccount.com
ke VM yang disebut example-instance dan menetapkan cakupan akses pada VM tersebut untuk mengizinkan akses baca/tulis ke Compute Engine dan akses hanya baca ke Cloud Storage:gcloud compute instances set-service-account example-instance \ --service-account=my-sa-123@my-project-123.iam.gserviceaccount.com \ --scopes=compute-rw,storage-ro
Mulai VM dengan menggunakan perintah
instances start
. GantiVM_NAME
dengan nama instance VM Anda.gcloud compute instances start VM_NAME
REST
Hentikan VM dengan membuat permintaan
POST
menggunakan metodeinstances.stop
:POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/stop
Ganti kode berikut:
PROJECT_ID
: project tempat VM Anda beradaZONE
: zona tempat VM Anda beradaVM_NAME
: nama VM yang ingin Anda hentikan
Sertakan akun layanan dengan membuat permintaan
POST
ke metodesetServiceAccount
:POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/setServiceAccount { "email": "SERVICE_ACCOUNT_EMAIL", "scopes": [ "SCOPE_URI", "SCOPE_URI", ... ] }
Ganti kode berikut:
PROJECT_ID
: project ID untuk permintaan ini.ZONE
: zona tempat VM ini berada.VM_NAME
: nama VM.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.SCOPE_URI
: URI cakupan yang diperlukan.
Misalnya, permintaan berikut menggunakan email akun layanan
my-sa-123@my-project-123.iam.gserviceaccount.com
serta menetapkan cakupan Cloud Storage dan BigQuery:POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/setServiceAccount { "email": "my-sa-123@my-project-123.iam.gserviceaccount.com", "scopes": [ "https://www.googleapis.com/auth/bigquery", "https://www.googleapis.com/auth/devstorage.read_only" ] }
Mulai VM dengan membuat permintaan
POST
menggunakan metodeinstances.start
:POST https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/start
Ganti kode berikut:
PROJECT_ID
: project tempat VM Anda beradaZONE
: zona tempat VM Anda beradaVM_NAME
: nama VM yang ingin Anda mulai
Melihat akun layanan yang digunakan oleh VM
Untuk melihat semua akun layanan dalam sebuah project, lihat Mencantumkan akun layanan.
Jika Anda perlu mengidentifikasi akun layanan yang sedang digunakan oleh VM, selesaikan salah satu prosedur berikut:
console
Buka halaman VM instances.
Klik nama instance VM yang akun layanannya ingin Anda ubah.
Buka bagian Pengelolaan API dan identitas. Bagian ini menampilkan akun layanan dan cakupan akses yang digunakan oleh VM.
gcloud
Jalankan
perintah gcloud compute instances describe
:
gcloud compute instances describe VM_NAME \ --format json
Outputnya mirip dengan hal berikut ini:
{ ... "serviceAccounts":[ { "email":"123845678986-compute@developer.gserviceaccount.com", "scopes":[ "https://www.googleapis.com/auth/devstorage.full_control" ] } ] ... }
Jika VM tidak menggunakan akun layanan, Anda akan menerima respons
tanpa properti serviceAccounts
.
Server Metadata
Buat kueri server metadata dari dalam VM itu sendiri. Buat permintaan ke
http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/
:
user@myinst:~$ curl "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/" \
-H "Metadata-Flavor: Google"
Jika Anda mengaktifkan satu atau beberapa akun layanan saat membuat instance, perintah curl
ini akan menampilkan output yang mirip dengan berikut ini:
123845678986-compute@developer.gserviceaccount.com/ default/
Jika instance tidak menggunakan akun layanan, Anda akan menerima respons kosong.
Praktik terbaik
- Batasi hak istimewa akun layanan dan periksa izin akun layanan Anda secara rutin untuk memastikan bahwa izin tersebut merupakan yang terbaru.
- Hapus akun layanan dengan hati-hati. Sebelum menghapusnya, pastikan aplikasi penting Anda tidak lagi menggunakan akun layanan. Jika Anda tidak yakin apakah akun layanan sedang digunakan, sebaiknya nonaktifkan akun layanan, bukan menghapusnya. Akun layanan yang dinonaktifkan dapat diaktifkan kembali jika masih diperlukan.
- Mitigasi risiko keamanan untuk akun layanan Anda. Untuk informasi selengkapnya, lihat Praktik terbaik untuk menggunakan akun layanan.