Aby rozszerzenie mogło wykonywać określone działania, Firebase przyznaje każdej instancji zainstalowanego rozszerzenia ograniczony dostęp do projektu i jego danych za pomocą konta usługi.
Czym jest konto usługi?
Konto usługi to specjalny rodzaj konta użytkownika Google. Jest to użytkownik, który nie jest człowiekiem i który może wykonywać autoryzowane wywołania interfejsu API do usług Google.
Podczas instalacji rozszerzenia Firebase tworzy w projekcie konto usługi dla rozszerzenia. Każda zainstalowana instancja rozszerzenia ma własne konto usługi. Jeśli instancja rozszerzenia zostanie odinstalowana, Firebase usunie konto usługi rozszerzenia.
Konta usługi utworzone na potrzeby rozszerzeń mają format:
ext-extension-instance-id@project-id.iam.gserviceaccount.com
Firebase ogranicza dostęp rozszerzenia do projektu i jego danych, przypisując do konta usługi rozszerzenia określone role (pakiety uprawnień). Podczas tworzenia rozszerzenia określasz, jakich ról potrzebuje ono do działania, a następnie wymieniasz te role i podajesz powód, dla którego rozszerzenie ich potrzebuje, w pliku extension.yaml
(przykład znajdziesz u dołu tej strony).
Określ, jakich ról wymaga Twoje rozszerzenie
Podczas tworzenia rozszerzenia określasz poziom dostępu, którego wymaga ono do działania.
Podczas instalacji interfejs Firebase CLI wyświetla prośbę o zaakceptowanie poziomu dostępu przyznanego przez każdą rolę. Jeśli rozszerzenie wymaga więcej ról, niż jest to konieczne, użytkownicy mogą rzadziej je instalować.
Sprawdź, czy rozszerzenie wchodzi w interakcję z usługą:
Jeśli rozszerzenie wchodzi w interakcję z produktem, musisz przyznać mu dostęp do tego produktu.
Jeśli na przykład rozszerzenie zapisuje dane w instancji Realtime Database, musi mieć rolę Realtime Database (a konkretnie
firebasedatabase.admin
).Jeśli rozszerzenie tylko nasłuchuje zdarzenia wywołującego z produktu, to nie musi mieć roli powiązanej z tym produktem.
Jeśli na przykład rozszerzenie uruchamia się po zapisie w instancji Realtime Database (ale nie zapisuje niczego w bazie danych), nie potrzebuje roli Realtime Database.
Gdy ustalisz, z którymi produktami Twoje rozszerzenie wchodzi w interakcję, musisz określić, która rola jest wymagana w przypadku tej konkretnej interakcji. Niektóre usługi oferują różne role w zależności od wykonywanego działania lub zestawu działań.
Załóżmy na przykład, że rozszerzenie wchodzi w interakcję z Cloud Storage zasobnikiem. Rola
storage.objectCreator
umożliwi rozszerzeniu tworzenie obiektów w zasobniku Cloud Storage, ale nie pozwoli mu wyświetlać, usuwać ani zastępować obiektów. Aby umożliwić rozszerzeniu wykonywanie tych dodatkowych działań, musisz przypisać rolęstorage.objectAdmin
.
W sekcji u dołu tej strony znajdziesz wszystkie obsługiwane role, które możesz przypisać do konta usługi rozszerzenia. Opis każdej roli i przyznane uprawnienia znajdziesz w dokumentacji Firebase lub dokumentacji Google Cloud. Role możesz też wyszukiwać w panelu Administracja w konsoli Google Cloud.
Jak przypisywać role do rozszerzenia
Wymień role uprawnień wymagane do działania rozszerzenia w sekcji roles
pliku extension.yaml
.
Oto przykład rozszerzenia, które nasłuchuje określonej ścieżki Firebase Realtime Database. Po wywołaniu rozszerzenie aktualizuje adres e-mail konta użytkownika (interakcja z Firebase Authentication) i wysyła powiadomienie (interakcja z Firebase Cloud Messaging). Zwróć uwagę na te kwestie:
- Mimo że rozszerzenie wywołuje zdarzenie Realtime Database, rola
firebasedatabase.admin
nie jest wymieniona (nasłuchiwanie nie jest uważane za interakcję). - Ponieważ rozszerzenie wchodzi w interakcję z usługami Authentication i Cloud Messaging, wymaga ról umożliwiających dostęp do tych usług (
firebaseauth.admin
ifirebasenotifications.admin
).
# 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
...
W pliku extension.yaml
użyj tych pól, aby przypisać rolę do konta usługi rozszerzenia:
Pole | Typ | Opis |
---|---|---|
role (wymagane) |
ciąg znaków | Nazwa roli uprawnień wymaganej przez rozszerzenie do działania. |
reason (wymagane) |
ciąg znaków |
Krótki opis powodu, dla którego rozszerzenie potrzebuje dostępu przyznanego przez rolę Podaj wystarczająco dużo szczegółów, aby użytkownik mógł zrozumieć, w jaki sposób rozszerzenie wykorzystuje tę rolę. |
resource (opcjonalnie) |
ciąg znaków |
Zasada uprawnień którego zasobu ma zostać rozszerzona o tę rolę. Jeśli go pominiesz, domyślnie będzie to
Obsługiwane wartości to |
Ograniczanie zakresu ról
Rozszerzenia powinny być zgodne z zasadą jak najmniejszych uprawnień i prosić o dostęp tylko do tych zasobów, których potrzebują.
Zakres dostępu rozszerzenia możesz ograniczyć za pomocą pola role.resource
.
Jeśli na przykład rozszerzenie musi zapisywać obiekty w zasobniku Cloud Storage, możesz użyć tej roli:
roles:
- role: storage.objectCreator
reason: Needed in order to write
resource: projects/${PROJECT_ID}/buckets/${STORAGE_BUCKET}
Dzięki temu rozszerzenie ma dostęp tylko do potrzebnego zasobnika, a nie do innych zasobników w tym samym projekcie.
To pole obsługuje projekty (projects/{project_id}
) i zasobniki pamięci (projects/{project_id}/buckets/{bucket_id}
).
Obsługiwane role w przypadku rozszerzeń
W tabeli poniżej znajdziesz listę obsługiwanych ról uprawnień do interakcji z usługami Firebase. Większość ról w tej tabeli to role na poziomie usługi Firebase, ale niektóre są zarządzane bezpośrednio przez Google Cloud (w szczególności Cloud Firestore i Cloud Storage).
Usługi Firebase
Jeśli rozszerzenie wchodzi w interakcje z … | Przypisz jedną z tych ról... |
---|---|
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 |
Reguły zabezpieczeń |
firebaserules.viewer firebaserules.developer firebaserules.deployer |
Google Analytics |
firebaseanalytics.admin firebaseanalytics.viewer |
Usługi Google Cloud
Więcej informacji o tych rolach znajdziesz w dokumentacji Google Cloud.
Jeśli rozszerzenie wchodzi w interakcje z … | Przypisz jedną z tych ról... |
---|---|
Działania |
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 |
Płatności | billing.viewer |
Hangouts Chat |
chat.owner chat.reader |
Zasoby w chmurze |
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 |
Raportowanie błędów |
errorreporting.user errorreporting.viewer errorreporting.writer |
Eventarc |
eventarc.publisher eventarc.eventReceiver |
Cloud Filestore |
file.editor file.viewer |
Logowanie |
logging.configWriter logging.logWriter logging.privateLogViewer logging.viewer |
Machine Learning Engine |
ml.developer ml.jobOwner ml.modelOwner ml.modelUser ml.operationOwner ml.viewer |
Monitorowanie |
monitoring.editor monitoring.metricWriter monitoring.viewer |
Notatki AI |
notebooks.admin notebooks.viewer |
Pub/Sub |
pubsub.editor pubsub.publisher pubsub.subscriber pubsub.viewer |
Memorystore Redis |
redis.editor redis.viewer |
Cloud Run | run.invoker |
Źródło |
source.reader source.writer |
Cloud Spanner |
spanner.databaseAdmin spanner.databaseReader spanner.databaseUser spanner.viewer |
Wykorzystanie usług | serviceusage.apiKeysMetadataViewer |
Storage Transfer Service |
storagetransfer.user storagetransfer.viewer |
Cloud Transcoder |
transcoder.admin transcoder.viewer |
Vertex AI | aiplatform.user |
Inne |
identitytoolkit.admin identitytoolkit.viewer |