Kimlik ve Erişim Yönetimi (IAM)

Cloud Firestore için sunucu istemci kitaplıklarını kullandığınızda Identity and Access Management (IAM) ile kaynaklarınıza erişimi yönetebilirsiniz. IAM, belirli Google Cloud kaynaklarına daha ayrıntılı erişim vermenize olanak tanır ve diğer kaynaklara istenmeyen erişimi engeller. Bu sayfada, Cloud Firestore için IAM izinleri ve rolleri açıklanmaktadır. IAM'nin ayrıntılı açıklaması için IAM belgelerini okuyun.

IAM, en az ayrıcalık ilkesi güvenlik ilkesini uygulamanıza olanak tanır. Böylece kaynaklarınıza yalnızca gerekli erişim iznini verirsiniz.

IAM, IAM politikaları belirleyerek hangi kaynaklar için kimin (kullanıcı) ne (rol) iznine sahip olduğunu kontrol etmenizi sağlar. IAM politikaları, bir kullanıcıya bir veya daha fazla rol vererek kullanıcıya belirli izinler sağlar. Örneğin, bir kullanıcıya datastore.indexAdmin rolünü verebilirsiniz. Bu rol, kullanıcının dizin oluşturmasına, değiştirmesine, silmesine, listelemesine veya görüntülemesine olanak tanır.

İzinler ve roller

Bu bölümde, Cloud Firestore tarafından desteklenen izinler ve roller özetlenmektedir.

API yöntemleri için gerekli izinler

Aşağıdaki tabloda, her bir işlemi gerçekleştirmek için çağrı yapanın sahip olması gereken izinler listelenmiştir:

Yöntem Gerekli izinler
projects.databases.documents
batchGet datastore.entities.get
exists ön koşulu false olarak ayarlanmış batchWrite güncellemesi veya dönüşümü datastore.entities.create
exists ön koşulu true olarak ayarlanmış batchWrite güncellemesi veya dönüşümü datastore.entities.create
batchWrite güncelleme veya dönüştürme işlemi ön koşul olmadan gerçekleştirildi datastore.entities.create
datastore.entities.update
beginTransaction datastore.databases.get
exists ön koşulu false olarak ayarlanmış commit güncellemesi veya dönüşümü datastore.entities.create
exists ön koşulu true olarak ayarlanmış commit güncellemesi veya dönüşümü datastore.entities.update
commit güncelleme veya dönüştürme işlemi ön koşul olmadan gerçekleştirildi datastore.entities.create
datastore.entities.update
commit silme 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)

Aşağıdaki aşamalardan herhangi birini içeren:
- collection(...)
- collection_group(...)
- database()
datastore.entities.get
datastore.entities.list
executePipeline (RPC)

Aşağıdaki aşamalardan herhangi birini içeren:
- documents(...)
datastore.entities.get
executePipeline (RPC)

Aşağıdaki aşamalardan herhangi birini içeren:
- update(...)
datastore.entities.update
executePipeline (RPC)

Aşağıdaki aşamalardan herhangi birini içeren:
- delete(...)
datastore.entities.delete
exists ön koşulu false olarak ayarlanmış write (RPC) güncellemesi veya dönüşümü datastore.entities.create
exists ön koşulu true olarak ayarlanmış write (RPC) güncellemesi veya dönüşümü datastore.entities.update
write (RPC) güncelleme veya dönüştürme işlemi ön koşul olmadan gerçekleştirildi datastore.entities.create
datastore.entities.update
write (RPC) silme 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

create isteğiniz bir tags değeri içeriyorsa aşağıdaki ek izinler gerekir:

  • datastore.databases.createTagBinding

Bağlamaları listeleyerek etiket bağlamalarının başarıyla ayarlanıp ayarlanmadığını doğrulamak istiyorsanız aşağıdaki ek izinler gerekir:

  • datastore.databases.listTagBindings
  • datastore.databases.listEffectiveTags
delete datastore.databases.delete
get datastore.databases.getMetadata
list datastore.databases.list
patch datastore.databases.update
restore datastore.backups.restoreDatabase
clone datastore.databases.clone

clone isteğiniz bir tags değeri içeriyorsa aşağıdaki ek izinler gerekir:

  • datastore.databases.createTagBinding

Bağlamaları listeleyerek etiket bağlamalarının başarıyla ayarlanıp ayarlanmadığını doğrulamak istiyorsanız aşağıdaki ek izinler gerekir:

  • 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
create datastore.backupSchedules.create
update datastore.backupSchedules.update
delete datastore.backupSchedules.delete
projects.locations.backups
get datastore.backups.get
list datastore.backups.list
delete datastore.backups.delete

Önceden tanımlanmış roller

IAM ile Cloud Firestore içindeki her API yöntemi, API isteğini gönderen hesabın kaynağı kullanmak için uygun izinlere sahip olmasını gerektirir. İzinler, bir kullanıcıya, gruba veya hizmet hesabına rol veren politikalar ayarlanarak verilir. Sahip, düzenleyici ve görüntüleyici gibi temel rollerin yanı sıra projenizin kullanıcılarına Cloud Firestore rolleri de verebilirsiniz.

