เพื่อให้ส่วนขยายดำเนินการตามที่ระบุไว้ Firebase จะให้สิทธิ์เข้าถึงแบบจำกัดแก่แต่ละอินสแตนซ์ของส่วนขยายที่ติดตั้งไว้ในโปรเจ็กต์และข้อมูลของโปรเจ็กต์ผ่านบัญชีบริการ
บัญชีบริการคืออะไร
บัญชีบริการเป็นบัญชีผู้ใช้ Google ประเภทพิเศษ ซึ่งแสดงถึงผู้ใช้ที่ไม่ใช่มนุษย์ที่สามารถเรียก API ที่ได้รับอนุญาตไปยังบริการของ Google ได้
ในระหว่างการติดตั้งส่วนขยาย 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 นอกจากนี้ คุณยังค้นหาบทบาทได้ในแผง IAM และผู้ดูแลระบบของคอนโซล Google Cloud
วิธีมอบหมายบทบาทให้กับส่วนขยาย
ระบุบทบาท IAM ที่จำเป็นสำหรับส่วนขยายของคุณเพื่อดำเนินการในส่วน roles ของไฟล์ extension.yaml
ต่อไปนี้เป็นตัวอย่างส่วนขยายที่คอยฟังเส้นทาง 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}) และที่เก็บข้อมูล (projects/{project_id}/buckets/{bucket_id})
บทบาทที่รองรับสำหรับส่วนขยาย
ตารางต่อไปนี้แสดงบทบาท IAM ที่รองรับสำหรับการโต้ตอบกับผลิตภัณฑ์ Firebase บทบาทส่วนใหญ่ในตารางนี้เป็นบทบาทระดับผลิตภัณฑ์ 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.owner chat.reader |
| Cloud Asset |
cloudasset.owner cloudasset.viewer |
| Cloud Data Fusion |
datafusion.admin datafusion.viewer |
| โปรแกรมแก้ไขข้อบกพร่องบนคลาวด์ |
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 |
| เครื่องมือแมชชีนเลิร์นนิง |
ml.developer ml.jobOwner ml.modelOwner ml.modelUser ml.operationOwner ml.viewer |
| การตรวจสอบ |
monitoring.editor monitoring.metricWriter monitoring.viewer |
| สมุดบันทึก AI |
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 |