Melampirkan akun layanan ke resource

Untuk beberapa resource Google Cloud, Anda dapat menentukan akun layanan yang dikelola pengguna yang digunakan resource sebagai identitas default. Proses ini disebut melampirkan akun layanan ke resource, atau mengaitkan akun layanan dengan resource. Saat kode yang berjalan pada resource mengakses layanan dan resource Google Cloud, kode tersebut akan menggunakan akun layanan yang terkait dengan resource tersebut sebagai identitasnya. Misalnya, jika Anda melampirkan akun layanan ke instance Compute Engine, dan aplikasi pada instance tersebut menggunakan library klien untuk memanggil Google Cloud API, aplikasi tersebut akan otomatis menggunakan akun layanan yang terpasang untuk autentikasi dan otorisasi.

Halaman ini menjelaskan cara mengonfigurasi akun layanan agar dapat melampirkan ke resource.

Sebelum memulai

Peran yang diperlukan

Untuk mendapatkan izin yang diperlukan untuk melampirkan akun layanan ke resource, minta administrator untuk memberi Anda peran IAM Pengguna Akun Layanan (roles/iam.serviceAccountUser) di akun layanan. Untuk mengetahui informasi selengkapnya tentang cara memberikan peran, lihat Mengelola akses ke project, folder, dan organisasi.

Peran yang telah ditentukan ini berisi izin iam.serviceAccounts.actAs, yang diperlukan untuk melampirkan akun layanan ke resource.

Anda mungkin juga bisa mendapatkan izin ini dengan peran khusus atau peran bawaan lainnya.

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 dikecualikan untuk peraturan ini; Anda dapat mengubah akun layanan yang dilampirkan ke 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:

  1. Pada project tempat akun layanan disimpan, ikuti langkah-langkah di halaman ini untuk mengaktifkan akun layanan agar dapat dilampirkan ke semua project.
  2. Identifikasi project tempat Anda akan membuat resource.
  3. 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.

  4. Temukan alamat email agen layanan untuk layanan tersebut.

    Layanan yang berbeda menggunakan agen layanan yang berbeda. Untuk mengetahui detailnya, lihat Agen layanan.

  5. Berikan peran Pembuat Token Akun Layanan (roles/iam.serviceAccountTokenCreator) kepada agen layanan:

    Konsol

    1. Di Konsol Google Cloud, buka halaman Service accounts.

      Buka Akun layanan

    2. Pilih project yang memiliki akun layanan yang akan Anda lampirkan ke resource.

    3. Klik alamat email akun layanan yang akan Anda lampirkan ke resource.

    4. Buka tab Izin dan temukan bagian Akun utama yang memiliki akses ke akun layanan ini.

    5. Klik Berikan akses, lalu masukkan alamat email agen layanan.

    6. Klik Pilih peran , jenis Service Account Token Creator, lalu klik peran.

    7. Klik Simpan untuk menyimpan perubahan.

    8. 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, seperti my-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 menerima 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 layanan
    • SERVICE_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, seperti my-project.
    • USER_SERVICE_ACCOUNT_NAME: Nama akun layanan yang dikelola pengguna yang Anda binding 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
Fungsi Cloud Run Fungsi Cloud Run
Cloud Life Sciences Pipelines
Cloud Run Perbankan & Keuangan
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 batasan boolean 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 hapus 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.

Log audit untuk melampirkan akun layanan

Saat akun utama menggunakan izin iam.serviceAccounts.actAs untuk melampirkan akun layanan ke resource, IAM akan membuat log audit. Log audit ini berisi informasi berikut:

  • Alamat email akun utama yang melampirkan akun layanan ke resource
  • Detail tentang akun layanan yang dilampirkan ke resource

Untuk daftar resource yang dapat Anda lampirkan dengan akun layanan, lihat Melampirkan akun layanan ke resource baru di halaman ini.

Untuk contoh jenis log audit ini, lihat Log untuk menggunakan izin iam.serviceAccounts.actAs. Untuk mempelajari log audit secara umum lebih lanjut, lihat Ringkasan Cloud Audit Logs.

Langkah selanjutnya