Skonfiguruj odpowiedni dostęp dla rozszerzenia

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.

  1. 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.

  2. 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 i firebasenotifications.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 projects/${project_id} .

Obsługiwane wartości to projects/* i projects/*/buckets/* .

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