Agar ekstensi dapat melakukan tindakan yang ditentukan, Firebase memberi setiap instance ekstensi yang diinstal akses terbatas ke project dan datanya melalui akun layanan.
Apa yang dimaksud akun layanan?
Akun layanan adalah akun pengguna Google berjenis khusus. Akun layanan mewakili pengguna non-manusia yang dapat membuat panggilan API yang sah ke layanan Google.
Selama penginstalan ekstensi, Firebase membuat akun layanan untuk ekstensi tersebut di project. Setiap instance terinstal dari sebuah ekstensi memiliki akun layanannya sendiri. Jika instance ekstensi di-uninstal, Firebase akan menghapus akun layanan ekstensi tersebut.
Akun layanan yang dibuat untuk ekstensi berformat:
ext-extension-instance-id@project-id.iam.gserviceaccount.com
Firebase membatasi akses ekstensi ke project dan datanya dengan menetapkan peran (paket izin) tertentu ke akun layanan ekstensi tersebut. Saat mem-build ekstensi, Anda menentukan peran apa saja yang diperlukan ekstensi untuk beroperasi, lalu Anda mencantumkan peran ini dan alasan ekstensi Anda memerlukannya dalam file extension.yaml
(lihat contoh di bagian bawah halaman ini).
Menentukan peran yang diperlukan ekstensi
Saat mem-build ekstensi, Anda menentukan tingkat akses yang diperlukan ekstensi Anda untuk beroperasi.
Selama penginstalan, Firebase CLI akan meminta pengguna menyetujui tingkat akses yang diberikan oleh setiap peran. Jika ekstensi Anda meminta lebih banyak peran daripada yang benar-benar diperlukan, pengguna mungkin cenderung tidak akan menginstalnya.
Tentukan apakah ekstensi berinteraksi dengan produk:
Jika ekstensi berinteraksi dengan produk, maka Anda harus memberinya akses ke produk tersebut.
Misalnya, jika ekstensi menulis data ke instance Realtime Database, ekstensi tersebut memerlukan peran Realtime Database (khususnya,
firebasedatabase.admin
).Jika ekstensi hanya mendeteksi peristiwa pemicu dari sebuah produk, maka ekstensi tidak memerlukan peran yang terkait dengan produk tersebut.
Misalnya, jika ekstensi terpicu oleh operasi tulis ke sebuah Realtime Database (tetapi tidak menulis apa pun ke database tersebut), maka ekstensi tersebut tidak memerlukan peran Realtime Database.
Setelah menentukan dengan produk mana saja ekstensi berinteraksi, Anda harus memutuskan peran yang diperlukan untuk interaksi spesifik tersebut. Beberapa produk menawarkan peran berbeda-beda bergantung tindakan atau serangkaian tindakan yang dilakukan.
Misalnya, ekstensi Anda berinteraksi dengan bucket Cloud Storage. Peran
storage.objectCreator
akan memungkinkan ekstensi untuk membuat objek di bucket Cloud Storage, tetapi peran tersebut tidak akan memungkinkan ekstensi untuk melihat, menghapus, atau menimpa objek. Agar ekstensi dapat melakukan tindakan tambahan tersebut, Anda perlu menetapkan peranstorage.objectAdmin
.
Lihat bagian di akhir halaman ini untuk melihat semua peran yang didukung yang dapat ditetapkan ke akun layanan ekstensi Anda. Untuk mempelajari deskripsi setiap peran dan izin yang diberikan, baca dokumentasi Firebase atau dokumentasi Google Cloud. Anda juga dapat mencari peran di panel IAM & Admin Google Cloud Console.
Cara menetapkan peran ke ekstensi
Cantumkan peran IAM yang diperlukan agar ekstensi dapat beroperasi di bagian roles
dalam file extension.yaml
.
Berikut contoh ekstensi yang mendeteksi jalur Firebase Realtime Database. Saat dipicu, ekstensi akan memperbarui email akun pengguna (interaksi dengan Firebase Authentication) dan mengirimkan notifikasi (interaksi dengan Firebase Cloud Messaging). Perhatikan hal-hal berikut:
- Meskipun ekstensi terpicu oleh peristiwa Realtime Database,
peran
firebasedatabase.admin
tidak tercantum (mendeteksi tidak dianggap sebagai interaksi). - Karena ekstensi berinteraksi dengan Authentication dan Cloud Messaging,
ekstensi ini memerlukan peran untuk mengakses produk tersebut (
firebaseauth.admin
danfirebasenotifications.admin
secara berurutan).
# extension.yaml
...
# Roles assigned to the extension's service account by Firebase during installation
roles:
- role: firebaseauth.admin
reason: Required to update the email address of the user account
- role: firebasenotifications.admin
reason: Required to send a notification that the email address has been updated
...
Dalam file extension.yaml
, gunakan kolom berikut untuk menetapkan peran ke
akun layanan ekstensi:
Kolom | Jenis | Deskripsi |
---|---|---|
role (wajib) |
string | Nama peran IAM yang diperlukan ekstensi untuk beroperasi |
reason (wajib) |
string |
Deskripsi singkat alasan ekstensi memerlukan akses yang diberikan oleh peran tersebut Pastikan Anda memberikan detail yang cukup sehingga pengguna dapat memahami cara ekstensi menggunakan peran tersebut. |
resource (opsional) |
string |
Kebijakan IAM resource yang akan ditambahi peran ini. Jika dihilangkan, nilai defaultnya adalah
Nilai yang didukung adalah |
Mengurangi cakupan peran
Ekstensi harus mengikuti prinsip hak istimewa terendah dan hanya meminta akses ke resource yang diperlukan.
Anda dapat membatasi cakupan akses ekstensi menggunakan kolom role.resource
.
Misalnya, jika ekstensi Anda perlu menulis objek ke bucket Cloud Storage, Anda dapat menggunakan peran berikut:
roles:
- role: storage.objectCreator
reason: Needed in order to write
resource: projects/${PROJECT_ID}/buckets/${STORAGE_BUCKET}
Hal ini memungkinkan ekstensi hanya mengakses bucket yang diperlukan, dan tidak mengakses bucket lain pada project yang sama.
Kolom ini mendukung project (projects/{project_id}
) dan bucket Storage (projects/{project_id}/buckets/{bucket_id}
).
Peran yang didukung untuk ekstensi
Tabel berikut mencantumkan peran IAM yang didukung untuk berinteraksi dengan produk Firebase. Sebagian besar peran dalam tabel ini adalah Peran tingkat produk Firebase, tetapi ada sebagian peran yang dikelola langsung oleh Google Cloud (khususnya, Cloud Firestore dan Cloud Storage).
Produk Firebase
Jika ekstensi Anda berinteraksi dengan... | Tetapkan salah satu peran ini... |
---|---|
Cloud Firestore |
datastore.importExportAdmin datastore.indexAdmin datastore.owner datastore.user datastore.viewer |
Cloud Storage for Firebase |
storage.admin storage.objectAdmin storage.objectCreator storage.objectViewer |
Firebase App Distribution |
firebaseappdistro.admin firebaseappdistro.viewer |
Firebase Authentication |
firebaseauth.admin firebaseauth.viewer |
Firebase A/B Testing |
firebaseabt.admin firebaseabt.viewer |
Firebase Cloud Messaging |
firebasenotifications.admin firebasenotifications.viewer |
Firebase Crashlytics |
firebasecrashlytics.admin firebasecrashlytics.viewer |
Firebase Hosting |
firebasehosting.admin firebasehosting.viewer |
Firebase In-App Messaging |
firebaseinappmessaging.admin firebaseinappmessaging.viewer |
Firebase ML |
firebaseml.admin firebaseml.viewer |
Firebase Performance Monitoring |
firebaseperformance.viewer firebaseperformance.reader firebaseperformance.writer |
Firebase Realtime Database |
firebasedatabase.admin firebasedatabase.viewer |
Aturan keamanan |
firebaserules.viewer firebaserules.developer firebaserules.deployer |
Google Analytics |
firebaseanalytics.admin firebaseanalytics.viewer |
Produk Google Cloud
Pelajari peran-peran berikut ini dalam dokumentasi Google Cloud.
Jika ekstensi Anda berinteraksi dengan... | Tetapkan salah satu peran ini... |
---|---|
Tindakan |
actions.Admin actions.Viewer |
Apigee |
apigee.analyticsAgent apigee.analyticsEditor apigee.analyticsViewer apigee.apiCreator apigee.deployer apigee.developerAdmin apigee.readOnlyAdmin apigee.synchronizerManager |
App Engine |
appengine.appAdmin appengine.appViewer appengine.codeViewer appengine.deployer appengine.serviceAdmin |
AutoML |
automl.editor automl.predictor automl.viewer |
BigQuery |
bigquery.connectionAdmin bigquery.connectionUser bigquery.dataEditor bigquery.dataOwner bigquery.dataViewer bigquery.jobUser bigquery.metadataViewer bigquery.readSessionUser bigquery.user |
Cloud Bigtable |
bigtable.reader bigtable.user bigtable.viewer |
Penagihan | billing.viewer |
Chat Hangout |
chat.owner chat.reader |
Cloud Asset |
cloudasset.owner cloudasset.viewer |
Cloud Data Fusion |
datafusion.admin datafusion.viewer |
Cloud Debugger |
clouddebugger.agent clouddebugger.user |
Cloud Functions |
cloudfunctions.invoker cloudfunctions.viewer |
Cloud IAP |
iap.admin iap.httpsResourceAccessor iap.settingsAdmin iap.tunnelResourceAccessor |
Cloud IoT |
cloudiot.deviceController cloudiot.editor cloudiot.provisioner cloudiot.viewer |
Stackdriver Profiler |
cloudprofiler.agent cloudprofiler.user |
Cloud Scheduler |
cloudscheduler.admin cloudscheduler.jobRunner cloudscheduler.viewer |
Cloud Security Scanner |
cloudsecurityscanner.editor cloudsecurityscanner.runner cloudsecurityscanner.viewer |
Cloud SQL |
cloudsql.client cloudsql.editor cloudsql.viewer |
Cloud Trace |
cloudtrace.admin cloudtrace.agent cloudtrace.user |
Dataflow |
dataflow.developer dataflow.viewer dataflow.worker |
Dialogflow |
dialogflow.admin dialogflow.client dialogflow.reader |
Cloud Data Loss Prevention |
dlp.reader dlp.user |
Error Reporting |
errorreporting.user errorreporting.viewer errorreporting.writer |
Eventarc |
eventarc.publisher eventarc.eventReceiver |
Cloud Filestore |
file.editor file.viewer |
Logging |
logging.configWriter logging.logWriter logging.privateLogViewer logging.viewer |
Machine Learning Engine |
ml.developer ml.jobOwner ml.modelOwner ml.modelUser ml.operationOwner ml.viewer |
Pemantauan |
monitoring.editor monitoring.metricWriter monitoring.viewer |
AI Notebooks |
notebooks.admin notebooks.viewer |
Pub/Sub |
pubsub.editor pubsub.publisher pubsub.subscriber pubsub.viewer |
Memorystore Redis |
redis.editor redis.viewer |
Cloud Run | run.invoker |
Sumber |
source.reader source.writer |
Cloud Spanner |
spanner.databaseAdmin spanner.databaseReader spanner.databaseUser spanner.viewer |
Service Usage | serviceusage.apiKeysMetadataViewer |
Cloud Storage Transfer Service |
storagetransfer.user storagetransfer.viewer |
Cloud Transcoder |
transcoder.admin transcoder.viewer |
Vertex AI | aiplatform.user |
Lainnya |
identitytoolkit.admin identitytoolkit.viewer |