Kontrol akses dengan IAM (generasi ke-1)

Anda (yaitu, pengguna atau akun layanan yang men-deploy fungsi) dapat menetapkan kontrol akses menggunakan peran di level project. Berikan peran kepada anggota project atau akun layanan untuk menentukan tingkat akses ke project Google Cloud Anda beserta resource-nya. Secara default, semua project Google Cloud memiliki satu pengguna: project creator asli. Tidak ada pengguna lain yang memiliki akses ke project, dan juga akses ke fungsi, sampai pengguna ditambahkan sebagai anggota tim project.

Kontrol akses untuk pengguna

Anda dapat menambahkan pengguna sebagai anggota tim ke project dan memberi mereka peran menggunakan Identity and Access Management (IAM).

Fungsi Cloud Run mendukung peran dasar Editor, Pemilik, dan Pelihat, yang memberikan izin berikut:

  • Editor dan Pemilik: Akses baca dan tulis ke semua resource terkait fungsi. Memungkinkan pengguna men-deploy, mengupdate, dan menghapus fungsi. Akses tambahan ke resource lain dalam project.
  • Viewer: Akses hanya baca ke fungsi dan lokasi. Memungkinkan pengguna mencantumkan fungsi dan melihat detailnya, tetapi tidak mengizinkan pengguna melihat kode sumber. Akses tambahan ke resource lain dalam project.

Fungsi Cloud Run juga mendukung fungsi Cloud Run peran Developer dan Pelihat yang telah ditetapkan, yang memberikan izin berikut:

  • Developer: Akses baca dan tulis ke semua resource terkait fungsi. Memungkinkan pengguna men-deploy, mengupdate, dan menghapus fungsi. Tidak ada akses ke resource lain dalam project.
  • Viewer: Akses hanya baca ke fungsi dan lokasi. Memungkinkan pengguna mencantumkan fungsi dan melihat detailnya, tetapi tidak mengizinkan pengguna melihat kode sumber. Tidak ada akses ke resource lain dalam project.

Kontrol akses untuk akun layanan

Akun layanan adalah jenis akun Google Cloud khusus yang bertindak sebagai identitas bagi pengguna non-manusia yang perlu melakukan autentikasi dan diotorisasi untuk mengakses data serta melakukan berbagai tindakan. Beberapa akun ini dibuat dan dikelola oleh Google sendiri dan dikenal sebagai agen layanan.

Akun layanan berikut digunakan untuk fungsi Cloud Run:

Nama ID Anggota Peran
Akun layanan default App Engine PROJECT_ID@appspot.gserviceaccount.com Editor
Agen Layanan Google Cloud Run Functions service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com Agen Layanan Cloud Run Functions
PROJECT_NUMBER@cloudbuild.gserviceaccount.com Akun Layanan Cloud Build
Akun Layanan Cloud Build service-PROJECT_NUMBER@gcp-sa-cloudbuild.iam.gserviceaccount.com Agen Layanan Cloud Build
Agen Layanan Google Container Registry service-PROJECT_NUMBER@containerregistry.iam.gserviceaccount.com Agen Layanan Container Registry
Agen Layanan Artifact Registry service-PROJECT_NUMBER@gcp-sa-artifactregistry.iam.gserviceaccount.com Agen Layanan Artifact Registry

Akun layanan runtime

Saat runtime, fungsi Cloud Run secara default akan menggunakan App Engine akun layanan default (PROJECT_ID@appspot.gserviceaccount.com), yang memiliki peran Editor pada project. Anda dapat mengubah peran layanan ini akun untuk membatasi atau memperluas izin akses untuk fungsi Anda yang sedang berjalan. Anda dapat mengubah akun layanan yang digunakan menyediakan akun layanan perorangan non-default.

Untuk mempelajari lebih lanjut akun layanan, baca dokumentasi akun layanan.

Akun layanan administratif

Untuk melakukan tindakan administratif pada proyek Anda selama pembuatan, memperbarui, atau menghapus fungsi, semua project di fungsi Cloud Run memerlukan akun layanan Agen Layanan fungsi Google Cloud Run (service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com).

Selain itu, semua runtime melakukan pembangunan dan penyimpanan image container dalam project Anda. Untuk mendukung hal ini, Anda juga perlu menyediakan hal berikut:

