Identity and Access Management (uprawnienia)

Gdy używasz bibliotek klienta serwera dla Cloud Firestore, możesz zarządzać dostępem do zasobów za pomocą Identity and Access Management (Uprawnień). Uprawnienia umożliwiają przyznawanie bardziej szczegółowego dostępu do określonych zasobów Google Cloud i zapobiegają niepożądanemu dostępowi do innych zasobów. Na tej stronie opisujemy uprawnienia i role uprawnień w Cloud Firestore. Szczegółowy opis uprawnień znajdziesz w dokumentacji uprawnień.

Uprawnienia umożliwiają wdrożenie zasady jak najmniejszych uprawnień, dzięki czemu przyznajesz tylko niezbędny dostęp do zasobów.

Uprawnienia pozwalają kontrolować, kto (użytkownik) ma jakie (rola) uprawnienia do których zasobów, gdy ustawisz zasady uprawnień. Zasady uprawnień przyznają użytkownikowi co najmniej 1 rolę, dając mu określone uprawnienia. Możesz na przykład przyznać użytkownikowi rolę datastore.indexAdmin, która umożliwia tworzenie, modyfikowanie, usuwanie, wyświetlanie i wyświetlanie listy indeksów.

Uprawnienia i role

W tej sekcji znajdziesz podsumowanie uprawnień i ról obsługiwanych przez Cloud Firestore.

Wymagane uprawnienia do metod interfejsu API

W tabeli poniżej znajdziesz uprawnienia, które musi mieć element wywołujący, aby wykonać poszczególne działania:

Metoda Wymagane uprawnienia
projects.databases.documents
batchGet datastore.entities.get
batchWrite aktualizacja lub przekształcenie z warunkiem wstępnym istnienia ustawionym na false datastore.entities.create
batchWrite aktualizacja lub przekształcenie z warunkiem wstępnym istnienia ustawionym na true datastore.entities.create
batchWrite – aktualizacja lub przekształcenie bez warunku wstępnego datastore.entities.create
datastore.entities.update
beginTransaction datastore.databases.get
commit aktualizacja lub przekształcenie z warunkiem wstępnym istnienia ustawionym na false datastore.entities.create
commit – aktualizacja lub przekształcenie z warunkiem wstępnym istnienia ustawionym na true datastore.entities.update
commit – aktualizacja lub przekształcenie bez warunku wstępnego datastore.entities.create
datastore.entities.update
Usuń: commit datastore.entities.delete
createDocument datastore.entities.create
delete datastore.entities.delete
get datastore.entities.get
list datastore.entities.get
datastore.entities.list
listCollectionIds datastore.entities.list
partitionQuery datastore.entities.get
datastore.entities.list
patch datastore.entities.update
rollback datastore.databases.get
runAggregationQuery datastore.entities.get
datastore.entities.list
runQuery datastore.entities.get
datastore.entities.list
executePipeline (RPC)

z dowolnym z tych etapów:
- collection(...)
- collection_group(...)
- database()
datastore.entities.get
datastore.entities.list
executePipeline (RPC)

z dowolnym z tych etapów:
- documents(...)
datastore.entities.get
executePipeline (RPC)

z dowolnym z tych etapów:
- update(...)
datastore.entities.update
executePipeline (RPC)

z dowolnym z tych etapów:
- delete(...)
datastore.entities.delete
write (RPC) aktualizacja lub przekształcenie z warunkiem wstępnym istnienia ustawionym na false datastore.entities.create
write (RPC) aktualizacja lub przekształcenie z warunkiem wstępnym istnienia ustawionym na true datastore.entities.update
write (RPC) – aktualizacja lub przekształcenie bez warunku wstępnego datastore.entities.create
datastore.entities.update
Usuń: write (RPC) datastore.entities.delete
projects.databases.indexes
create datastore.schemas.create
delete datastore.schemas.delete
get datastore.schemas.get
list datastore.schemas.list
projects.databases
create datastore.databases.create

Jeśli żądanie create zawiera wartość tags, wymagane są te dodatkowe uprawnienia:

  • datastore.databases.createTagBinding

Jeśli chcesz sprawdzić, czy powiązania tagów zostały prawidłowo skonfigurowane, wyświetlając listę powiązań, wymagane są te dodatkowe uprawnienia:

  • datastore.databases.listTagBindings
  • datastore.databases.listEffectiveTags
delete datastore.databases.delete
get datastore.databases.getMetadata
list datastore.databases.list
patch datastore.databases.update
przywróć datastore.backups.restoreDatabase
clone datastore.databases.clone

