為了讓擴充功能執行指定動作,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 值區互動。
storage.objectCreator
角色可讓擴充功能在 Cloud Storage 值區中「建立」物件,但該角色不允許擴充功能查看、刪除或覆寫物件。如要讓擴充功能執行這些額外動作,您必須改為指派storage.objectAdmin
角色。
請參閱本頁底部的部分,查看可指派至擴充功能服務帳戶的所有支援角色。如要瞭解各個角色的說明和授予的權限,請參閱 Firebase 說明文件或 Google Cloud 說明文件。您也可以在 Google Cloud 控制台的「IAM & Admin」(身分與存取權管理) 面板中查詢角色。
如何為擴充功能指派角色
在 extension.yaml
檔案的 roles
區段中,列出擴充功能運作所需的 IAM 角色。
以下是監聽指定 Firebase Realtime Database 路徑的擴充功能範例。觸發時,擴充功能會更新使用者帳戶電子郵件 (與 Firebase Authentication 互動) 並傳送通知 (與 Firebase Cloud Messaging 互動)。請注意以下事項:
- 即使擴充功能是從 Realtime Database 事件觸發,系統也不會列出
firebasedatabase.admin
角色 (因為監聽不屬於互動)。 - 由於擴充功能會與 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.Admin actions.Viewer |
Apigee |
apigee.analyticsAgent apigee.analyticsEditor apigee.analyticsViewer apigee.apiCreator apigee.deployer apigee.developerAdmin apigee.readOnlyAdmin apigee.synchronizerManager |
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.readSessionUser bigquery.user |
Cloud Bigtable |
bigtable.reader bigtable.user bigtable.viewer |
計費功能 | billing.viewer |
Hangouts Chat |
chat.owner chat.reader |
雲端資產 |
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 |
notebooks.admin notebooks.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 |
transcoder.admin transcoder.viewer |
Vertex AI | aiplatform.user |
其他 |
identitytoolkit.admin identitytoolkit.viewer |