Peran untuk autentikasi akun layanan

Akun utama dapat menggunakan akun layanan untuk mengautentikasi dengan beberapa cara berbeda. Setiap jenis autentikasi mengharuskan akun utama untuk memiliki izin Identity and Access Management (IAM) tertentu pada akun layanan.

Halaman ini menjelaskan peran yang dapat Anda berikan kepada akun utama agar dapat meniru identitas akun layanan atau menambahkan akun layanan ke resource. Panduan ini juga menjelaskan izin yang Anda butuhkan dalam skenario umum.

Untuk mempelajari tentang berbagai cara untuk mengautentikasi dengan akun layanan, lihat Kredensial akun layanan dan Peniruan identitas akun layanan.

Peran akun layanan

Bagian ini menjelaskan peran yang memungkinkan akun utama melakukan autentikasi dengan akun layanan. Untuk mempelajari cara memberikan dan mencabut peran tersebut, lihat Mengelola akses ke akun layanan.

Peran Pengguna Akun Layanan

Peran Pengguna Akun Layanan (roles/iam.serviceAccountUser) memungkinkan akun utama melampirkan akun layanan ke resource. Saat kode yang dijalankan pada resource tersebut perlu untuk diautentikasi, kode tersebut bisa mendapatkan kredensial untuk akun layanan yang terpasang.

Peran ini tidak mengizinkan akun utama untuk membuat kredensial jangka pendek untuk akun layanan, atau untuk menggunakan flag --impersonate-service-account untuk Google Cloud CLI. Untuk menyelesaikan tugas ini, Anda memerlukan peran Pembuat Token Akun Layanan di akun layanan.

Peran Pembuat Token Akun Layanan

Peran Pembuat Token Akun Layanan (roles/iam.serviceAccountTokenCreator) memungkinkan akun utama membuat kredensial jangka pendek untuk akun layanan.

Peran Pembuat Token Akun Layanan memungkinkan Anda membuat jenis kredensial jangka pendek berikut ini:

  • Token akses OAuth 2.0, yang dapat Anda gunakan untuk mengautentikasi dengan Google API
  • Token ID OpenID Connect (OIDC)
  • Token Web JSON (JWT) yang ditandatangani dan blob biner

Peran Pembuat Token Akun Layanan juga memungkinkan akun utama menggunakan flag --impersonate-service-account untuk gcloud CLI. Saat Anda menggunakan flag ini, gcloud CLI secara otomatis membuat kredensial jangka pendek untuk akun layanan.

Izin peran mencakup hal berikut ini:

  • iam.serviceAccounts.getAccessToken: memungkinkan Anda membuat token akses OAuth 2.0
  • iam.serviceAccounts.getOpenIdToken: memungkinkan Anda membuat token ID OpenID Connect (OIDC)
  • iam.serviceAccounts.implicitDelegation: memungkinkan akun layanan mendapatkan token dalam rantai delegasi
  • iam.serviceAccounts.signBlob: memungkinkan Anda menandatangani blob biner
  • iam.serviceAccounts.signJwt: memungkinkan Anda menandatangani JWT

Pembuat Token Identitas OpenID Connect Akun Layanan

Peran Pembuat Token Identitas OpenID Connect pada Akun Layanan (roles/iam.serviceAccountOpenIdTokenCreator) memungkinkan akun utama membuat token ID OIDC jangka pendek. Jika Anda hanya perlu untuk membuat token ID OIDC, gunakan peran ini. Jika Anda perlu membuat jenis token lain, gunakan peran Pembuat Token Akun Layanan sebagai gantinya.

Peran ini mencakup izin iam.serviceAccounts.getOpenIdToken, yang memungkinkan Anda membuat token ID OIDC.

Peran Pengguna Workload Identity

Peran Pengguna Workload Identity (roles/iam.workloadIdentityUser) memungkinkan akun utama meniru identitas akun layanan dari workload GKE.