Jeśli żądanie clone zawiera wartość tags, wymagane są te dodatkowe uprawnienia:

  • datastore.databases.createTagBinding

Jeśli chcesz sprawdzić, czy powiązania tagów zostały prawidłowo skonfigurowane, wyświetlając listę powiązań, wymagane są te dodatkowe uprawnienia:

  • datastore.databases.listTagBindings
  • datastore.databases.listEffectiveTags
projects.locations
get datastore.locations.get
list datastore.locations.list
projects.databases.backupschedules
get datastore.backupSchedules.get
list datastore.backupSchedules.list
utwórz datastore.backupSchedules.create
update datastore.backupSchedules.update
usuń datastore.backupSchedules.delete
projects.locations.backups
get datastore.backups.get
list datastore.backups.list
usuń datastore.backups.delete

Role zdefiniowane

W przypadku uprawnień każda metoda interfejsu API w Cloud Firestore wymaga, aby konto wysyłające żądanie do interfejsu API miało odpowiednie uprawnienia do korzystania z zasobu. Uprawnienia są przyznawane przez ustawienie zasad, które przyznają role użytkownikowi, grupie lub kontu usługi. Oprócz ról podstawowych, właściciela, edytującego i wyświetlającego, możesz przypisać użytkownikom projektu role Cloud Firestore.

W tabeli poniżej znajdziesz role uprawnień Cloud Firestore. Użytkownikowi, grupie lub kontu usługi możesz przypisać wiele ról.

Rola Uprawnienia Opis
roles/datastore.owner appengine.applications.get

datastore.*

resourcemanager.projects.get
resourcemanager.projects.list
Pełny dostęp do: Cloud Firestore.
roles/datastore.user appengine.applications.get

datastore.databases.get
datastore.databases.getMetadata
datastore.databases.list
datastore.entities.*
datastore.schemas.list
datastore.namespaces.get
datastore.namespaces.list
datastore.statistics.get
datastore.statistics.list

resourcemanager.projects.get
resourcemanager.projects.list
Uprawnienia do zapisu i odczytu danych w bazie danych Cloud Firestore. Rola przeznaczona dla deweloperów aplikacji i kont usługi.
roles/datastore.viewer appengine.applications.get

datastore.databases.get
datastore.databases.getMetadata
datastore.databases.list
datastore.entities.get
datastore.entities.list
datastore.schemas.get
datastore.schemas.list
datastore.namespaces.get
datastore.namespaces.list
datastore.statistics.get
datastore.statistics.list

resourcemanager.projects.get
resourcemanager.projects.list

datastore.insights.get
Dostęp do wszystkich zasobów Cloud Firestore w trybie odczytu.
roles/datastore.importExportAdmin appengine.applications.get
datastore.databases.export
datastore.databases.getMetadata
datastore.databases.import
datastore.operations.cancel
datastore.operations.get
datastore.operations.list
resourcemanager.projects.get
resourcemanager.projects.list
Pełny dostęp pozwalający na zarządzanie eksportem i importem.
roles/datastore.bulkAdmin resourcemanager.projects.get
resourcemanager.projects.list
datastore.databases.getMetadata
datastore.databases.bulkDelete
datastore.operations.cancel
datastore.operations.get
datastore.operations.list
Pełny dostęp z możliwością zarządzania operacjami zbiorczymi.
roles/datastore.indexAdmin appengine.applications.get

datastore.databases.getMetadata

datastore.schemas.*

datastore.operations.list

datastore.operations.get

