Gdy używasz bibliotek klienta serwera w Cloud Firestore, możesz zarządzać dostępem do zasobów za pomocą Identity and Access Management (IAM). IAM umożliwia przyznawanie bardziej szczegółowych uprawnień dostępu do konkretnych zasobów Google Cloud i zapobiega niepożądanemu dostępowi do innych zasobów. Na tej stronie opisujemy uprawnienia i role IAM w przypadku Cloud Firestore. Szczegółowy opis uprawnień znajdziesz w dokumentacji uprawnień.
IAM umożliwia wdrożenie zasady jak najmniejszych uprawnień, dzięki czemu przyznajesz dostęp do zasobów tylko w niezbędnym zakresie.
Uprawnienia pozwalają kontrolować, kto (użytkownik) ma jakie (rola) uprawnienia do których zasobów, gdy ustawisz zasady uprawnień.
Zasady IAM przyznają użytkownikowi co najmniej 1 rolę, która daje mu określone uprawnienia. Możesz na przykład przyznać użytkownikowi rolę datastore.indexAdmin, która umożliwia mu tworzenie, modyfikowanie, usuwanie, wyświetlanie i przeglądanie 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ć 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 ustawionym warunkiem wstępnym exists na false |
datastore.entities.create |
batchWrite aktualizować lub przekształcać za pomocą warunku wstępnego exists ustawionego na true; |
datastore.entities.create |
batchWrite aktualizować lub przekształcać bez warunku wstępnego; |
datastore.entities.create |
beginTransaction |
datastore.databases.get |
commit aktualizować lub przekształcać za pomocą warunku wstępnego exists ustawionego na false; |
datastore.entities.create |
commit aktualizować lub przekształcać za pomocą warunku wstępnego exists ustawionego na true; |
datastore.entities.update |
commit aktualizować lub przekształcać bez warunku wstępnego; |
datastore.entities.create |
commit usuń |
datastore.entities.delete |
createDocument |
datastore.entities.create |
delete |
datastore.entities.delete |
get |
datastore.entities.get |
list |
datastore.entities.getdatastore.entities.list |
listCollectionIds |
datastore.entities.list |
partitionQuery |
datastore.entities.get |
patch |
datastore.entities.update |
rollback |
datastore.databases.get |
runAggregationQuery |
datastore.entities.get |
runQuery |
datastore.entities.get |
executePipeline (RPC)z dowolnym z tych etapów: – collection(...)– collection_group(...)– database()
|
datastore.entities.get
|
executePipeline (RPC)na dowolnym z tych etapów: – documents(...) |
datastore.entities.get
|
executePipeline (RPC)na dowolnym z tych etapów: – update(...) |
datastore.entities.update
|
executePipeline (RPC)na dowolnym z tych etapów: – delete(...) |
datastore.entities.delete
|
write (RPC) aktualizować lub przekształcać za pomocą warunku wstępnego exists ustawionego na false; |
datastore.entities.create |
write (RPC) aktualizować lub przekształcać za pomocą warunku wstępnego exists ustawionego na true; |
datastore.entities.update |
write (RPC) aktualizować lub przekształcać bez warunku wstępnego; |
datastore.entities.create |
write (RPC) usuń |
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.createJeśli żądanie
Jeśli chcesz sprawdzić, czy powiązania tagów zostały ustawione prawidłowo, wyświetlając listę powiązań, musisz mieć te dodatkowe uprawnienia:
|
delete |
datastore.databases.delete |
get |
datastore.databases.getMetadata |
list |
datastore.databases.list |
patch |
datastore.databases.update |
| przywróć | datastore.backups.restoreDatabase |
clone |
datastore.databases.cloneJeśli żądanie
Jeśli chcesz sprawdzić, czy powiązania tagów zostały ustawione prawidłowo, wyświetlając listę powiązań, musisz mieć te dodatkowe uprawnienia:
|
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 |
Gotowe role
W przypadku IAM każda metoda interfejsu API Cloud Firestorewymaga, 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ściciel, edytujący i wyświetlający możesz przyznawać użytkownikom projektu role Cloud Firestore.
W tabeli poniżej znajdziesz listę ról Cloud Firestore IAM. Użytkownikowi, grupie lub kontu usługi możesz przyznać wiele ról.
| Rola | Uprawnienia | Opis |
|---|---|---|
roles/datastore.owner |
appengine.applications.getdatastore.*resourcemanager.projects.getresourcemanager.projects.list |
Pełny dostęp do Cloud Firestore. |
roles/datastore.user |
appengine.applications.getdatastore.databases.getdatastore.databases.getMetadatadatastore.databases.listdatastore.entities.*datastore.schemas.listdatastore.namespaces.getdatastore.namespaces.listdatastore.statistics.getdatastore.statistics.listresourcemanager.projects.getresourcemanager.projects.list |
Uprawnienia do zapisu i odczytu danych w bazie danych Cloud Firestore. Rola przeznaczona dla programistów aplikacji i kont usługi. |
roles/datastore.viewer |
appengine.applications.getdatastore.databases.getdatastore.databases.getMetadatadatastore.databases.listdatastore.entities.getdatastore.entities.listdatastore.schemas.getdatastore.schemas.listdatastore.namespaces.getdatastore.namespaces.listdatastore.statistics.getdatastore.statistics.listresourcemanager.projects.getresourcemanager.projects.listdatastore.insights.get |
Dostęp do wszystkich zasobów Cloud Firestore w trybie odczytu. |
roles/datastore.importExportAdmin |
appengine.applications.getdatastore.databases.exportdatastore.databases.getMetadatadatastore.databases.importdatastore.operations.canceldatastore.operations.getdatastore.operations.listresourcemanager.projects.getresourcemanager.projects.list |
Pełny dostęp pozwalający na zarządzanie eksportem i importem. |
roles/datastore.bulkAdmin |
resourcemanager.projects.getresourcemanager.projects.listdatastore.databases.getMetadatadatastore.databases.bulkDeletedatastore.operations.canceldatastore.operations.getdatastore.operations.list |
Pełny dostęp z możliwością zarządzania operacjami zbiorczymi. |
roles/datastore.indexAdmin |
appengine.applications.getdatastore.databases.getMetadatadatastore.schemas.*datastore.operations.listdatastore.operations.getresourcemanager.projects.getresourcemanager.projects.list |
Pełny dostęp do zarządzania definicjami indeksów. |
roles/datastore.keyVisualizerViewer |
datastore.databases.getMetadatadatastore.keyVisualizerScans.getdatastore.keyVisualizerScans.listresourcemanager.projects.getresourcemanager.projects.list |
Pełny dostęp do skanowań Key Visualizer. |
roles/datastore.backupSchedulesViewer |
datastore.backupSchedules.getdatastore.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.getdatastore.backupSchedules.listdatastore.backupSchedules.createdatastore.backupSchedules.updatedatastore.backupSchedules.deletedatastore.databases.listdatastore.databases.getMetadata |
Pełny dostęp do harmonogramów tworzenia kopii zapasowych w bazie danych Cloud Firestore. |
roles/datastore.backupsViewer |
datastore.backups.getdatastore.backups.list |
Dostęp z możliwością odczytu do informacji o kopii zapasowej w Cloud Firestorelokalizacji. |
roles/datastore.backupsAdmin |
datastore.backups.getdatastore.backups.listdatastore.backups.delete |
Pełny dostęp do kopii zapasowych w lokalizacji Cloud Firestore. |
roles/datastore.restoreAdmin |
datastore.backups.getdatastore.backups.listdatastore.backups.restoreDatabasedatastore.databases.listdatastore.databases.createdatastore.databases.getMetadatadatastore.operations.listdatastore.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.clonedatastore.databases.listdatastore.databases.createdatastore.databases.getMetadatadatastore.operations.listdatastore.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.getresourcemanager.projects.listdatastore.databases.getMetadatadatastore.insights.getdatastore.keyVisualizerScans.getdatastore.keyVisualizerScans.listdatastore.statistics.listdatastore.statistics.get |
Dostęp z możliwością odczytu do obserwacji, statystyk i skanowań usługi Key Visualizer. |
Role niestandardowe
Jeśli wstępnie zdefiniowane role 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 w działaniach związanych z tworzeniem lub przywracaniem występuje tag, 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.listTagBindingsdatastore.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
Tabela poniżej zawiera listę uprawnień obsługiwanych przez Cloud Firestore.
| Nazwa uprawnienia do bazy danych | Opis | |
|---|---|---|
datastore.databases.get |
Rozpoczynanie lub wycofywanie transakcji. | |
datastore.databases.import |
Importowanie encji do bazy danych. | |
datastore.databases.export |
Eksportowanie encji z bazy danych. | |
datastore.databases.bulkDelete |
Zbiorcze usuwanie jednostek 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 |
Aktualizowanie bazy danych. | |
datastore.databases.delete |
Usuń bazę danych. | |
datastore.databases.clone |
sklonować bazę danych, | |
datastore.databases.createTagBinding |
Utwórz wiązanie tagu dla bazy danych. | |
datastore.databases.deleteTagBinding |
Usuń wiązanie tagu w przypadku bazy danych. | |
datastore.databases.listTagBindings |
Wyświetla listę wszystkich powiązań tagów z bazą danych. | |
datastore.databases.listEffectiveTagBindings |
Wyświetla listę obowiązujących powiązań tagów z bazą danych. | |
| Nazwa uprawnienia do jednostki | Opis | |
datastore.entities.create |
Utwórz dokument. | |
datastore.entities.delete |
Usuń dokument. | |
datastore.entities.get |
odczytać dokument, | |
datastore.entities.list |
Wyświetlanie nazw dokumentów w projekcie. ( datastore.entities.get jest wymagany do uzyskania dostępu do danych dokumentu). |
|
datastore.entities.update |
zaktualizować dokument, | |
| Nazwa uprawnienia 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ługo trwającej 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 |
Uzyskaj szczegółowe informacje o skanach Key Visualizer. | |
datastore.keyVisualizerScans.list |
Wyświetlanie listy dostępnych skanów Key Visualizer. | |
| Nazwa uprawnienia Harmonogram tworzenia kopii zapasowych | Opis | |
datastore.backupSchedules.get |
Uzyskaj szczegółowe informacje 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 |
Pobierz szczegóły kopii zapasowej. | |
datastore.backups.list |
Wyświetl listę dostępnych kopii zapasowych. | |
datastore.backups.delete |
Usuń 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 |
Opóźnienie zmiany roli
Cloud Firestore buforuje uprawnienia IAM przez 5 minut, więc zastosowanie zmiany roli może potrwać do 5 minut.
Zarządzanie uprawnieniami Cloud Firestore
Zasady IAM 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 Przyznawanie, zmienianie i odbieranie dostępu członkom projektu.
Konfigurowanie uprawnień dostępu warunkowego
Możesz używać warunków uprawnień 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 uprawnień dla tymczasowego dostępu, zapoznaj się z artykułem Konfigurowanie tymczasowego dostępu.
Aby dowiedzieć się, jak skonfigurować warunki uprawnień dotyczące dostępu do co najmniej 1 bazy danych, przeczytaj artykuł Konfigurowanie warunków dostępu do bazy danych.
Zależność reguły zabezpieczeń od IAM
Cloud Firestore Security Rules w przypadku klientów mobilnych i internetowych zależą 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 to konto usługi. Jeśli usuniesz z tego konta usługi rolę firebaserules.system, reguły bezpieczeństwa będą odrzucać wszystkie żądania. Aby przywrócić to powiązanie IAM, 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, przeczytaj artykuł Identyfikowanie projektów.
Użyj Google Cloud CLI zamiast konsoli Google Cloud, ponieważ rola firebaserules.system jest domyślnie ukryta w konsoli.
Co dalej?
- Dowiedz się więcej o IAM.
- Przyznaj role uprawnień.
- Dowiedz się więcej o uwierzytelnianiu.