Aby rozszerzenie mogło wykonywać określone działania, Firebase przyznaje każdemu wystąpieniu zainstalowanego rozszerzenia ograniczony dostęp do projektu i jego danych za pomocą konta usługi.
Co to 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 interfejsów API do usług Google.
Podczas instalacji rozszerzenia Firebase tworzy konto usługi dla rozszerzenia w projekcie. Każda zainstalowana instancja rozszerzenia ma własne konto usługi. Jeśli instancja rozszerzenia zostanie odinstalowana, Firebase usunie konto usługi tego rozszerzenia.
Konta usługi utworzone dla 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 role, jakie musi ono działać, a następnie wymieniasz te role w pliku extension.yaml
(patrz przykład u dołu strony).
Określ, jakich ról wymaga Twoje rozszerzenie
Podczas tworzenia rozszerzenia określasz poziom dostępu, którego potrzebuje ono do działania.
Podczas instalacji narzędzie wiersza poleceń Firebase wyświetla użytkownikowi monit 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ą być mniej skłonni do jego zainstalowania.
Sprawdź, czy Twoje rozszerzenie wchodzi w interakcję z usługą:
Jeśli Twoja rozszerzenie współdziała z jakimś produktem, musisz przyznać temu produktowi dostęp do rozszerzenia.
Jeśli na przykład rozszerzenie zapisuje dane w instansji Realtime Database, potrzebuje roli Realtime Database (dokładnie
firebasedatabase.admin
).Jeśli rozszerzenie tylko nasłuchuje na potrzeby wywołania zdarzenia z produktu, nie musi mieć roli powiązanej z tym produktem.
Jeśli na przykład rozszerzenie uruchamia się po zapisaniu danych w instancji Realtime Database (ale nie zapisuje niczego w bazie danych), nie potrzebuje roli Realtime Database.
Gdy określisz, z jakimi usługami interaguje Twoje rozszerzenie, musisz zdecydować, jaka rola jest wymagana do tej konkretnej interakcji. Niektóre produkty oferują różne role w zależności od wykonanego działania lub zestawu działań.
Załóżmy np., że Twoje rozszerzenie wchodzi w interakcję z grupą Cloud Storage. Rola
storage.objectCreator
pozwoliłaby rozszerzeniu tworzyć obiekty w zasośniku Cloud Storage, ale nie pozwoliłaby mu wyświetlać, usuwać ani zastępować obiektów. Aby umożliwić rozszerzeniu wykonywanie tych dodatkowych działań, musisz przypisać mu 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. Aby dowiedzieć się więcej o każdej roli i przypisanych do niej uprawnieniach, zapoznaj się z dokumentacją Firebase lub dokumentacją Google Cloud. Role możesz też sprawdzić w panelu Administracja konsoli Google Cloud.
Jak przypisać role do rozszerzenia
W sekcji roles
pliku extension.yaml
podaj role uprawnień wymagane do działania rozszerzenia.
Oto przykład rozszerzenia, które nasłuchuje określonej ścieżki Firebase Realtime Database. Po uruchomieniu 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:
- Chociaż rozszerzenie uruchamia zdarzenie Realtime Database, rola
firebasedatabase.admin
nie jest wymieniona (nasłuchiwanie nie jest uważane za interakcję). - Ponieważ rozszerzenie współdziała z usługami Authentication i Cloud Messaging, wymaga ról zapewniających dostęp do tych usług (odpowiednio
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
...
Aby przypisać rolę kontu usługi rozszerzenia, użyj w pliku extension.yaml
tych pól:
Pole | Typ | Opis |
---|---|---|
role (wymagane) |
ciąg znaków | Nazwa roli uprawnień, której potrzebuje rozszerzenie do działania. |
reason (wymagane) |
ciąg znaków |
krótki opis powodu, dla którego rozszerzenie potrzebuje dostępu przyznanego przez rolę; Pamiętaj, aby podać wystarczająco dużo szczegółów, aby użytkownik wiedział, jak rozszerzenie używa tej roli. |
resource (opcjonalnie) |
ciąg znaków |
Do której zasady uprawnień ma zostać dodana ta rola. Jeśli go pominiesz, przyjmie on domyślnie wartość
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 potrzebnych zasobów.
Zakres dostępu rozszerzenia możesz ograniczyć, używając 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 zasobów w tym samym projekcie.
To pole obsługuje projekty (projects/{project_id}
) i zasobniki usługi Storage (projects/{project_id}/buckets/{bucket_id}
).
Obsługiwane role rozszerzeń
W tabeli poniżej znajdziesz obsługiwane role uprawnień umożliwiające interakcję z usługami Firebase. Większość ról w tej tabeli to role na poziomie usługi Firebase, ale niektórymi zarządza bezpośrednio Google Cloud (dotyczy to ról 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 Twoje rozszerzenie wchodzi w interakcję 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 Chats |
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 |
Usługa transferu Cloud Storage |
storagetransfer.user storagetransfer.viewer |
Transkoder Cloud |
transcoder.admin transcoder.viewer |
Vertex AI | aiplatform.user |
Inne |
identitytoolkit.admin identitytoolkit.viewer |