Aşağıdaki tabloda Cloud Firestore IAM rolleri listelenmiştir. Bir kullanıcıya, gruba veya hizmet hesabına birden fazla rol verebilirsiniz.

Rol İzinler Açıklama
roles/datastore.owner appengine.applications.get

datastore.*

resourcemanager.projects.get
resourcemanager.projects.list
Cloud Firestore için tam erişim.
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
Cloud Firestore veritabanındaki verilere okuma/yazma erişimi. Uygulama geliştiriciler ve hizmet hesapları için tasarlanmıştır.
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
Tüm Cloud Firestore kaynaklarına okuma erişimi.
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
İçe ve dışa aktarımları yönetmek için tam erişim.
roles/datastore.bulkAdmin resourcemanager.projects.get
resourcemanager.projects.list
datastore.databases.getMetadata
datastore.databases.bulkDelete
datastore.operations.cancel
datastore.operations.get
datastore.operations.list
Toplu işlemleri yönetmek için tam erişim.
roles/datastore.indexAdmin appengine.applications.get

datastore.databases.getMetadata

datastore.schemas.*

datastore.operations.list

datastore.operations.get

resourcemanager.projects.get
resourcemanager.projects.list
Dizin tanımlarını yönetmek için tam erişim.
roles/datastore.keyVisualizerViewer datastore.databases.getMetadata
datastore.keyVisualizerScans.get
datastore.keyVisualizerScans.list
resourcemanager.projects.get
resourcemanager.projects.list
Key Visualizer taramalarına tam erişim.
roles/datastore.backupSchedulesViewer datastore.backupSchedules.get
datastore.backupSchedules.list
Cloud Firestore veritabanındaki yedekleme planlarına okuma erişimi.
roles/datastore.backupSchedulesAdmin datastore.backupSchedules.get
datastore.backupSchedules.list
datastore.backupSchedules.create
datastore.backupSchedules.update
datastore.backupSchedules.delete
datastore.databases.list
datastore.databases.getMetadata
Cloud Firestore veritabanındaki yedekleme programlarına tam erişim.
roles/datastore.backupsViewer datastore.backups.get
datastore.backups.list
Cloud Firestore konumundaki yedekleme bilgilerine okuma erişimi.
roles/datastore.backupsAdmin datastore.backups.get
datastore.backups.list
datastore.backups.delete
Cloud Firestore konumundaki yedeklere tam erişim.
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
Cloud Firestore yedeklemesini yeni bir veritabanına geri yükleme özelliği. Bu rol, yedeklemeden geri yükleme yapmadan yeni veritabanları oluşturma olanağı da sağlar.
roles/datastore.cloneAdmin datastore.databases.clone
datastore.databases.list
datastore.databases.create
datastore.databases.getMetadata
datastore.operations.list
datastore.operations.get
Cloud Firestore veritabanını yeni bir veritabanına kopyalama özelliği. Bu rol, klonlama yoluyla olması gerekmeksizin yeni veritabanları oluşturma olanağı da sağlar.
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
Analizler, istatistikler ve Key Visualizer taramalarına okuma erişimi.

Özel rol sayısı

Önceden tanımlanmış roller işletmenizin gereksinimlerini karşılamıyorsa belirttiğiniz izinlerle kendi özel rollerinizi tanımlayabilirsiniz:

Etiket oluşturmak ve yönetmek için gereken roller

Oluşturma veya geri yükleme işlemlerinde herhangi bir etiket varsa bazı roller gerekir. Etiket anahtar/değer çiftlerini veritabanı kaynaklarıyla ilişkilendirmeden önce oluşturma hakkında daha fazla bilgi için Etiket oluşturma ve yönetme başlıklı makaleyi inceleyin.

Aşağıda listelenen izinler gereklidir.

Etiketleri görüntüle
  • datastore.databases.listTagBindings
  • datastore.databases.listEffectiveTags
Kaynaklardaki etiketleri yönetme

Etiket değerini eklediğiniz veritabanı kaynağı için aşağıdaki izin gereklidir.

  • datastore.databases.createTagBinding

İzinler

Aşağıdaki tabloda, Cloud Firestore tarafından desteklenen izinler listelenmiştir.