resourcemanager.projects.get
resourcemanager.projects.list
Pełny dostęp do zarządzania definicjami indeksów.
roles/datastore.keyVisualizerViewer datastore.databases.getMetadata
datastore.keyVisualizerScans.get
datastore.keyVisualizerScans.list
resourcemanager.projects.get
resourcemanager.projects.list
Pełny dostęp do skanowań Key Visualizer.
roles/datastore.backupSchedulesViewer datastore.backupSchedules.get
datastore.backupSchedules.list
Dostęp z możliwością odczytu do harmonogramów tworzenia kopii zapasowych w bazie danych Cloud Firestore.
roles/datastore.backupSchedulesAdmin datastore.backupSchedules.get
datastore.backupSchedules.list
datastore.backupSchedules.create
datastore.backupSchedules.update
datastore.backupSchedules.delete
datastore.databases.list
datastore.databases.getMetadata
Pełny dostęp do harmonogramów tworzenia kopii zapasowych w bazie danych Cloud Firestore.
roles/datastore.backupsViewer datastore.backups.get
datastore.backups.list
Dostęp z możliwością odczytu do informacji o kopiach zapasowych w lokalizacji Cloud Firestore.
roles/datastore.backupsAdmin datastore.backups.get
datastore.backups.list
datastore.backups.delete
Pełny dostęp do kopii zapasowych w lokalizacji Cloud Firestore.
roles/datastore.restoreAdmin datastore.backups.get
datastore.backups.list
datastore.backups.restoreDatabase
datastore.databases.list
datastore.databases.create
datastore.databases.getMetadata
datastore.operations.list
datastore.operations.get
Możliwość przywrócenia kopii zapasowej Cloud Firestore do nowej bazy danych. Ta rola umożliwia też tworzenie nowych baz danych, niekoniecznie przez przywracanie z kopii zapasowej.
roles/datastore.cloneAdmin datastore.databases.clone
datastore.databases.list
datastore.databases.create
datastore.databases.getMetadata
datastore.operations.list
datastore.operations.get
Możliwość sklonowania bazy danych Cloud Firestore do nowej bazy danych. Ta rola umożliwia też tworzenie nowych baz danych, niekoniecznie przez klonowanie.
roles/datastore.statisticsViewer resourcemanager.projects.get
resourcemanager.projects.list
datastore.databases.getMetadata
datastore.insights.get
datastore.keyVisualizerScans.get
datastore.keyVisualizerScans.list
datastore.statistics.list
datastore.statistics.get
Dostęp z możliwością odczytu do obserwacji, statystyk i skanowań usługi Key Visualizer.

Role niestandardowe

Jeśli role zdefiniowane nie spełniają wymagań Twojej firmy, możesz zdefiniować własne role niestandardowe z samodzielnie określonymi uprawnieniami:

Role wymagane do tworzenia tagów i zarządzania nimi

Jeśli jakikolwiek tag jest reprezentowany w działaniach tworzenia lub przywracania, wymagane są niektóre role. Więcej informacji o tworzeniu par klucz-wartość tagu przed powiązaniem ich z zasobami bazy danych znajdziesz w artykule Tworzenie tagów i zarządzanie nimi.

Wymagane są te uprawnienia:

Wyświetl tagi
  • datastore.databases.listTagBindings
  • datastore.databases.listEffectiveTags
Zarządzanie tagami zasobów

W przypadku zasobu bazy danych, do którego dołączasz wartość tagu, wymagane jest to uprawnienie:

  • datastore.databases.createTagBinding

Uprawnienia

W tabeli poniżej znajdziesz uprawnienia obsługiwane przez Cloud Firestore.

Nazwa uprawnienia do bazy danych Opis
datastore.databases.get rozpocząć lub wycofać transakcję;
datastore.databases.import Importowanie encji do bazy danych.
datastore.databases.export Eksportowanie encji z bazy danych.
datastore.databases.bulkDelete Zbiorcze usuwanie encji z bazy danych.
datastore.databases.getMetadata Odczytywanie metadanych z bazy danych.
datastore.databases.list Wyświetlanie listy baz danych w projekcie.
datastore.databases.create Utwórz bazę danych.
datastore.databases.update Zaktualizuj bazę danych.
datastore.databases.delete Usuwanie bazy danych.
datastore.databases.clone sklonować bazę danych,
datastore.databases.createTagBinding utworzyć powiązanie tagu z bazą danych,
datastore.databases.deleteTagBinding Usuwanie powiązania tagu z bazą danych.
datastore.databases.listTagBindings Wyświetlanie listy wszystkich powiązań tagów bazy danych.
datastore.databases.listEffectiveTagBindings Wyświetlanie listy obowiązujących powiązań tagów bazy danych.
Nazwa uprawnienia do encji Opis
datastore.entities.create Utwórz dokument.
datastore.entities.delete Usuń dokument.
datastore.entities.get Odczytywanie dokumentu.
datastore.entities.list Wyświetlanie nazw dokumentów w projekcie.
(datastore.entities.get jest wymagany, aby uzyskać dostęp do danych dokumentu).
datastore.entities.update Aktualizowanie dokumentu.
Nazwa uprawnienia do indeksu Opis
datastore.schemas.create Utwórz indeks.
datastore.schemas.delete Usuń indeks.
datastore.schemas.get Odczytywanie metadanych z indeksu.
datastore.schemas.list Wyświetlanie listy indeksów w projekcie.
datastore.schemas.update Zaktualizuj indeks.
Nazwa uprawnienia do operacji Opis
datastore.operations.cancel Anulowanie długotrwałej operacji.
datastore.operations.delete Usuwanie długo trwającej operacji.
datastore.operations.get Pobiera najnowszy stan długo trwającej operacji.
datastore.operations.list Wyświetlanie listy długo trwających operacji.
Nazwa uprawnienia do projektu Opis
resourcemanager.projects.get Przeglądaj zasoby w projekcie.
resourcemanager.projects.list Wyświetlanie listy projektów, których jesteś właścicielem.
Nazwa uprawnienia dostępu do lokalizacji Opis
datastore.locations.get uzyskiwać szczegółowe informacje o lokalizacji bazy danych, Wymagane do utworzenia nowej bazy danych.
datastore.locations.list Wyświetl listę dostępnych lokalizacji baz danych. Wymagane do utworzenia nowej bazy danych.
Nazwa uprawnienia Key Visualizer Opis
datastore.keyVisualizerScans.get Uzyskiwanie informacji o skanowaniach Key Visualizer.
datastore.keyVisualizerScans.list Wyświetlanie listy dostępnych skanowań Key Visualizer.
Nazwa uprawnienia do harmonogramu tworzenia kopii zapasowych Opis
datastore.backupSchedules.get Uzyskiwanie informacji o harmonogramie tworzenia kopii zapasowych.
datastore.backupSchedules.list Wyświetl listę dostępnych harmonogramów tworzenia kopii zapasowych.
datastore.backupSchedules.create Utwórz harmonogram tworzenia kopii zapasowych.
datastore.backupSchedules.update Zaktualizuj harmonogram tworzenia kopii zapasowych.
datastore.backupSchedules.delete Usuń harmonogram tworzenia kopii zapasowych.
Nazwa uprawnienia do tworzenia kopii zapasowych Opis
datastore.backups.get Uzyskiwanie informacji o kopii zapasowej.
datastore.backups.list Wyświetl listę dostępnych kopii zapasowych.
datastore.backups.delete usunąć kopię zapasową,
datastore.backups.restoreDatabase przywrócić bazę danych z kopii zapasowej,
Nazwa uprawnienia do statystyk Opis
datastore.insights.get Uzyskiwanie statystyk dotyczących zasobu

