Melampirkan akun layanan ke resource

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

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:

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