Mengubah akun layanan yang terpasang


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

    1. Instal Google Cloud CLI, lalu initialize dengan menjalankan perintah berikut:

      gcloud init
    2. 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:

  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

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 peran roles/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:

  1. Di konsol Google Cloud, buka halaman IAM.

    Buka IAM

  2. Jika diminta, pilih sebuah project.

  3. Cari akun layanan bernama Akun Layanan Default Compute Engine.

  4. Di kolom Peran, luaskan menu drop-down untuk Akun Layanan Default Compute Engine.

  5. Hapus akses Editor dan simpan perubahan Anda.

  6. 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

  1. Buka halaman VM instances.

    Buka instance VM

  2. Klik nama instance VM yang akun layanannya ingin Anda ubah.

  3. Jika VM tidak dihentikan, klik Hentikan. Tunggu hingga VM dihentikan.

  4. Klik Edit.

  5. Scroll ke bawah ke bagian Service Account.

  6. 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.
  7. Klik Simpan untuk menyimpan perubahan.

  8. Klik Mulai/Lanjutkan untuk mereset VM.

gcloud

  1. Hentikan VM dengan menggunakan perintah instances stop. Ganti VM_NAME dengan nama instance VM Anda.

    gcloud compute instances stop VM_NAME
    
  2. 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
    
  3. Mulai VM dengan menggunakan perintah instances start. Ganti VM_NAME dengan nama instance VM Anda.

    gcloud compute instances start VM_NAME
    

REST

  1. Hentikan VM dengan membuat permintaan POST menggunakan metode instances.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 berada
    • ZONE: zona tempat VM Anda berada
    • VM_NAME: nama VM yang ingin Anda hentikan
  2. Sertakan akun layanan dengan membuat permintaan POST ke metode setServiceAccount:

    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"
      ]
    }
    
  3. Mulai VM dengan membuat permintaan POST menggunakan metode instances.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 berada
    • ZONE: zona tempat VM Anda berada
    • VM_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

  1. Buka halaman VM instances.

    Buka instance VM

  2. Klik nama instance VM yang akun layanannya ingin Anda ubah.

  3. 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.

Apa langkah selanjutnya?