為了讓擴充功能執行其指定的操作,Firebase 透過服務帳戶授予已安裝擴充功能的每個實例對專案及其資料的有限存取權限。
什麼是服務帳戶?
服務帳戶是一種特殊類型的 Google 使用者帳戶。它代表可以對 Google 服務進行授權 API 呼叫的非人類使用者。
在安裝擴充功能期間,Firebase 會在專案中為擴充功能建立一個服務帳戶。每個已安裝的擴充實例都有自己的服務帳戶。如果卸載擴充功能實例,Firebase 會刪除該擴充功能的服務帳號。
為擴充功能所建立的服務帳戶的格式如下:
ext- extension-instance-id @ project-id .iam.gserviceaccount.com
Firebase 透過向擴充功能的服務帳號指派特定角色(權限集)來限制擴充功能對專案及其資料的存取。當您建立擴充功能時,您需要確定您的擴充功能需要執行哪些角色,然後在您的extension.yaml
檔案中列出這些角色以及您的擴充功能需要這些角色的原因(請參閱本頁底部的範例)。
確定您的擴充功能需要哪些角色
當您建立擴充功能時,您可以確定擴充功能運行所需的存取等級。
在安裝過程中,Firebase CLI 會提示使用者接受每個角色所授予的存取等級。如果您的擴充功能請求的角色多於實際需要的角色,則使用者可能不太可能安裝它。
確定您的擴充功能是否與產品互動:
如果您的擴充功能與某個產品交互,那麼您需要授予您的擴充功能對該產品的存取權限。
例如,如果您的擴充功能將資料寫入即時資料庫實例,則您的擴充功能需要即時資料庫角色(具體來說,
firebasedatabase.admin
)。如果您的擴充功能僅偵聽來自產品的觸發事件,則您的擴充功能不需要與該產品關聯的角色。
例如,如果您的擴充功能在寫入即時資料庫執行個體時觸發(但不向資料庫寫入任何內容),則您的擴充不需要即時資料庫角色。
確定您的擴充功能與哪些產品互動後,您需要確定該特定互動需要哪個角色。某些產品根據執行的操作或一組操作提供不同的角色。
例如,假設您的擴充功能與 Cloud Storage 儲存桶互動。
storage.objectCreator
角色將允許擴充功能在 Cloud Storage 儲存桶中建立對象,但該角色不允許擴充功能檢視、刪除或覆寫對象。要讓擴充功能能夠執行這些附加操作,您需要指派storage.objectAdmin
角色。
請參閱本頁底部的部分,查看您可以為擴充功能的服務帳戶指派的所有支援的角色。若要了解每個角色的描述和授予的權限,請造訪Firebase 文件或Google Cloud 文件。您也可以在 Google Cloud 控制台的IAM 和管理面板中找到角色。
如何為分機分配角色
在extension.yaml
檔案的roles
部分中列出您的擴充功能運行所需的 IAM 角色。
以下是偵聽指定 Firebase 即時資料庫路徑的擴充功能的範例。觸發後,擴充功能會更新使用者帳戶電子郵件(與 Firebase 驗證互動)並發送通知(與 Firebase Cloud Messaging 互動)。請注意以下事項:
- 即使擴充功能從即時資料庫事件觸發,也不會列出
firebasedatabase.admin
角色(偵聽不被視為互動)。 - 由於擴充功能與身份驗證和雲端訊息傳遞交互,因此擴充功能需要角色來存取這些產品(分別為
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}
) 和儲存桶 ( projects/{project_id}/buckets/{bucket_id}
)。
擴展支援的角色
下表列出了支援與 Firebase 產品互動的 IAM 角色。此表中的大多數角色都是Firebase 產品級角色,但有些角色直接由 Google Cloud 管理(具體來說, Cloud Firestore和Cloud Storage )。
Firebase 產品
如果您的擴充功能與...交互 | 分配這些角色之一... |
---|---|
雲端Firestore | 資料儲存.importExportAdmin 資料儲存.indexAdmin 資料儲存.擁有者 資料儲存.用戶 資料儲存檢視器 |
Firebase 雲端儲存 | 儲存管理 儲存.objectAdmin 儲存.objectCreator 儲存.objectViewer |
Firebase 應用程式分發 | firebaseappdistro.admin firebaseappdistro.viewer |
Firebase 身份驗證 | firebaseauth.admin firebaseauth.viewer |
Firebase A/B 測試 | firebaseabt.admin firebaseabt.viewer |
Firebase 雲端訊息傳遞 | firebasenotifications.admin firebasenotifications.viewer |
Firebase Crashlytics | firebasecrashlytics.admin firebasecrashlytics.viewer |
Firebase 託管 | firebasehosting.admin firebasehosting.viewer |
Firebase 應用程式內訊息傳遞 | firebaseinappmessaging.admin firebaseinappmessaging.viewer |
Firebase 機器學習 | firebaseml.admin firebaseml.viewer |
Firebase 效能監控 | firebaseperformance.viewer firebaseperformance.reader firebaseperformance.writer |
Firebase 即時資料庫 | firebaseddatabase.admin firebaseddatabase.viewer |
安全規則 | firebaserules.viewer firebaserules.developer firebaserules.deployer |
Google分析 | firebaseanalytics.admin firebaseanalytics.viewer |
谷歌雲端產品
在Google Cloud 文件中了解這些角色。
如果您的擴充功能與...交互 | 分配這些角色之一... |
---|---|
行動 | 操作.管理員 動作.檢視器 |
阿皮吉 | apigee.analyticsAgent apigee.analyticsEditor apigee.analyticsViewer apigee.apiCreator apigee.deployer apigee.developerAdmin apigee.readOnlyAdmin apigee.synchronizerManager |
應用引擎 | appengine.appAdmin appengine.appViewer appengine.codeViewer appengine.deployer appengine.serviceAdmin |
自動機器學習 | 自動編輯器 自動預測器 自動檢視器 |
大查詢 | bigquery.connectionAdmin bigquery.connectionUser bigquery.dataEditor bigquery.dataOwner bigquery.dataViewer bigquery.jobUser bigquery.metadataViewer bigquery.readSessionUser bigquery.user |
雲大表 | 大表閱讀器 大表用戶 大表檢視器 |
計費 | 計費檢視器 |
圓環聊 | 聊天所有者 聊天閱讀器 |
雲端資產 | 雲端資產所有者 雲端資產檢視器 |
雲端資料融合 | 資料融合管理 數據融合檢視器 |
雲端偵錯工具 | 雲端調試器代理 雲端調試器.user |
雲端功能 | cloudfunctions.invoker 雲函數.viewer |
雲端應用程式內購買 | iap.admin iap.httpsResourceAccessor iap.settingsAdmin iap.tunnelResourceAccessor |
雲端物聯網 | cloudiot.deviceController 雲端編輯器 cloudiot.provisioner 雲端檢視器 |
Stackdriver 分析器 | 雲端分析器代理 雲端分析器.用戶 |
雲端調度器 | 雲端調度程式.admin 雲端調度器.jobRunner 雲端調度檢視器 |
雲端安全掃描器 | 雲端安全掃描器.editor 雲端安全掃描器.runner 雲端安全掃描器.viewer |
雲端SQL | 雲端SQL客戶端 cloudsql.editor 雲端SQL檢視器 |
雲蹤跡 | 雲端追蹤.admin 雲端追蹤代理 雲端追蹤.用戶 |
資料流 | 資料流開發者 資料流檢視器 資料流工作者 |
對話流 | 對話方塊串流管理 對話流客戶端 對話流閱讀器 |
雲端資料遺失防護 | dlp閱讀器 dlp用戶 |
錯誤報告 | 錯誤報告.用戶 錯誤報告檢視器 錯誤回報.writer |
事件弧 | eventarc.publisher eventarc.eventReceiver |
雲端檔案儲存 | 文件編輯器 文件檢視器 |
記錄 | 日誌記錄.configWriter 日誌記錄.logWriter 日誌記錄.privateLogViewer 日誌檢視器 |
機器學習引擎 | ml.developer ml.jobOwner ml.modelOwner ml.modelUser ml.操作所有者 毫升檢視器 |
監控 | 監控.編輯器 監控.metricWriter 監控檢視器 |
人工智慧筆記本 | 筆記本管理 筆記本檢視器 |
發布/訂閱 | pubsub.編輯器 pubsub.publisher pubsub.訂閱者 pubsub.viewer |
記憶體存儲Redis | Redis編輯器 redis檢視器 |
雲跑 | 運行呼叫者 |
來源 | 原始碼閱讀器 源作者 |
雲端扳手 | spanner.databaseAdmin spanner.databaseReader 資料庫用戶 扳手查看器 |
服務使用情況 | serviceusage.apiKeysMetadataViewer |
雲端儲存傳輸服務 | 儲存傳輸.用戶 儲存傳輸檢視器 |
雲端轉碼器 | 轉碼器管理 轉碼器檢視器 |
頂點人工智慧 | aiplatform.user |
其他 | 身份工具包.admin 身份工具包檢視器 |