Bir uzantı için uygun erişimi ayarlayın

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.

  1. 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 .

  2. 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 yerine storage.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 ve firebasenotifications.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 projects/${project_id} olur.

Desteklenen değerler projects/* ve projects/*/buckets/* dır.

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