Izin peran mencakup hal berikut ini:

  • iam.serviceAccounts.getAccessToken: memungkinkan Anda membuat token akses OAuth 2.0
  • iam.serviceAccounts.getOpenIdToken: memungkinkan Anda membuat token ID OpenID Connect (OIDC)

Izin akun layanan untuk skenario umum

Akun layanan dapat digunakan dalam berbagai skenario, dan masing-masing memerlukan izin tertentu. Bagian ini menjelaskan skenario umum dan izin apa yang diperlukan.

Melampirkan akun layanan ke resource

Jika ingin memulai tugas berdurasi panjang yang mengautentikasi sebagai akun layanan, Anda harus melampirkan akun layanan ke resource yang akan menjalankan tugas tersebut.

Izin:

  • Izin untuk membuat resource
  • iam.serviceAccounts.actAs

Untuk menemukan peran yang menyertakan izin ini, telusuri daftar peran untuk izin tersebut.

Ada beberapa resource Google Cloud berbeda yang dapat menjalankan tugas berdurasi panjang sebagai akun layanan. Beberapa contoh resource ini mencakup:

  • VM Compute Engine
  • Aplikasi App Engine
  • Cloud Functions

Saat membuat resource ini, Anda memiliki opsi untuk melampirkan akun layanan. Akun layanan ini bertindak sebagai identitas resource.

Untuk membuat resource dan melampirkan akun layanan, Anda memerlukan izin untuk membuat resource tersebut dan izin untuk melampirkan akun layanan ke resource. Izin untuk melampirkan akun layanan ke resource yang disediakan oleh peran apa pun yang mencakup izin iam.serviceAccounts.actAs—misalnya, peran Pengguna Akun Layanan (roles/iam.serviceAccountUser).

Setelah membuat resource dan melampirkan akun layanan ke resource tersebut, Anda dapat memulai tugas yang berdurasi panjang pada resource tersebut. Tugas ini dijalankan sebagai akun layanan yang terlampir ke resource, dan menggunakan akun layanan tersebut untuk mengizinkan permintaan ke Google Cloud API.

Untuk mempelajari lebih lanjut tentang cara melampirkan akun layanan ke resource, lihat Melampirkan akun layanan ke resource.

Meniru identitas akun layanan

Izin:

  • iam.serviceAccounts.getAccessToken
  • iam.serviceAccounts.signBlob
  • iam.serviceAccounts.signJwt
  • iam.serviceAccounts.implicitDelegation

Peran:

  • roles/iam.serviceAccountTokenCreator (Pembuat Token Akun Layanan)

Setelah diberi izin yang diperlukan, pengguna (atau akun layanan lainnya) dapat meniru identitas akun layanan dalam beberapa skenario umum.

Pertama, pengguna dapat melakukan autentikasi sebagai akun layanan. Misalnya, mereka bisa mendapatkan kredensial jangka pendek untuk akun layanan menggunakan izin iam.serviceAccounts.getAccessToken dan dengan memanggil metode generateAccessToken(). Atau, mereka dapat menggunakan flag --impersonate-service-account untuk gcloud CLI guna meniru identitas akun layanan. Saat pengguna melakukan autentikasi sebagai akun layanan, pengguna dapat memberikan perintah ke Google Cloud dan dapat mengakses semua resource yang aksesnya dimiliki oleh akun layanan.

Kedua, pengguna bisa mendapatkan artefak yang ditandatangani oleh kunci pribadi yang dikelola Google dari akun layanan menggunakan izin iam.serviceAccounts.signBlob dan dengan memanggil metode signBlob() atau signJwt(). Kunci pribadi yang dikelola Google selalu disimpan di dana jaminan dan tidak pernah diekspos secara langsung. signBlob() mengizinkan penandatanganan payload arbitrer (seperti URL yang ditandatangani Cloud Storage), sedangkan signJwt() hanya mengizinkan penandatanganan JWT yang diformat dengan baik.

