Bir uzantının belirtilen eylemleri gerçekleştirmesi için Firebase, yüklü bir uzantının her örneğine bir hizmet hesabı aracılığıyla projeye ve verilerine sınırlı erişim izni verir.
Hizmet hesabı nedir?
Hizmet hesabı, Google kullanıcı hesabının özel bir türüdür. Google hizmetlerine yetkili API çağrıları yapabilen, insan olmayan bir kullanıcıyı temsil eder.
Bir uzantının kurulumu sırasında Firebase, projedeki uzantı için bir hizmet hesabı oluşturur. Bir uzantının yüklü her örneğinin kendi hizmet hesabı vardır. Bir uzantı örneği kaldırılırsa Firebase, uzantının hizmet hesabını siler.
Uzantılar için oluşturulan hizmet hesapları şu biçimdedir:
ext- extension-instance-id @ project-id .iam.gserviceaccount.com
Firebase, uzantının hizmet hesabına belirli roller (izin paketleri) atayarak bir uzantının projeye ve verilerine erişimini sınırlandırır. Bir uzantı oluşturduğunuzda, uzantınızın hangi rolleri çalıştırması gerektiğini belirlersiniz, ardından bu rolleri ve uzantınızın neden bu rollere ihtiyaç duyduğunu extension.yaml
dosyanızda listelersiniz (bu sayfanın altındaki örneğe bakın).
Uzantınızın hangi rolleri gerektirdiğini belirleyin
Uzantınızı oluşturduğunuzda, uzantınızın çalışması için gereken erişim düzeyini belirlersiniz.
Kurulum sırasında Firebase CLI, kullanıcıdan her rol tarafından verilen erişim düzeyini kabul etmesini ister. Uzantınız gerçekte ihtiyaç duyduğundan daha fazla rol talep ederse kullanıcıların onu yükleme olasılığı daha düşük olabilir.
Uzantınızın bir ürünle etkileşimde bulunup bulunmadığını belirleyin:
Uzantınız bir ürünle etkileşime giriyorsa uzantınıza o ürüne erişim izni vermeniz gerekir.
Örneğin, uzantınız bir Gerçek Zamanlı Veritabanı örneğine veri yazıyorsa , uzantınızın bir Gerçek Zamanlı Veritabanı rolüne (özellikle
firebasedatabase.admin
) ihtiyacı vardır.Uzantınız yalnızca bir üründeki tetikleyici etkinliği dinliyorsa uzantınızın o ürünle ilişkilendirilmiş bir role ihtiyacı yoktur .
Örneğin, uzantınız bir Gerçek Zamanlı Veritabanı örneğine yazma işlemi sırasında tetikleniyorsa (ancak veritabanına hiçbir şey yazmıyorsa) uzantınızın bir Gerçek Zamanlı Veritabanı rolüne ihtiyacı yoktur .
Uzantınızın hangi ürünlerle etkileşimde bulunduğunu belirledikten sonra, söz konusu etkileşim için hangi rolün gerekli olduğuna karar vermeniz gerekir. Bazı ürünler, gerçekleştirilen eyleme veya eylem grubuna bağlı olarak farklı roller sunar.
Örneğin, uzantınızın bir Cloud Storage grubuyla etkileşime girdiğini varsayalım.
storage.objectCreator
rolü, uzantının Cloud Storage paketinde bir nesne oluşturmasına olanak tanır, ancak bu rol, uzantının nesneleri görüntülemesine, silmesine veya üzerine yazmasına izin vermez. Uzantının bu ek eylemleri gerçekleştirmesini sağlamak için bunun yerinestorage.objectAdmin
rolünü atamanız gerekir.
Uzantınızın hizmet hesabına atayabileceğiniz desteklenen tüm rolleri görüntülemek için bu sayfanın alt kısmındaki bölüme bakın. Her rolün açıklaması ve verilen izinler hakkında bilgi edinmek için Firebase belgelerini veya Google Cloud belgelerini ziyaret edin. Rolleri Google Cloud konsolunun IAM ve Yönetici panelinde de arayabilirsiniz.
Bir uzantıya roller nasıl atanır?
extension.yaml
dosyanızın roles
bölümünde, uzantınızın çalışması için gereken IAM rollerini listeleyin.
Burada, belirtilen bir Firebase Gerçek Zamanlı Veritabanı yolunu dinleyen bir uzantı örneği verilmiştir. Uzantı, tetiklendiğinde bir kullanıcı hesabı e-postasını günceller (Firebase Authentication ile etkileşim) ve bir bildirim gönderir (Firebase Cloud Messaging ile etkileşim). Aşağıdakilere dikkat edin:
- Uzantı bir Gerçek Zamanlı Veritabanı olayından tetiklense de
firebasedatabase.admin
rolü listelenmez (dinleme bir etkileşim olarak kabul edilmez). - Uzantı, Kimlik Doğrulama ve Bulut Mesajlaşma ile etkileşime girdiğinden, uzantı bu ürünlere erişim için roller gerektirir (sırasıyla
firebaseauth.admin
vefirebasenotifications.admin
).
# extension.yaml
...
# Roles assigned to the extension's service account by Firebase during installation
roles:
- role: firebaseauth.admin
reason: Required to update the email address of the user account
- role: firebasenotifications.admin
reason: Required to send a notification that the email address has been updated
...
extension.yaml
dosyanızda, bir uzantının hizmet hesabına rol atamak için aşağıdaki alanları kullanın:
Alan | Tip | Tanım |
---|---|---|
role (gerekli) | sicim | Uzantının çalışması için ihtiyaç duyduğu IAM rolünün adı |
reason (gerekli) | sicim | Uzantının rol tarafından verilen erişime neden ihtiyaç duyduğunun nedeninin kısa açıklaması Kullanıcının uzantının rolü nasıl kullandığını anlayabilmesi için yeterli ayrıntı sağladığınızdan emin olun. |
resource (isteğe bağlı) | sicim | Bu rolün hangi kaynağın IAM politikasına eklenmesi gerektiği. Atlanırsa, varsayılan olarak Desteklenen değerler |
Rollerin kapsamını azaltın
Uzantılar en az ayrıcalık ilkesine uymalı ve yalnızca ihtiyaç duydukları kaynaklara erişim talep etmelidir. role.resource
alanını kullanarak bir uzantının erişim kapsamını sınırlayabilirsiniz. Örneğin, uzantınızın bir Cloud Storage paketine nesne yazması gerekiyorsa aşağıdaki rolü kullanabilirsiniz:
roles:
- role: storage.objectCreator
reason: Needed in order to write
resource: projects/${PROJECT_ID}/buckets/${STORAGE_BUCKET}
Bu, uzantının aynı projedeki diğerlerine değil, yalnızca ihtiyaç duyduğu pakete erişmesini sağlar.
Bu alan, projeleri ( projects/{project_id}
) ve Depolama paketlerini ( projects/{project_id}/buckets/{bucket_id}
) destekler.
Uzantılar için desteklenen roller
Aşağıdaki tabloda Firebase ürünleriyle etkileşime geçmek için desteklenen IAM rolleri listelenmektedir. Bu tablodaki rollerin çoğu Firebase ürün düzeyindeki rollerdir ancak bazıları doğrudan Google Cloud tarafından yönetilir (özellikle Cloud Firestore ve Cloud Storage ).
Firebase ürünleri
Uzantınız şununla etkileşime giriyorsa... | Bu rollerden birini atayın... |
---|---|
Bulut Firestore | datastore.importExportAdmin datastore.indexYönetici veri deposu.sahip veri deposu. kullanıcı veri deposu.görüntüleyici |
Firebase için Bulut Depolama | depolama.admin depolama.objectYönetici depolama.objectCreator depolama.objectViewer |
Firebase Uygulama Dağıtımı | firebaseappdistro.admin firebaseappdistro.viewer |
Firebase Kimlik Doğrulaması | firebaseauth.admin firebaseauth.viewer |
Firebase A/B Testi | firebaseabt.admin firebaseabt.viewer |
Firebase Bulut Mesajlaşma | firebasenotifications.admin firebasenotifications.viewer |
Firebase Crashlytics | firebasecrashlytics.admin firebasecrashlytics.viewer |
Firebase Barındırma | firebasehosting.admin firebasehosting.viewer |
Firebase Uygulama İçi Mesajlaşma | firebaseinappmessaging.admin firebaseinappmessaging.viewer |
Firebase ML | firebaseml.admin firebaseml.viewer |
Firebase Performans İzleme | Firebase Performance.Viewer Firebase Performance.Reader Firebase Performance.writer |
Firebase Gerçek Zamanlı Veritabanı | firebaseatabase.admin firebaseatabase.viewer |
Güvenlik kuralları | firebaserules.viewer firebaserules.developer firebaserules.deployer |
Google Analytics | firebaseanalytics.admin firebaseanalytics.viewer |
Google Bulut ürünleri
Bu roller hakkında Google Cloud belgelerinde bilgi edinin.
Uzantınız şununla etkileşime giriyorsa... | Bu rollerden birini atayın... |
---|---|
Hareketler | eylemler.Yönetici eylemler.Görüntüleyici |
Apigee | apigee.analyticsAgent apigee.analyticsEditör apigee.analyticsViewer apigee.apiCreator apigee.deployer apigee.developerYönetici apigee.readOnlyAdmin apigee.synchronizerManager'ı |
Uygulama Motoru | appengine.appYönetici appengine.appViewer appengine.codeViewer appengine.deployer appengine.serviceYönetici |
Otomatik ML | automl.editor automl.predictor automl.viewer |
Büyük Sorgu | bigquery.connectionYönetici bigquery.connectionKullanıcı bigquery.dataEditör bigquery.dataOwner bigquery.dataViewer bigquery.jobKullanıcı bigquery.metadataViewer bigquery.readSessionUser bigquery.user |
Bulut Büyük Tablosu | büyüktablo.okuyucu bigtable.user büyük tablo görüntüleyici |
Faturalandırma | faturalandırma.görüntüleyici |
Hangout Sohbetleri | sohbet sahibi sohbet.okuyucu |
Bulut Varlığı | cloudasset.owner cloudasset.viewer |
Bulut Veri Füzyonu | datafusion.admin datafusion.viewer |
Bulut Hata Ayıklayıcı | clouddebugger.agent clouddebugger.user |
Bulut İşlevleri | cloudfunctions.invoker cloudfunctions.viewer |
Bulut IAP | iap.admin iap.httpsResourceAccessor iap.settingsYönetici iap.tunnelResourceAccessor |
Bulut IoT | cloudiot.deviceController cloudiot.editör cloudiot.provisioner cloudiot.viewer |
Stackdriver Profiler | cloudprofiler.agent cloudprofiler.user |
Bulut Zamanlayıcı | cloudscheduler.admin cloudscheduler.jobRunner cloudscheduler.viewer |
Bulut Güvenlik Tarayıcısı | cloudsecurityscanner.editor cloudsecurityscanner.runner cloudsecurityscanner.viewer |
Bulut SQL | cloudsql.client cloudsql.editor cloudsql.viewer |
Bulut İzleme | cloudtrace.admin cloudtrace.agent cloudtrace.user |
Veri akışı | veri akışı.geliştirici veri akışı.görüntüleyici veri akışı.işçi |
İletişim akışı | diyalog akışı.admin diyalog akışı.istemci diyalog akışı.okuyucu |
Bulut Veri Kaybını Önleme | dlp.okuyucu dlp.user |
Hata Raporlama | errorreporting.user errorreporting.viewer hata raporlama.yazar |
Eventarc | eventarc.publisher eventarc.eventReceiver |
Bulut Dosya Deposu | dosya.editörü dosya.görüntüleyici |
Kerestecilik | logging.configWriter logging.logWriter logging.privateLogViewer günlük.görüntüleyici |
Makine Öğrenimi Motoru | ml.geliştirici ml.jobSahibi ml.modelSahip ml.modelKullanıcı ml.operationOwner ml.görüntüleyici |
İzleme | izleme.editor izleme.metricWriter izleme.görüntüleyici |
Yapay Zeka Not Defterleri | dizüstü bilgisayarlar.admin dizüstü bilgisayarlar.görüntüleyici |
Pub/Sub | pubsub.editor pubsub.publisher pubsub.subscriber pubsub.viewer |
Memorystore Redis | redis.editör redis.viewer |
Bulut Koşusu | run.invoker |
Kaynak | kaynak.okuyucu kaynak.yazar |
Bulut Anahtarı | spanner.databaseYönetici spanner.databaseReader spanner.databaseKullanıcı anahtar.görüntüleyici |
Hizmet Kullanımı | serviceusage.apiKeysMetadataViewer |
Bulut Depolama Aktarım Hizmeti | depolamatransfer.kullanıcı depolamatransfer.görüntüleyici |
Bulut Kod Dönüştürücüsü | kod dönüştürücü.admin kod dönüştürücü.görüntüleyici |
Vertex AI | aiplatform.user |
Diğer | kimliktoolkit.admin kimlikaracı.görüntüleyici |