Veritabanı izni adı Açıklama
datastore.databases.get İşlem başlatma veya geri alma
datastore.databases.import Varlıkları bir veritabanına aktarma
datastore.databases.export Veritabanındaki varlıkları dışa aktarma
datastore.databases.bulkDelete Veritabanındaki varlıkları toplu olarak silme
datastore.databases.getMetadata Veritabanından meta verileri okuma
datastore.databases.list Projedeki veritabanlarını listeleme
datastore.databases.create Veritabanı oluşturun.
datastore.databases.update Veritabanını güncelleme
datastore.databases.delete Veritabanı silme
datastore.databases.clone Veritabanı klonlama
datastore.databases.createTagBinding Veritabanı için etiket bağlama oluşturma
datastore.databases.deleteTagBinding Veritabanı için etiket bağlamayı silme
datastore.databases.listTagBindings Bir veritabanı için tüm etiket bağlamaları listeleme
datastore.databases.listEffectiveTagBindings Bir veritabanı için geçerli etiket bağlamaları listeleme
Varlık izni adı Açıklama
datastore.entities.create Doküman oluşturun.
datastore.entities.delete Belge silme
datastore.entities.get Bir dokümanı okuyun.
datastore.entities.list Bir projedeki dokümanların adlarını listeleme
(Belge verilerine erişmek için datastore.entities.get gereklidir.)
datastore.entities.update Doküman güncelleme
Dizin izni adı Açıklama
datastore.schemas.create Dizin oluşturun.
datastore.schemas.delete Dizini silme
datastore.schemas.get Bir dizindeki meta verileri okuma
datastore.schemas.list Bir projedeki dizinleri listeler.
datastore.schemas.update Dizini güncelleme
İşlem izni adı Açıklama
datastore.operations.cancel Uzun süreli bir işlemi iptal etme
datastore.operations.delete Uzun süreli bir işlemi siler.
datastore.operations.get Uzun süreli bir işlemin en son durumunu bildirir.
datastore.operations.list Uzun süreli işlemleri listeleme
Proje izni adı Açıklama
resourcemanager.projects.get Projedeki kaynaklara göz atın.
resourcemanager.projects.list Sahibi olduğunuz projeleri listeleme
Konum izni adı Açıklama
datastore.locations.get Veritabanı konumuyla ilgili ayrıntıları alma Yeni bir veritabanı oluşturmak için gereklidir.
datastore.locations.list Kullanılabilir veritabanı konumlarını listeleme Yeni bir veritabanı oluşturmak için gereklidir.
Key Visualizer izin adı Açıklama
datastore.keyVisualizerScans.get Key Visualizer taramaları hakkında ayrıntılı bilgi edinin.
datastore.keyVisualizerScans.list Kullanılabilir Key Visualizer taramalarını listeleme
Yedekleme programı izin adı Açıklama
datastore.backupSchedules.get Yedekleme programı hakkında ayrıntılı bilgi edinme
datastore.backupSchedules.list Mevcut yedekleme programlarını listeleme
datastore.backupSchedules.create Yedekleme programı oluşturun.
datastore.backupSchedules.update Yedekleme programını güncelleme
datastore.backupSchedules.delete Yedekleme programını silme
Yedekleme izni adı Açıklama
datastore.backups.get Yedeklemeyle ilgili ayrıntıları öğrenme
datastore.backups.list Kullanılabilir yedekleri listeleme
datastore.backups.delete Yedek silme
datastore.backups.restoreDatabase Veritabanını yedekten geri yükleme
Analiz izni adı Açıklama
datastore.insights.get Bir kaynağın analizlerini alma

Rol değişikliği gecikmesi

Cloud Firestore, IAM izinlerini 5 dakika boyunca önbelleğe alır. Bu nedenle, rol değişikliğinin geçerlilik kazanması 5 dakikayı bulabilir.

Cloud Firestore IAM'yi yönetme

Google Cloud Console, IAM API veya gcloud komut satırı aracını kullanarak IAM politikalarını alabilir ve ayarlayabilirsiniz. Ayrıntılar için Proje üyelerine erişim izni verme, erişim iznini değiştirme ve iptal etme başlıklı makaleyi inceleyin.

Koşullu erişim izinlerini yapılandırma

Koşullu erişim denetimi tanımlamak ve uygulamak için IAM koşullarını kullanabilirsiniz.

Örneğin, aşağıdaki koşul, belirli bir tarihe kadar bir alt öğeye datastore.user rolünü atar:

{
  "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')"
  }
}

Geçici erişim için IAM Condition'larını nasıl tanımlayacağınızı öğrenmek istiyorsanız Geçici erişimi yapılandırma başlıklı makaleyi inceleyin.

Bir veya daha fazla veritabanına erişim için IAM Koşulları'nı nasıl yapılandıracağınızı öğrenmek istiyorsanız Veritabanı erişim koşullarını yapılandırma başlıklı makaleyi inceleyin.

IAM'ye güvenlik kuralı bağımlılığı

Mobil/web istemcileri için Cloud Firestore Security Rules, aşağıdaki hizmet hesabına ve IAM bağlamasına bağlıdır:

Hizmet hesabı IAM rolü
service-project_number@firebase-rules.iam.gserviceaccount.com roles/firebaserules.system

Firebase, bu hizmet hesabını sizin için otomatik olarak ayarlar. firebaserules.system rolünü bu hizmet hesabından kaldırırsanız güvenlik kurallarınız tüm istekleri reddeder. Bu IAM bağlamasını geri yüklemek için aşağıdaki gcloud CLI komutunu kullanın:

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

project_id ve project_number değerlerinizi belirlemek için Projeleri tanımlama başlıklı makaleyi inceleyin.

firebaserules.system rolü varsayılan olarak konsolda gizlendiğinden Google Cloud konsolu yerine Google Cloud CLI aracını kullanın.

Sırada ne var?