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 pośrednictwem konta usługi .
Co to jest konto usługi?
Konto usługi to specjalny typ konta użytkownika Google. Reprezentuje użytkownika innego niż człowiek, który może wykonywać autoryzowane wywołania API do usług Google.
Podczas instalacji rozszerzenia Firebase tworzy konto usługi dla rozszerzenia w projekcie. Każde zainstalowane wystąpienie rozszerzenia ma własne konto usługi. Jeśli instancja rozszerzenia zostanie odinstalowana, Firebase usunie konto usługi rozszerzenia.
Konta usług 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 określone role (pakiety uprawnień) do konta usługi rozszerzenia. Tworząc rozszerzenie, określasz, jakich ról wymaga rozszerzenie do działania, a następnie podajesz listę tych ról i powód, dla którego Twoje rozszerzenie potrzebuje tych ról w pliku extension.yaml
(zobacz przykład na dole tej strony).
Określ, jakich ról wymaga Twoje rozszerzenie
Tworząc rozszerzenie, określasz poziom dostępu wymagany do działania rozszerzenia.
Podczas instalacji interfejs Firebase CLI monituje użytkownika o zaakceptowanie poziomu dostępu przyznanego przez każdą rolę. Jeśli Twoje rozszerzenie żąda większej liczby ról, niż faktycznie potrzebuje, prawdopodobieństwo, że użytkownicy je zainstalują, będzie mniejsze.
Sprawdź, czy Twoje rozszerzenie wchodzi w interakcję z produktem:
Jeśli Twoje rozszerzenie wchodzi w interakcję z produktem , musisz przyznać swojemu rozszerzeniu dostęp do tego produktu.
Na przykład, jeśli Twoje rozszerzenie zapisuje dane w instancji bazy danych czasu rzeczywistego, potrzebuje ono roli bazy danych czasu rzeczywistego (w szczególności
firebasedatabase.admin
).Jeśli Twoje rozszerzenie po prostu nasłuchuje zdarzenia wyzwalającego z produktu , nie potrzebuje ono roli powiązanej z tym produktem.
Na przykład, jeśli rozszerzenie uruchamia się po zapisie do instancji bazy danych czasu rzeczywistego (ale nie zapisuje niczego w bazie danych), wówczas rozszerzenie nie potrzebuje roli bazy danych czasu rzeczywistego.
Po ustaleniu, z jakimi produktami wchodzi w interakcję Twoje rozszerzenie , musisz zdecydować, która rola jest wymagana w przypadku tej konkretnej interakcji. Niektóre produkty oferują różne role w zależności od wykonywanej akcji lub zestawu czynności.
Załóżmy na przykład, że Twoje rozszerzenie wchodzi w interakcję z zasobnikiem Cloud Storage. Rola
storage.objectCreator
umożliwi rozszerzeniu utworzenie obiektu w zasobniku Cloud Storage, ale ta rola nie umożliwi rozszerzeniu przeglądania, usuwania ani zastępowania obiektów. Aby umożliwić rozszerzeniu wykonywanie tych dodatkowych działań, musisz zamiast tego przypisać rolęstorage.objectAdmin
.
Zapoznaj się z sekcją na dole tej strony, aby wyświetlić wszystkie obsługiwane role , które możesz przypisać do konta usługi swojego rozszerzenia. Aby dowiedzieć się więcej o opisie każdej roli i przyznanych uprawnieniach, odwiedź dokumentację Firebase lub Google Cloud . Role możesz także sprawdzić w panelu uprawnień i panelu administracyjnym konsoli Google Cloud.
Jak przypisać role do rozszerzenia
W sekcji roles
pliku extension.yaml
wypisz role uprawnień wymagane do działania Twojego rozszerzenia.
Oto przykład rozszerzenia, które nasłuchuje określonej ścieżki bazy danych Firebase Realtime Database. Po uruchomieniu rozszerzenie aktualizuje adres e-mail konta użytkownika (interakcja z uwierzytelnianiem Firebase) i wysyła powiadomienie (interakcja z Firebase Cloud Messaging). Zwróć uwagę na następujące kwestie:
- Mimo że rozszerzenie jest wyzwalane przez zdarzenie w bazie danych czasu rzeczywistego, rola
firebasedatabase.admin
nie jest wymieniona (słuchanie nie jest uznawane za interakcję ). - Ponieważ rozszerzenie współdziała z uwierzytelnianiem i przesyłaniem wiadomości w chmurze, wymaga ról, aby uzyskać dostęp do tych produktów (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
...
W pliku extension.yaml
użyj następujących pól, aby przypisać rolę do konta usługi rozszerzenia:
Pole | Typ | Opis |
---|---|---|
role (wymagany) | strunowy | Nazwa roli IAM wymaganej przez rozszerzenie do działania |
reason (wymagany) | strunowy | Krótki opis powodu, dla którego rozszerzenie potrzebuje dostępu przyznanego przez rolę Upewnij się, że podałeś wystarczająco dużo szczegółów, aby użytkownik mógł zrozumieć, w jaki sposób rozszerzenie wykorzystuje tę rolę. |
resource (opcjonalny) | strunowy | Do której zasady uprawnień zasobu należy dodać tę rolę. Jeśli pominięto, domyślnie jest to Obsługiwane wartości to |
Zmniejsz zakres ról
Rozszerzenia powinny kierować się zasadą najmniejszych uprawnień i żądać dostępu tylko do potrzebnych im zasobów. Możesz ograniczyć zakres dostępu rozszerzenia, korzystając z pola role.resource
. Na przykład, jeśli Twoje rozszerzenie musi zapisywać obiekty w zasobniku Cloud Storage, możesz użyć następującej 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 mu segmentu, a nie do innych w tym samym projekcie.
To pole obsługuje projekty ( projects/{project_id}
) i zasobniki pamięci masowej ( projects/{project_id}/buckets/{bucket_id}
).
Obsługiwane role dla rozszerzeń
W poniższej tabeli wymieniono obsługiwane role uprawnień umożliwiające interakcję z produktami Firebase. Większość ról w tej tabeli to role na poziomie produktu Firebase , ale niektórymi z nich zarządza bezpośrednio Google Cloud (w szczególności Cloud Firestore i Cloud Storage ).
Produkty Firebase
Jeśli Twoje rozszerzenie wchodzi w interakcję z... | Przypisz jedną z tych ról... |
---|---|
Chmura Firestore | datastore.importExportAdmin administrator magazynu danych.index właściciel magazynu danych użytkownik magazynu danych przeglądarka.datastore |
Magazyn w chmurze dla Firebase | przechowywanie.admin magazyn.objectAdmin kreator przechowywania.obiektów Storage.objectViewer |
Dystrybucja aplikacji Firebase | firebaseappdistro.admin przeglądarka firebaseappdistro |
Uwierzytelnianie Firebase | administrator Firebaseauth przeglądarka firebaseauth |
Testy A/B Firebase | firebaseabt.admin przeglądarka firebaseabt |
Wiadomości w chmurze Firebase | firebasenotifications.admin przeglądarka Firebasenotifications.viewer |
Analiza awarii Firebase | firebasecrashlytics.admin przeglądarka firebasecrashlytics.viewer |
Hosting Firebase | firebasehosting.admin firebasehosting.viewer |
Wiadomości w aplikacji Firebase | firebaseinappmessaging.admin przeglądarka firebaseinappmessaging.viewer |
Baza Firebase ML | firebaseml.admin przeglądarka firebaseml |
Monitorowanie wydajności Firebase | przeglądarka wydajności Firebase czytnik Firebase Performance.Reader Firebase Performance.writer |
Baza danych czasu rzeczywistego Firebase | firebasedatabase.admin przeglądarka firebasedatabase.viewer |
Zasady bezpieczeństwa | firebaserules.viewer firebaserules.developer firebaserules.deployer |
Google Analytics | firebaseanalytics.admin przeglądarka firebaseanalytics.viewer |
Produkty 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 | akcje.Admin akcje.Przeglądarka |
Apige | apigee.analyticsAgent redaktor apigee.analytics Przeglądarka apigee.analytics apigee.apiCreator apigee.deployer apigee.developerAdmin apigee.readOnlyAdmin apigee.synchronizerManager |
Silnik aplikacji | appengine.appAdmin appengine.appViewer appengine.codeViewer appengine.deployer appengine.serviceAdmin |
AutoML | edytor automl automl.predictor przeglądarka automatyczna |
BigQuery | bigquery.connectionAdmin użytkownik bigquery.connection edytor bigquery.data Właściciel bigquery.data bigquery.dataViewer użytkownik bigquery.job przeglądarka bigquery.metadataViewer bigquery.readSessionUser bigquery.user |
Duży stół w chmurze | czytnik bigtable użytkownik bigtable bigtable.viewer |
Dane do faktury | przeglądarka.bilingów |
Czaty w Hangouts | właściciel czatu czytnik czatu |
Zasób w chmurze | właściciel_zasobu chmury przeglądarka zasobów chmury |
Fuzja danych w chmurze | datafusion.admin datafusion.viewer |
Debuger w chmurze | clouddebugger.agent clouddebugger.user |
Funkcje chmury | Cloudfunctions.invoker Cloudfunctions.viewer |
Chmura IAP | iap.admin iap.httpsResourceAccessor iap.settingsAdmin iap.tunnelResourceAccessor |
Chmura IoT | kontroler cloudiot.device edytor Cloudiot cloudiot.provisioner cloudiot.viewer |
Profiler Stackdrivera | cloudprofiler.agent cloudprofiler.user |
Harmonogram chmury | cloudcheduler.admin cloudcheduler.jobRunner Cloudcheduler.viewer |
Skaner bezpieczeństwa w chmurze | cloudsecurityscanner.editor cloudsecurityscanner.runner cloudsecurityscanner.viewer |
Chmura SQL | klient cloudql edytor cloudql Cloudql.viewer |
Chmura śledzenia | cloudtrace.admin cloudtrace.agent użytkownik cloudtrace |
Przepływ danych | programista przepływu danych przeglądarka przepływu danych pracownik przepływu danych |
Przepływ dialogu | dialogflow.admin klient dialogflow czytnik dialogów |
Zapobieganie utracie danych w chmurze | czytnik dlp użytkownik dlp |
Zgłaszanie błędów | użytkownik zgłaszający błędy przeglądarka raportów błędów reporter błędów.pisarz |
Eventarc | eventarc.publisher eventarc.eventReceiver |
Magazyn plików w chmurze | edytor plików przeglądarka plików |
Logowanie | logowanie.configWriter logowanie.logWriter logowanie.privateLogViewer przeglądarka.logowania |
Silnik uczenia maszynowego | ml.programista ml.jobWłaściciel ml.modelWłaściciel ml.modelUżytkownik ml.operacjaWłaściciel ml.przeglądarka |
Monitorowanie | monitorowanie.edytor monitorowanie.metricWriter przeglądarka.monitorująca |
Notatniki AI | notesy.admin przeglądarka notesów |
Pub/sub | edytor pubsub pubsub.wydawca subskrybent pubsub przeglądarka pubsub |
Magazyn pamięci Redis | redis.edytor redis.viewer |
Bieg w chmurze | uruchom.invoker |
Źródło | źródło.czytnik źródło.pisarz |
Klucz chmurowy | spanner.databaseAdmin spanner.databaseReader użytkownik spanner.database przeglądarka kluczy |
Korzystanie z usługi | serviceusage.apiKeysMetadataViewer |
Usługa transferu magazynu w chmurze | użytkownik transferu pamięci masowej przeglądarka transferu pamięci masowej |
Transkoder w chmurze | transkoder.admin transkoder.przeglądarka |
Wierzchołkowa sztuczna inteligencja | aiplatform.user |
Inny | tożsamośćtoolkit.admin Identitytoolkit.viewer |