Akun layanan ini harus memiliki peran yang tercantum dalam tabel sebelumnya.

Akun layanan Agen Layanan fungsi Google Cloud Run

Secara default, akun layanan Agen Layanan Google Cloud Run berfungsi (service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com memiliki peran cloudfunctions.serviceAgent pada project Anda.

Berikut adalah beberapa izin penting yang digunakan cloudfunctions.serviceAgent:

Izin Deskripsi
roles/artifactregistry.admin Mengelola repositori dan menyimpan image build di Artifact Registry.
roles/cloudbuild.builds.editor Diperlukan agar dapat menggunakan Cloud Build untuk menjalankan build di project pengguna.
roles/cloudbuild.customworkers.builder Membuat build di worker kustom Cloud Build.
cloudfunctions.functions.invoke Memanggil fungsi HTTP yang dilindungi IAM.
compute.globalOperations.get,
compute.networks.access,
vpcaccess.connectors.{get, use}
Menyediakan fungsi dengan akses ke VPC project konsumen.
firebasedatabase.instances.{get, update} Membuat fungsi yang dipicu oleh Firebase Realtime Database.
iam.serviceAccounts.{actAs, getAccessToken, signBlob} Kemampuan untuk mendapatkan kredensial akun layanan runtime.
iam.serviceAccounts.getOpenIdToken Diperlukan agar agen mendapatkan token OpenID pada otoritas yang ditentukan pengguna. Token OpenID digunakan untuk memanggil fungsi yang mendukung IAM.
pubsub.subscriptions Mengelola langganan dalam project pengguna.
pubsub.topics Mengelola topik dalam project pengguna.
storage.buckets.{get, update} Mengonfigurasi notifikasi pada bucket Cloud Storage yang memicu suatu fungsi.
storage.buckets.create,
storage.objects.{delete, get, create, list}
Diperlukan untuk menyimpan kode sumber dalam project pengguna.

Anda dapat melihat seluruh rangkaian izin pada peran IAM yang telah ditetapkan atau dengan menjalankan perintah ini:

gcloud iam roles describe roles/cloudfunctions.serviceAgent

Anda dapat mereset akun layanan ini ke peran default dengan menghapus peran apa pun yang memiliki dan menambahkan peran Service Agent fungsi Cloud Run:

gcloud projects add-iam-policy-binding PROJECT_ID \
  --member serviceAccount:service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com \
  --role roles/cloudfunctions.serviceAgent

Memecahkan masalah error izin

Jika Anda mendapatkan error izin saat men-deploy, mengupdate, menghapus, atau menjalankan fungsi dalam project, lakukan langkah-langkah berikut:

  1. Pastikan Anda memiliki peran Editor atau Pemilik di project, atau Anda menggunakan peran Developer fungsi Cloud Run.

    Jika Anda menggunakan peran Cloud Run functions Developer di project pastikan Anda memiliki memberi pengguna peran IAM Service Account User.

    Hanya izin eksekusi yang diizinkan di level per fungsi.

  2. Memastikan akun layanan Agen Layanan Cloud Run berfungsi (service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com) memiliki Peran cloudfunctions.serviceAgent untuk project Anda.

    Pastikan kotak Include Google-provided role grants pada tab Permissions di halaman Console IAM dicentang untuk melihat akun ini. Atau, Anda dapat menggunakan gcloud projects add-iam-policy-binding PROJECT_ID.

  3. Pastikan Anda memiliki izin untuk sumber pemicu, seperti Pub/Sub atau Cloud Storage.

Jika Anda mendapatkan error ”insufficient permissions”, atau mengalami masalah autentikasi lain saat menjalankan fungsi, pastikan akun layanan runtime memiliki izin yang benar untuk mengakses resource yang diperlukan fungsi Anda. Kemudian, ulangi langkah 2 dan 3.

Jika Anda mendapatkan error ”service unavailable” selama deployment, pastikan akun layanan runtime PROJECT_ID@appspot.gserviceaccount.com ada dalam project Anda. Untuk membuat ulang akun layanan ini jika sudah dihapus, lihat Membatalkan penghapusan akun layanan.

Lihat juga Memecahkan masalah fungsi Cloud Run.