Terakhir, pengguna dapat meniru identitas akun layanan tanpa harus mengambil kredensial untuk akun layanan. Hal ini adalah kasus penggunaan lanjutan, dan hanya didukung untuk akses terprogram yang menggunakan metode generateAccessToken(). Dalam skenario dengan minimal 3 akun layanan, yaitu A, B, dan C: akun layanan A bisa mendapatkan token akses untuk akun layanan C jika akun layanan A diberi izin iam.serviceAccounts.implicitDelegation pada B, dan B diberi izin iam.serviceAccounts.getAccessToken di C.

Membuat token ID OpenID Connect (OIDC)

Izin:

  • iam.serviceAccounts.getOpenIdToken

Peran:

  • roles/iam.serviceAccountOpenIdTokenCreator (Pembuat Token Identitas OpenID Connect Akun Layanan)

Pengguna (atau layanan) dapat membuat token JWT yang kompatibel dengan OpenID Connect (OIDC) yang ditandatangani oleh Penyedia OIDC Google (accounts.google.com) yang mewakili identitas akun layanan menggunakan iziniam.serviceAccounts.getOpenIdToken.

Token ini tidak diterima secara langsung oleh sebagian besar Google API jika organisasi Anda tidak men-deploy federasi identitas tambahan untuk memberikan akses ke Google. Ada beberapa pengecualian—misalnya, Identity-Aware Proxy, yang memungkinkan akses berbasis OIDC ke aplikasi yang dijalankan pengguna.

Membuat kunci pribadi eksternal

Izin:

  • iam.serviceAccountKeys.create

Peran:

  • roles/editor (Editor)
  • roles/iam.serviceAccountKeyAdmin (Admin Kunci Akun Layanan)

Pengguna atau layanan dapat menghasilkan materi kunci pribadi eksternal (RSA) yang dapat digunakan untuk melakukan autentikasi secara langsung ke Google sebagai akun layanan. Materi kunci ini kemudian dapat digunakan dengan library Kredensial Default Aplikasi (ADC), atau dengan perintah gcloud auth activate-service-account. Setiap orang yang mendapatkan akses ke materi kunci akan memiliki akses penuh ke semua resource yang dapat diakses oleh akun layanan. Materi kunci pribadi tersebut harus diperlakukan dengan perhatian tinggi, dan harus dianggap kurang aman jika semakin lama materi tersebut ada. Oleh karena itu, merotasi material kunci pribadi sangat penting untuk mempertahankan keamanan yang kuat.

Praktik terbaik untuk memberikan peran pada akun layanan

Jika akun layanan telah diberi izin untuk melakukan operasi dengan hak istimewa tinggi, berhati-hatilah saat memberikan peran Pengguna Akun Layanan kepada pengguna di akun layanan tersebut.

Akun layanan mewakili keamanan tingkat layanan Anda. Keamanan layanan ditentukan oleh orang yang memiliki peran IAM untuk mengelola dan menggunakan akun layanan, serta orang yang memiliki kunci akun layanan untuk akun layanan tersebut. Praktik terbaik untuk memastikan keamanan yang meliputi:

  • Gunakan IAM API untuk mengaudit akun layanan, kunci, dan kebijakan izin pada akun layanan tersebut.
  • Jika akun layanan Anda tidak memerlukan kunci akun layanan, nonaktifkan atau hapus kunci tersebut.
  • Jika pengguna tidak memerlukan izin untuk mengelola atau menggunakan akun layanan, hapus izin tersebut dari kebijakan izin yang berlaku.
  • Pastikan akun layanan tersebut memiliki izin sedikit mungkin. Gunakan akun layanan default dengan hati-hati, karena akun tersebut secara otomatis diberi peran Editor (roles/editor) pada project.

Untuk mempelajari lebih lanjut tentang praktik terbaik, lihat Praktik terbaik untuk bekerja dengan akun layanan.

Cobalah sendiri

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

Mulai secara gratis