為擴充功能設定適當存取權

為了讓擴充功能執行指定動作,Firebase 會透過服務帳戶,授予已安裝擴充功能的每個執行個體有限的專案存取權和資料存取權。

什麼是服務帳戶?

服務帳戶是一種特殊的 Google 使用者帳戶,代表非真人使用者 可以對 Google 服務進行授權的 API 呼叫

安裝擴充功能時,Firebase 會建立一個服務帳戶, 設定憑證每個安裝的擴充功能執行個體都有專屬的執行個體 新建立的服務帳戶如果解除安裝擴充功能執行個體,Firebase 會刪除 服務的服務帳戶

為擴充功能建立的服務帳戶格式如下:

ext-extension-instance-id@project-id.iam.gserviceaccount.com

Firebase 會藉由指派角色,限制擴充功能存取專案及其資料 特定角色 (權限組合) 新增至擴充功能的服務帳戶建立擴充功能時 決定擴充功能需要哪些角色才能執行 角色,以及擴充功能在extension.yaml中需要這些角色的原因 檔案 (請參閱本頁底部的範例)。

決定擴充功能需要哪些角色

建立擴充功能時,您可以決定擴充功能 則必須正常運作。

安裝期間,Firebase CLI 會提示使用者接受各角色授予的存取層級。如果擴充功能要求的角色多於實際需要的角色,使用者可能不太可能安裝。

  1. 判斷擴充功能是否與產品互動:

    • 如果你的擴充功能與產品互動,你必須 就能存取擴充功能

      舉例來說,如果擴充功能會將資料寫入 Realtime Database 例項, 你的擴充功能需要 Realtime Database 角色 (具體來說 firebasedatabase.admin)。

    • 如果您的擴充功能只是監聽觸發事件, 產品,則不需要擴充功能相關聯的角色 或利用該產品進行交流

      舉例來說,假設您的擴充功能在寫入 Realtime Database 時「觸發」 執行個體 (但不會將任何內容寫入資料庫),然後 擴充功能需要 Realtime Database 角色。

  2. 確定擴充功能與哪些產品互動後,您需要決定該互動需要哪些角色。只有部分通知 視行動或動作組合而定 執行任務

    舉例來說,假設擴充功能與 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)。
  • 由於擴充功能會AuthenticationCloud Messaging 互動,因此需要角色才能存取這些產品 (分別為 firebaseauth.adminfirebasenotifications.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 政策。如果省略,則預設為 projects/${project_id}

支援的值為 projects/*projects/*/buckets/*

縮小角色範圍

擴充功能應遵循最小權限原則,只要求存取所需資源的權限。您可以使用 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 FirestoreCloud 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