Kimlik ve Erişim Yönetimi (IAM)

Cloud Firestore için sunucu istemci kitaplıklarını kullandığınızda, kaynaklarınıza erişimi Kimlik ve Erişim Yönetimi (IAM) ile yönetebilirsiniz. IAM, belirli Google Cloud kaynaklara daha ayrıntılı erişim izni vermenizi sağlar 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 inceleyin.

IAM, en az ayrıcalık ilkesini kullanmanıza olanak tanır. Böylece kaynaklarınıza yalnızca gerekli olan erişim iznini verirsiniz.

IAM, IAM politikaları ayarlayarak hangi kaynaklar için kimin (kullanıcı) ne (rol) iznine sahip olduğunu kontrol etmenize olanak tanır. IAM politikaları, bir kullanıcıya bir veya daha fazla rol vererek kullanıcıya belirli izinler tanır. Örneğin, bir kullanıcıya datastore.indexAdmin rolü atayabilirsiniz. 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, arayanın her işlemi gerçekleştirmek için sahip olması gereken izinler listelenmiştir:

Yöntem Gerekli izinler
projects.databases.documents
batchGet datastore.entities.get
batchWrite, exists precondition false olarak ayarlanmış şekilde güncellenir veya dönüştürülür. datastore.entities.create
batchWrite, exists precondition true olarak ayarlanmış şekilde güncellenir veya dönüştürülür. datastore.entities.create
batchWrite Ön koşul olmadan güncelleme veya dönüştürme datastore.entities.create
datastore.entities.update
beginTransaction datastore.databases.get
commit, exists precondition false olarak ayarlanmış şekilde güncellenir veya dönüştürülür. datastore.entities.create
commit, exists precondition true olarak ayarlanmış şekilde güncellenir veya dönüştürülür. datastore.entities.update
commit Ön koşul olmadan güncelleme veya dönüştürme datastore.entities.create
datastore.entities.update
commit sil 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 biriyle:
- collection(...)
- collection_group(...)
- database()
datastore.entities.get
datastore.entities.list
executePipeline (RPC)

aşağıdaki aşamalardan herhangi biriyle:
- documents(...)
datastore.entities.get
write (RPC), exists precondition false olarak ayarlanmış şekilde güncellenir veya dönüştürülür. datastore.entities.create
write (RPC), exists precondition true olarak ayarlanmış şekilde güncellenir veya dönüştürülür. datastore.entities.update
write (RPC) Ön koşul olmadan güncelleme veya dönüştürme datastore.entities.create
datastore.entities.update
write (RPC) sil 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ğinizde tags değeri varsa aşağıdaki ek izinler gerekir:

  • datastore.databases.createTagBinding

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

  • 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ğinizde tags değeri varsa aşağıdaki ek izinler gerekir:

  • datastore.databases.createTagBinding

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

  • 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 için API isteğinde bulunan hesabın kaynağı kullanmak üzere uygun izinlere sahip olması gerekir. İzinler, kullanıcılara, gruplara veya hizmet hesaplarına roller veren politikalar ayarlanarak verilir. Sahip, düzenleyici ve görüntüleyici temel rollerine ek olarak, 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'a 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ştiricileri ve hizmet hesaplarına yöneliktir.
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 planları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 yedeğini yeni bir veritabanına geri yükleme olanağı. Bu rol, yedeklemeden geri yükleme yapmadan da yeni veritabanları oluşturma olanağı tanır.
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 klonlayabilme. Bu rol, klonlama yoluyla olmasa da yeni veritabanları oluşturma olanağı da sunar.
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, İstatistikler ve Key Visualizer taramalarına okuma erişimi.

Özel rol sayısı

Önceden tanımlanmış roller işletme gereksinimlerinizi karşılamıyorsa belirttiğiniz izinlere sahip 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 gösteriliyorsa bazı roller gereklidir. Etiketleri veritabanı kaynaklarıyla ilişkilendirmeden önce etiket anahtar-değer çiftleri 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ı veritabanına aktarın.
datastore.databases.export Bir veritabanından varlıkları dışa aktarın.
datastore.databases.bulkDelete Bir veritabanındaki varlıkları toplu olarak silme
datastore.databases.getMetadata Bir veritabanından meta verileri okuma.
datastore.databases.list Bir 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ını klonlayın.
datastore.databases.createTagBinding Veritabanı için etiket bağlama oluşturun.
datastore.databases.deleteTagBinding Bir veritabanı için etiket bağlamayı silin.
datastore.databases.listTagBindings Bir veritabanı için tüm etiket bağlamalarını listeler.
datastore.databases.listEffectiveTagBindings Bir veritabanı için etkili etiket bağlamalarını listeler.
Varlık izni adı Açıklama
datastore.entities.create Doküman oluşturma
datastore.entities.delete Doküman silme
datastore.entities.get Bir dokümanı okuma
datastore.entities.list Bir projedeki dokümanların adlarını listeleme.
(Belge verilerine erişmek için datastore.entities.get gereklidir.)
datastore.entities.update Bir dokümanı güncelleyin.
Dizin izni adı Açıklama
datastore.schemas.create Dizin oluşturun.
datastore.schemas.delete Dizin silme
datastore.schemas.get Dizinden meta verileri okuma.
datastore.schemas.list Bir projedeki dizinleri listeleme.
datastore.schemas.update Dizini güncelleyin.
İş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 silin.
datastore.operations.get Uzun süreli bir işlemin en son durumunu alır.
datastore.operations.list Uzun süreli işlemleri listeleyin.
Proje izni adı Açıklama
resourcemanager.projects.get Projedeki kaynaklara göz atın.
resourcemanager.projects.list Sahip olunan projeleri listeleme
Konum izni adı Açıklama
datastore.locations.get Bir veritabanı konumu hakkında ayrıntılı bilgi edinin. Yeni bir veritabanı oluşturmak için gereklidir.
datastore.locations.list Kullanılabilir veritabanı konumlarını listeler. 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ı listeler.
Yedekleme Programı izni adı Açıklama
datastore.backupSchedules.get Yedekleme planı hakkında ayrıntılı bilgi edinin.
datastore.backupSchedules.list Kullanılabilir yedekleme planlarını listeler.
datastore.backupSchedules.create Yedekleme planı oluşturun.
datastore.backupSchedules.update Yedekleme zamanlamasını güncelleyin.
datastore.backupSchedules.delete Yedekleme planını silme
Yedekleme izni adı Açıklama
datastore.backups.get Yedekleme hakkında ayrıntılı bilgi edinin.
datastore.backups.list Kullanılabilir yedekleri listeler.
datastore.backups.delete Yedeklemeyi silme
datastore.backups.restoreDatabase Bir 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çerli olması 5 dakika sürer.

Cloud Firestore IAM'yi yönetme

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

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

Koşullu erişim denetimini tanımlamak ve zorunlu kılmak için IAM koşullarını kullanabilirsiniz.

Örneğin, aşağıdaki koşul, belirtilen tarihe kadar bir asile 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 koşullarını nasıl tanımlayacağınızı öğrenmek üzere Geçici erişimi yapılandırma başlıklı makaleye bakın.

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.

Güvenlik kuralının IAM'ye 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 oluşturur. Bu hizmet hesabından firebaserules.system rolünü 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.

Google Cloud Console yerine Google Cloud CLI rolünü kullanın. Çünkü firebaserules.system rolü, konsolda varsayılan olarak gizlidir.

Sırada ne var?