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 |
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 |
commit sil |
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)aşağıdaki aşamalardan herhangi biriyle: - collection(...)- collection_group(...)- database()
|
datastore.entities.get
|
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 |
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
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:
|
delete |
datastore.databases.delete |
get |
datastore.databases.getMetadata |
list |
datastore.databases.list |
patch |
datastore.databases.update |
| restore | datastore.backups.restoreDatabase |
clone |
datastore.databases.clone
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:
|
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.getdatastore.*resourcemanager.projects.getresourcemanager.projects.list |
Cloud Firestore'a tam erişim |
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 |
Cloud Firestore veritabanındaki verilere okuma/yazma erişimi. Uygulama geliştiricileri ve hizmet hesaplarına yöneliktir. |
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 |
Tüm Cloud Firestore kaynaklarına okuma erişimi. |
roles/datastore.importExportAdmin |
appengine.applications.getdatastore.databases.exportdatastore.databases.getMetadatadatastore.databases.importdatastore.operations.canceldatastore.operations.getdatastore.operations.listresourcemanager.projects.getresourcemanager.projects.list |
İçe ve dışa aktarımları yönetmek için tam erişim. |
roles/datastore.bulkAdmin |
resourcemanager.projects.getresourcemanager.projects.listdatastore.databases.getMetadatadatastore.databases.bulkDeletedatastore.operations.canceldatastore.operations.getdatastore.operations.list |
Toplu işlemleri yönetmek için tam erişim. |
roles/datastore.indexAdmin |
appengine.applications.getdatastore.databases.getMetadatadatastore.schemas.*datastore.operations.listdatastore.operations.getresourcemanager.projects.getresourcemanager.projects.list |
Dizin tanımlarını yönetmek için tam erişim. |
roles/datastore.keyVisualizerViewer |
datastore.databases.getMetadatadatastore.keyVisualizerScans.getdatastore.keyVisualizerScans.listresourcemanager.projects.getresourcemanager.projects.list |
Key Visualizer taramalarına tam erişim. |
roles/datastore.backupSchedulesViewer |
datastore.backupSchedules.getdatastore.backupSchedules.list |
Cloud Firestore veritabanındaki yedekleme planlarına okuma erişimi. |
roles/datastore.backupSchedulesAdmin |
datastore.backupSchedules.getdatastore.backupSchedules.listdatastore.backupSchedules.createdatastore.backupSchedules.updatedatastore.backupSchedules.deletedatastore.databases.listdatastore.databases.getMetadata |
Cloud Firestore veritabanındaki yedekleme planlarına tam erişim. |
roles/datastore.backupsViewer |
datastore.backups.getdatastore.backups.list |
Cloud Firestore konumundaki yedekleme bilgilerine okuma erişimi. |
roles/datastore.backupsAdmin |
datastore.backups.getdatastore.backups.listdatastore.backups.delete |
Cloud Firestore konumundaki yedeklere tam erişim. |
roles/datastore.restoreAdmin |
datastore.backups.getdatastore.backups.listdatastore.backups.restoreDatabasedatastore.databases.listdatastore.databases.createdatastore.databases.getMetadatadatastore.operations.listdatastore.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.clonedatastore.databases.listdatastore.databases.createdatastore.databases.getMetadatadatastore.operations.listdatastore.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.getresourcemanager.projects.listdatastore.databases.getMetadatadatastore.insights.getdatastore.keyVisualizerScans.getdatastore.keyVisualizerScans.listdatastore.statistics.listdatastore.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.listTagBindingsdatastore.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?
- IAM hakkında daha fazla bilgi edinin.
- IAM rolleri verme.
- Kimlik doğrulama hakkında bilgi edinin.