為了讓擴充功能執行指定動作,Firebase 會透過服務帳戶,授予已安裝擴充功能的每個執行個體有限的專案存取權和資料存取權。
什麼是服務帳戶?
服務帳戶是一種特殊的 Google 使用者帳戶,代表非真人使用者 可以對 Google 服務進行授權的 API 呼叫
安裝擴充功能時,Firebase 會建立一個服務帳戶, 設定憑證每個安裝的擴充功能執行個體都有專屬的執行個體 新建立的服務帳戶如果解除安裝擴充功能執行個體,Firebase 會刪除 服務的服務帳戶
為擴充功能建立的服務帳戶格式如下:
ext-extension-instance-id@project-id.iam.gserviceaccount.com
Firebase 會藉由指派角色,限制擴充功能存取專案及其資料
特定角色 (權限組合)
新增至擴充功能的服務帳戶建立擴充功能時
決定擴充功能需要哪些角色才能執行
角色,以及擴充功能在extension.yaml
中需要這些角色的原因
檔案 (請參閱本頁底部的範例)。
決定擴充功能需要哪些角色
建立擴充功能時,您可以決定擴充功能 則必須正常運作。
安裝期間,Firebase CLI 會提示使用者接受各角色授予的存取層級。如果擴充功能要求的角色多於實際需要的角色,使用者可能不太可能安裝。
判斷擴充功能是否與產品互動:
如果你的擴充功能與產品互動,你必須 就能存取擴充功能
舉例來說,如果擴充功能會將資料寫入 Realtime Database 例項, 你的擴充功能需要 Realtime Database 角色 (具體來說
firebasedatabase.admin
)。如果您的擴充功能只是監聽觸發事件, 產品,則不需要擴充功能相關聯的角色 或利用該產品進行交流
舉例來說,假設您的擴充功能在寫入 Realtime Database 時「觸發」 執行個體 (但不會將任何內容寫入資料庫),然後 擴充功能不需要 Realtime Database 角色。
確定擴充功能與哪些產品互動後,您需要決定該互動需要哪些角色。只有部分通知 視行動或動作組合而定 執行任務
舉例來說,假設擴充功能與 Cloud Storage 互動 Cloud Storage 也提供目錄同步處理功能 方便您同步處理 VM 目錄與值區
storage.objectCreator
角色可讓擴充功能 在 Cloud Storage 值區中「建立」物件,但該角色不允許 檢視、刪除或覆寫物件。如何啟用擴充功能 就必須指派 請改為使用「storage.objectAdmin
」角色。
請參閱本頁底部的章節 支援的角色:您可以指派擴充功能服務 讓他們使用服務帳戶如要瞭解每個角色的說明和授予的權限,請造訪 Firebase 說明文件或 Google Cloud 說明文件。 您也可以在 Google Cloud 控制台的 身分與存取權管理與管理控制台。
如何為擴充功能指派角色
在「roles
」區段中列出擴充功能所需的 IAM 角色
的extension.yaml
檔案。
下方的例子是監聽指定 Firebase Realtime Database 路徑。觸發時,擴充功能會更新使用者帳戶 電子郵件 (與 Firebase Authentication 互動),並傳送通知 (互動) 搭配 Firebase Cloud Messaging)。請留意以下事項:
- 即使擴充功能會從 Realtime Database 事件「觸發」,
未列出「
firebasedatabase.admin
」角色 (聆聽不會視為 interaction)。 - 由於擴充功能會與 Authentication 和 Cloud Messaging 互動,因此需要角色才能存取這些產品 (分別為
firebaseauth.admin
和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
檔案中,使用下列欄位將角色指派給
的服務帳戶:
欄位 | 類型 | 說明 |
---|---|---|
role (必填) |
字串 | 所需 IAM 角色的名稱 可以使用 |
reason (必填) |
字串 |
簡要說明擴充功能需要角色授予的存取權的原因 請務必提供足夠詳細資訊,方便使用者瞭解 擴充功能會使用這個角色 |
resource (選答) |
字串 |
應將這個角色新增至哪項資源的 IAM 政策。如果省略,則預設為
支援的值為 |
縮小角色範圍
擴充功能應遵循最小權限原則,只要求存取所需資源的權限。您可以使用 role.resource
欄位限制擴充功能的存取權範圍。
舉例來說,如果擴充功能需要將物件寫入 Cloud Storage 值區,
您可以使用下列角色:
roles:
- role: storage.objectCreator
reason: Needed in order to write
resource: projects/${PROJECT_ID}/buckets/${STORAGE_BUCKET}
這樣一來,擴充功能就只會存取所需的值區。 而非同一項專案中的其他使用者
這個欄位支援專案 (projects/{project_id}
),以及
Storage 值區 (projects/{project_id}/buckets/{bucket_id}
)。
擴充功能支援的角色
下表列出與 Firebase 互動時支援的 IAM 角色 很少直接解答該如何打造產品這個資料表中列出的多數角色都屬於 Firebase 產品層級角色 但有些是由 Google Cloud 直接代管 Cloud Firestore和 Cloud Storage)。
Firebase 產品
如果你的擴充功能與... | 指派下列其中一個角色... |
---|---|
Cloud Firestore |
datastore.importExportAdmin datastore.indexAdmin datastore.owner datastore.user datastore.viewer |
Cloud Storage for Firebase |
storage.admin storage.objectAdmin storage.objectCreator storage.objectViewer |
Firebase App Distribution |
firebaseappdistro.admin firebaseappdistro.viewer |
Firebase Authentication |
firebaseauth.admin firebaseauth.viewer |
Firebase A/B Testing |
firebaseabt.admin firebaseabt.viewer |
Firebase Cloud Messaging |
firebasenotifications.admin firebasenotifications.viewer |
Firebase Crashlytics |
firebasecrashlytics.admin firebasecrashlytics.viewer |
Firebase Hosting |
firebasehosting.admin firebasehosting.viewer |
Firebase In-App Messaging |
firebaseinappmessaging.admin firebaseinappmessaging.viewer |
Firebase ML |
firebaseml.admin firebaseml.viewer |
Firebase Performance Monitoring |
firebaseperformance.viewer firebaseperformance.Reader firebaseperformance.writer |
Firebase Realtime Database |
firebasedatabase.admin firebasedatabase.viewer |
安全性規則 |
firebaserules.viewer firebaserules.developer firebaserules.deployer |
Google Analytics |
firebaseanalytics.admin firebaseanalytics.viewer |
Google Cloud 產品
如要瞭解這些角色,請參閱 Google Cloud 說明文件。
如果你的擴充功能與... | 指派下列其中一個角色... |
---|---|
動作 |
actions.管理 actions.Viewer |
Apigee |
apigee.analyticsAgent apigee.analyticsEditor apigee.analyticsViewer apigee.apiCreator apigee.deployer apigee.developerAdmin apigee.readOnlyAdmin apigee.syncrManager |
App Engine |
appengine.appAdmin appengine.appViewer appengine.codeViewer appengine.deployer appengine.serviceAdmin |
AutoML |
automl.editor automl.predictor automl.viewer |
BigQuery |
bigquery.connectionAdmin bigquery.connectionUser bigquery.dataEditor bigquery.dataOwner bigquery.dataViewer bigquery.jobUser bigquery.metadataViewer bigquery.readSession 使用者 bigquery.user |
Cloud Bigtable |
bigtable.Reader bigtable.user bigtable.viewer |
計費功能 | billing.viewer |
Hangouts 即時通訊 |
Chat.owner Chat.讀取工具 |
雲端資產 |
cloudasset.owner cloudasset.viewer |
Cloud Data Fusion |
datafusion.admin datafusion.viewer |
Cloud Debugger |
clouddebugger.agent clouddebugger.user |
Cloud Functions |
cloudfunctions.invoker cloudfunctions.viewer |
Cloud IAP |
iap.admin iap.httpsResourceAccessor iap.settingsAdmin iap.tunnelResourceAccessor |
Cloud IoT |
cloudiot.deviceController cloudiot.editor cloudiot.provisioner cloudiot.viewer |
Stackdriver Profiler |
cloudprofiler.agent cloudprofiler.user |
Cloud Scheduler |
cloudscheduler.admin cloudscheduler.jobRunner cloudscheduler.viewer |
Cloud Security Scanner |
cloudsecurityscanner.editor cloudsecurityscanner.runner cloudsecurityscanner.viewer |
Cloud SQL |
cloudsql.client cloudsql.editor cloudsql.viewer |
Cloud Trace |
cloudtrace.admin cloudtrace.agent cloudtrace.user |
Dataflow |
Dataflow.developer Dataflow.viewer Dataflow.worker |
Dialogflow |
Dialogflow.admin Dialogflow.client Dialogflow.Reader |
Cloud Data Loss Prevention |
dlp.Reader dlp.user |
Error Reporting |
errorreporting.user errorreporting.viewer errorreporting.writer |
Eventarc |
eventarc.publisher eventarc.eventReceiver |
Cloud Filestore |
file.editor file.viewer |
記錄 |
Logging.configWriter Logging.logWriter Logging.privateLogViewer Logging.viewer |
Machine Learning Engine |
ml.developer ml.jobOwner ml.modelOwner ml.modelUser ml.operationOwner ml.viewer |
監控 |
monitoring.editor monitoring.metricWriter monitoring.viewer |
AI Notebooks |
Notebook.admin Notebook.viewer |
Pub/Sub |
pubsub.editor pubsub.publisher pubsub.subscriber pubsub.viewer |
Memorystore Redis |
redis.editor redis.viewer |
Cloud Run | run.invoker |
來源 |
source.Reader source.writer |
Cloud Spanner |
spanner.databaseAdmin spanner.databaseReader spanner.databaseUser spanner.viewer |
服務使用情形 | serviceusage.apiKeysMetadataViewer |
Cloud Storage 移轉服務 |
storagetransfer.user storagetransfer.viewer |
Cloud 轉碼器 |
Transcoder.admin Transr.viewer |
Vertex AI | aiplatform.user |
其他 |
identitytoolkit.admin identitytoolkit.viewer |