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.0iam.serviceAccounts.getOpenIdToken
: memungkinkan Anda membuat token ID OpenID Connect (OIDC)iam.serviceAccounts.implicitDelegation
: memungkinkan akun layanan mendapatkan token dalam rantai delegasiiam.serviceAccounts.signBlob
: memungkinkan Anda menandatangani blob bineriam.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.0iam.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