Untuk beberapa resource Google Cloud, Anda dapat menentukan akun yang dikelola pengguna yang digunakan resource sebagai identitas default. Proses ini disebut melampirkan akun layanan ke resource, atau mengaitkan akun layanan dengan resource.
Saat resource perlu mengakses layanan dan resource Google Cloud lainnya, resource akan menggunakan akun layanan terlampir sebagai identitasnya. Misalnya, jika Anda melampirkan akun ayanan ke instance Compute Engine, dan aplikasi pada instance tersebut menggunakan library klien untuk memanggil Google Cloud API, aplikasi tersebut akan mengautentikasi sebagai akun layanan yang dilampirkan secara otomatis.
Halaman ini menjelaskan cara mengonfigurasi akun layanan agar dapat melampirkan ke resource.
Sebelum memulai
Aktifkan API IAM and Resource Manager.
Pastikan Anda memahami cara kerja akun layanan di IAM.
Melampirkan akun layanan ke resource
Pada umumnya, Anda harus melampirkan akun layanan ke resource saat membuat resource tersebut. Setelah resource dibuat, Anda tidak dapat mengubah akun layanan yang dilampirkan ke resource tersebut. Instance Compute Engine adalah pengecualian untuk aturan ini; Anda dapat mengubah akun layanan mana yang terkait dengan instance sesuai kebutuhan.
Sebelum melampirkan akun layanan ke resource, Anda harus mengonfigurasi akun layanan. Proses ini berbeda-beda, tergantung pada apakah akun layanan dan resource berada dalam project yang sama atau berbeda. Setelah mengonfigurasi akun layanan, Anda dapat membuat resource dan melampirkan akun layanan ke resource tersebut.
Mengonfigurasi resource dalam project yang sama
Sebelum Anda melampirkan akun layanan ke resource lain dalam project yang sama, berikan peran ke akun layanan agar dapat mengakses resource yang sesuai, seperti peran yang Anda berikan ke resource utama lainnya.
Mengonfigurasi resource di project yang berbeda.
Dalam beberapa kasus, Anda mungkin perlu melampirkan akun layanan ke resource yang berada di project yang berbeda. Misalnya, jika membuat semua akun layanan Anda dalam satu project, Anda mungkin perlu untuk melampirkan salah satunya ke resource baru di project yang berbeda.
Sebelum Anda melampirkan akun layanan ke resource di project lainnya, lakukan langkah berikut:
- Pada project tempat akun layanan disimpan, ikuti langkah-langkah di halaman ini untuk mengaktifkan akun layanan agar dapat dilampirkan ke semua project.
- Identifikasi project tempat Anda akan membuat resource.
Identifikasi jenis resource yang akan dilampirkan ke akun layanan, serta layanan yang memiliki jenis resource tersebut.
Misalnya, jika Anda membuat langganan Pub/Sub, maka Pub/Sub merupakan layanan yang memiliki resource tersebut.
Temukan alamat email agen layanan untuk layanan tersebut.
Layanan yang berbeda menggunakan agen layanan yang berbeda. Untuk mengetahui detailnya, lihat Agen layanan.
Berikan peran Pembuat Token Akun Layanan (
roles/iam.serviceAccountTokenCreator
) kepada agen layanan:Konsol
Di Konsol Google Cloud, buka halaman Service accounts.
Pilih project yang memiliki akun layanan yang akan Anda lampirkan ke resource.
Klik alamat email akun layanan yang akan Anda lampirkan ke resource.
Buka tab Izin dan temukan bagian Akun utama yang memiliki akses ke akun layanan ini.
Klik
Berikan akses, lalu masukkan alamat email agen layanan.Klik Pilih peran , jenis
Service Account Token Creator
, lalu klik peran.Klik Simpan untuk menyimpan perubahan.
Opsional: Jika Anda perlu memberikan peran kepada agen layanan lainnya, ulangi langkah-langkah sebelumnya.
gcloud
Guakan perintah
gcloud iam service-accounts add-iam-policy-binding
:gcloud iam service-accounts add-iam-policy-binding \ SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \ --member=serviceAccount:SERVICE_AGENT_EMAIL \ --role=roles/iam.serviceAccountTokenCreator
Ganti nilai berikut:
SERVICE_ACCOUNT_NAME
: Nama akun layanan yang dikelola pengguna yang Anda lampirkan ke resource.PROJECT_ID
: ID Project tempat akun layanan yang yang dikelola pengguna berada.SERVICE_AGENT_EMAIL
: Alamat email untuk agen layanan.
Perintah ini mencetak kebijakan izin yang diperbarui untuk akun layanan yang dikelola pengguna.
Opsional: Jika Anda perlu memberikan peran ke agen layanan lainnya, jalankan perintah lagi.
REST
Untuk memberikan peran ini, gunakan pola baca-ubah-tulis guna memperbarui kebijakan izin untuk akun layanan yang dikelola pengguna.
Pertama, baca kebijakan izin untuk akun layanan yang dikelola pengguna:
Metode
projects.serviceAccounts.getIamPolicy
menampilkan kebijakan izin untuk akun layanan.Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:
PROJECT_ID
: Project ID Google Cloud Anda ID project adalah string alfanumerik, sepertimy-project
.-
USER_SA_NAME
: Nama akun layanan yang dikelola pengguna yang Anda binding ke resource.
Metode HTTP dan URL:
POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/USER_SA_NAME@PROJECT_ID.iam.gserviceaccount.com:getIamPolicy
Meminta isi JSON:
{ "requestedPolicyVersion": 3 }
Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:
Anda akan melihat respons JSON seperti berikut:
{ "version": 1, "etag": "BwWl3KCTUMY=", "bindings": [ { "role": "roles/iam.serviceAccountUser", "members": [ "serviceAccount:my-service-account@my-project.iam.gserviceaccount.com" ] } ] }
Selanjutnya, ubah kebijakan izin untuk memberikan peran Pembuat Token Akun Layanan kepada agen layanan.
{ "version": 1, "etag": "BwWl3KCTUMY=", "bindings": [ { "role": "roles/iam.serviceAccountTokenCreator", "members": [ "serviceAccount:SERVICE_AGENT_EMAIL" ] }, { "role": "roles/iam.serviceAccountUser", "members": [ "serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" ] } ] }
Ganti kode berikut:
SERVICE_AGENT_EMAIL
: Alamat email untuk agen layananSERVICE_ACCOUNT_NAME
: Nama akun layanan yang dikelola pengguna.PROJECT_ID
: ID Project tempat akun layanan yang yang dikelola pengguna berada.
Terakhir, tulis kebijakan izin yang telah diperbarui:
Metode
projects.serviceAccounts.setIamPolicy
yang diperbarui kebijakan izin pada akun layanan Anda.Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:
PROJECT_ID
: Project ID Google Cloud Anda Project ID adalah string alfanumerik, sepertimy-project
.-
USER_SERVICE_ACCOUNT_NAME
: Nama akun layanan yang dikelola pengguna yang Anda ikat ke resource. -
SERVICE_AGENT_EMAIL
: Alamat email agen layanan yang akan membuat token akses untuk akun layanan yang dikelola pengguna Anda.
Metode HTTP dan URL:
POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com:setIamPolicy
Meminta isi JSON:
{ "policy": { "version": 1, "etag": "BwWl3KCTUMY=", "bindings": [ { "role": "roles/iam.serviceAccountTokenCreator", "members": [ "serviceAccount:SERVICE_AGENT_EMAIL" ] }, { "role": "roles/iam.serviceAccountUser", "members": [ "serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" ] } ] } }
Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:
Anda akan menerima respons JSON seperti berikut:
{ "version": 1, "etag": "BwWo331TkHE=", "bindings": [ { "role": "roles/iam.serviceAccountTokenCreator", "members": [ "serviceAccount:SERVICE_AGENT_EMAIL" ] }, { "role": "roles/iam.serviceAccountUser", "members": [ "serviceAccount:my-service-account@my-project.iam.gserviceaccount.com" ] } ] }
Lampirkan akun layanan ke resource baru
Setelah mengonfigurasi akun layanan yang dikelola pengguna, Anda dapat membuat resource baru dan melampiirkan akun layanan ke resource. Pastikan Anda membuat resource baru di project yang sesuai.
Lihat petunjuk untuk jenis resource yang ingin Anda buat:
Melampirkan akun layanan saat membuat resource | |
---|---|
AI Platform Prediction | Versi model |
AI Platform Training | Pekerjaan |
Lingkungan standar App Engine | Versi aplikasi |
Lingkungan fleksibel App Engine | Versi aplikasi |
Cloud Composer | Lingkungan |
Cloud Functions | Cloud Function |
Cloud Life Sciences | Pipelines |
Cloud Run | Layanan |
Cloud Scheduler | Pekerjaan |
Cloud Source Repositories |
|
Compute Engine | |
Dataflow | Pekerjaan |
Datalab | Instance |
Dataproc | Cluster |
Eventarc | Triggers |
Google Kubernetes Engine | |
Notebook | Instance notebook |
Pub/Sub | Langganan |
Vertex AI | |
Workflows | Workflows |
Setelah Anda membuat resource dan melampirkan akun layanan ke resource, Anda dapat memberikan peran ke akun layanan agar dapat mengakses resource yang sesuai. Proses ini sama dengan memberikan peran ke akun utama lainnya.
Untuk mempelajari cara memberikan peran, lihat Memberikan, mengubah, dan mencabut akses ke resource.
Lampirkan akun layanan ke resource di project lain
Secara default, Anda tidak dapat membuat akun layanan pada satu project dan melampirkannya ke resource pada project lain. Jika ingin menyimpan semua akun layanan dalam satu project, Anda harus memperbarui kebijakan organisasi untuk project tersebut.
Mengaktifkan akun layanan untuk dilampirkan di seluruh project
Agar pengguna dapat melampirkan akun layanan dalam satu project ke resource di project lainnya, periksa boolean constraints berikut, pada kebijakan organisasi untuk project tempat akun layanan Anda berada.
Pastikan bahwa batasan boolean
iam.disableCrossProjectServiceAccountUsage
tidak diterapkan di untuk project.Batasan boolean ini mengontrol apakah Anda dapat melampirkan akun layanan ke resource pada project lain. Batasan diterapkan secara default.
Jika batasan ini tidak diterapkan, IAM akan menambahkan lien project yang dapat mencegah project terhapus. Lien ini memiliki
iam.googleapis.com/cross-project-service-accounts
asal. Sebaiknya Anda tidak menghapus lien ini.Direkomendasikan: Pastikan batasa boolean
iam.restrictCrossProjectServiceAccountLienRemoval
diterapkan untuk project.Batasan boolean ini memastikan akunutama dapat menghapus lien project hanya jika diberikan izin
resourcemanager.projects.updateLiens
pada tingkat organisasi. Jika batasan ini tidak diterapkan, akun utama dapat menghapus lien project jika memiliki izin ini di level project.
Untuk mempelajari cara melihat atau mengubah batasan boolean dalam kebijakan organisasi, lihat Membuat dan mengelola kebijakan organisasi.
Menonaktifkan akun layanan agar tidak dilampirkan di seluruh project
Jika sebelumnya Anda mengaktifkan akun layanan dapat dilampirkan di semua project, sebaiknya Anda tidak menonaktifkan fitur ini, terutama pada lingkungan produksi.
Khususnya pada project tempat akun layanan Anda berada, Anda tidak boleh membuat perubahan berikut:
- Jangan memperbarui kebijakan organisasi project ke menerapkan
batasan boolean
iam.disableCrossProjectServiceAccountUsage
. - Jangan memperbarui kebijakan organisasi project ke tidak menerapkan
batasan boolean
iam.restrictCrossProjectServiceAccountLienRemoval
. - Jangan hapus lien project dengan
iam.googleapis.com/cross-project-service-accounts
asal, agar Anda tidak dapat menghapus project. - Jangan menghapus project.
Jika Anda bersedia menerima risiko penonaktifan fitur ini, Anda dapat mengurangi risiko dengan menonaktifkan akun layanan yang Anda gunakan di semua project, kemudian memantau lingkungan Google Cloud Anda selama masalah. Jika melihat masalah lain, Anda dapat mengaktifkan kembali akun layanan. Jika Anda tidak menemukan masalah, Anda mungkin tidak memiliki resource Google Cloud yang bergantung pada akun layanan di project yang berbeda.
Langkah selanjutnya
- Cari tahu cara melampirkan akun layanan ke instance Compute Engine.
- Tinjau dan terapkan praktik terbaik untuk mengamankan akun layanan.
- Pelajari tentang logging audit untuk IAM lebih lanjut.