Czas oczekiwania na zmianę roli

Cloud Firestore przechowuje uprawnienia w pamięci podręcznej przez 5 minut, więc zmiana roli zacznie obowiązywać dopiero po tym czasie.

Zarządzanie uprawnieniami Cloud Firestore

Zasady uprawnień możesz pobierać i ustawiać za pomocą konsoli Google Cloud, interfejsu IAM API lub narzędzia wiersza poleceń gcloud. Więcej informacji znajdziesz w artykule na temat przyznawania, zmieniania i odbierania dostępu użytkownikom projektu.

Konfigurowanie uprawnień dostępu warunkowego

Możesz używać warunków IAM do definiowania i egzekwowania warunkowej kontroli dostępu.

Na przykład ten warunek przypisuje podmiotowi zabezpieczeń rolę datastore.user do określonej daty:

{
  "role": "roles/datastore.user",
  "members": [
    "user:travis@example.com"
  ],
  "condition": {
    "title": "Expires_December_1_2023",
    "description": "Expires on December 1, 2023",
    "expression":
      "request.time < timestamp('2023-12-01T00:00:00.000Z')"
  }
}

Aby dowiedzieć się, jak zdefiniować warunki IAM na potrzeby dostępu tymczasowego, przeczytaj artykuł o konfigurowaniu dostępu tymczasowego.

Aby dowiedzieć się, jak skonfigurować warunki IAM na potrzeby dostępu do co najmniej 1 bazy danych, przeczytaj artykuł o konfigurowaniu warunków dostępu do bazy danych.

Zależność reguły zabezpieczeń od uprawnień

Cloud Firestore Security Rules dla klientów mobilnych i internetowych zależy od tego konta usługi i powiązania uprawnień:

Konto usługi Rola uprawnień
service-project_number@firebase-rules.iam.gserviceaccount.com roles/firebaserules.system

Firebase automatycznie skonfiguruje dla Ciebie to konto usługi. Jeśli usuniesz rolę firebaserules.system z tego konta usługi, reguły zabezpieczeń będą odrzucać wszystkie żądania. Aby przywrócić to powiązanie uprawnień, użyj tego polecenia gcloud CLI:

gcloud projects add-iam-policy-binding project_id \
--member=serviceAccount:service-project_number@firebase-rules.iam.gserviceaccount.com \
--role=roles/firebaserules.system

Aby określić project_id i project_number, zapoznaj się z artykułem Identyfikowanie projektów.

Użyj Google Cloud CLI zamiast konsoli Google Cloud, ponieważ rola firebaserules.system jest domyślnie ukryta w konsoli.

Co dalej?