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 izni 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 inceleyin.
IAM, en az ayrıcalık ilkesi güvenlik ilkesini benimsemenize olanak tanır. Böylece kaynaklarınıza yalnızca gerekli erişimi verirsiniz.
IAM, IAM politikaları ayarlayarak hangi kaynaklar için kimin (kullanıcı) hangi (rol) izne 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üncelleme veya dönüştürme |
datastore.entities.create |
batchWrite, exists precondition true olarak ayarlanmış şekilde güncelleme veya dönüştürme |
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üncelleme veya dönüştürme |
datastore.entities.create |
commit, exists precondition true olarak ayarlanmış şekilde güncelleme veya dönüştürme |
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
|
executePipeline (RPC)aşağıdaki aşamalardan herhangi biriyle: - update(...) |
datastore.entities.update
|
executePipeline (RPC)aşağıdaki aşamalardan herhangi biriyle: - delete(...) |
datastore.entities.delete
|
write (RPC), exists precondition false olarak ayarlanmış şekilde güncelleme veya dönüştürme |
datastore.entities.create |
write (RPC), exists precondition true olarak ayarlanmış şekilde güncelleme veya dönüştürme |
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 her API yönteminde, API isteğinde bulunan hesabın kaynağı kullanmak için uygun izinlere sahip olması gerekir İzinler, kullanıcıya, gruba veya hizmet hesabına roller veren politikalar ayarlanarak verilir. Temel roller olan sahip, düzenleyici ve görüntüleyici 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ştiriciler ve hizmet hesapları için tasarlanmıştır. |
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 Bu rol, yedeklemeden geri yükleme yapmadan da yeni veritabanları oluşturma olanağı sağlar. |
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 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 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ı bir veritabanına aktarın. | |
datastore.databases.export |
Varlıkları bir veritabanından dışa aktarın. | |
datastore.databases.bulkDelete |
Bir veritabanındaki öğeleri toplu olarak silme. | |
datastore.databases.getMetadata |
Veri tabanından meta verileri okuma. | |
datastore.databases.list |
Bir projedeki veritabanlarını listeleme | |
datastore.databases.create |
Veritabanı oluşturun. | |
datastore.databases.update |
Veritabanını güncelleyin. | |
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 |
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ı listeleyin. | |
| Varlık izni adı | Açıklama | |
datastore.entities.create |
Doküman oluşturma | |
datastore.entities.delete |
Belge silme | |
datastore.entities.get |
Bir belgeyi okuma | |
datastore.entities.list |
Bir projedeki dokümanların adlarını listeler. (Belge verilerine erişmek için datastore.entities.get gereklidir.) |
|
datastore.entities.update |
Belgeyi güncelleyin. | |
| Dizin izni adı | Açıklama | |
datastore.schemas.create |
Dizin oluşturma | |
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üren bir işlemi iptal edin. | |
datastore.operations.delete |
Uzun süren bir işlemi silin. | |
datastore.operations.get |
Uzun süreli bir işlemin en son durumunu alır. | |
datastore.operations.list |
Uzun süren 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 |
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ı listeleyin. 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 |
Mevcut Key Visualizer taramalarını listeleme | |
| 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üncelleme | |
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 listeleme | |
datastore.backups.delete |
Yedeklemeyi 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çerli olması 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 verme, erişimi değiştirme ve erişimi 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 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.
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ı makaleye bakın.
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.