ตั้งค่าการเข้าถึงที่เหมาะสมสำหรับส่วนขยาย

เพื่อให้ส่วนขยายดำเนินการตามที่ระบุ Firebase จะอนุญาตให้แต่ละอินสแตนซ์ของส่วนขยายที่ติดตั้งเข้าถึงโครงการและข้อมูลผ่าน บัญชีบริการ ได้

บัญชีบริการคืออะไร

บัญชีบริการ เป็นบัญชีผู้ใช้ Google ประเภทพิเศษ ซึ่งเป็นตัวแทนของผู้ใช้ที่ไม่ใช่มนุษย์ซึ่งสามารถทำการเรียก API ที่ได้รับอนุญาตไปยังบริการของ Google ได้

ระหว่างการติดตั้งส่วนขยาย 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 บทบาท storage.objectCreator จะอนุญาตให้ส่วนขยาย สร้าง ออบเจ็กต์ในที่เก็บข้อมูล Cloud Storage แต่บทบาทนั้นจะไม่อนุญาตให้ส่วนขยายดู ลบ หรือเขียนทับออบเจ็กต์ หากต้องการเปิดใช้งานส่วนขยายเพื่อดำเนินการเพิ่มเติมเหล่านั้น คุณจะต้องกำหนดบทบาท storage.objectAdmin แทน

โปรดดูส่วนที่ด้านล่างของหน้านี้เพื่อดู บทบาทที่รองรับ ทั้งหมดที่คุณอาจมอบหมายให้กับบัญชีบริการของส่วนขยายได้ หากต้องการเรียนรู้เกี่ยวกับคำอธิบายและสิทธิ์ที่ได้รับของแต่ละบทบาท โปรดไปที่ เอกสาร Firebase หรือ เอกสารประกอบของ Google Cloud คุณยังค้นหาบทบาทใน แผง IAM และผู้ดูแล ระบบของคอนโซล Google Cloud ได้ด้วย

วิธีกำหนดบทบาทให้กับส่วนขยาย

ระบุบทบาท IAM ที่จำเป็นสำหรับส่วนขยายของคุณเพื่อดำเนินการในส่วน roles ของไฟล์ extension.yaml

ต่อไปนี้คือตัวอย่างสำหรับส่วนขยายที่ฟังเส้นทางฐานข้อมูลเรียลไทม์ Firebase ที่ระบุ เมื่อทริกเกอร์ ส่วนขยายจะอัปเดตอีเมลบัญชีผู้ใช้ (การโต้ตอบกับ 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 ของทรัพยากรใด หากละเว้น จะใช้ค่าเริ่มต้นเป็น 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} )

บทบาทที่ได้รับการสนับสนุนสำหรับส่วนขยาย

ตารางต่อไปนี้แสดงรายการบทบาท IAM ที่รองรับสำหรับการโต้ตอบกับผลิตภัณฑ์ Firebase บทบาทส่วนใหญ่ในตารางนี้คือ บทบาทระดับผลิตภัณฑ์ของ Firebase แต่บางส่วนได้รับการจัดการโดยตรงโดย Google Cloud (โดยเฉพาะ Cloud Firestore และ Cloud Storage )

ผลิตภัณฑ์ Firebase

หากส่วนขยายของคุณโต้ตอบกับ... มอบหมายหนึ่งในบทบาทเหล่านี้...
คลาวด์ไฟร์สโตร์ datastore.importExportAdmin
datastore.indexAdmin
datastore.owner
datastore.user
datastore.viewer
ที่เก็บข้อมูลบนคลาวด์สำหรับ Firebase ที่เก็บข้อมูลผู้ดูแลระบบ
storage.objectAdmin
storage.objectCreator
ที่เก็บข้อมูล objectViewer
การเผยแพร่แอป Firebase firebaseappdistro.admin
firebaseappdistro.viewer
การรับรองความถูกต้องของ Firebase firebaseauth.admin
firebaseauth.viewer
การทดสอบ A/B ของ Firebase firebaseabt.admin
firebaseabt.viewer
การส่งข้อความบนคลาวด์ของ Firebase firebasenotifications.admin
firebasenotifications.viewer
Firebase Crashlytics firebasecrashlytics.admin
firebasecrashlytics.viewer
โฮสติ้งไฟร์เบส firebasehosting.admin
firebasehosting.viewer
การส่งข้อความในแอป Firebase firebaseinappmessaging.admin
firebaseinappmessaging.viewer
Firebase ML firebaseml.admin
firebaseml.viewer
การตรวจสอบประสิทธิภาพ Firebase firebasePerformance.ผู้ดู
firebasePerformance.reader
firebasePerformance.writer
ฐานข้อมูลเรียลไทม์ Firebase firebasedatabase.admin
firebasedatabase.viewer
กฎความปลอดภัย firebaserules.viewer
firebaserules.ผู้พัฒนา
firebaserules.deployer
Google Analytics firebaseanalytics.admin
firebaseanalytics.viewer

ผลิตภัณฑ์กูเกิลคลาวด์

เรียนรู้เกี่ยวกับบทบาทเหล่านี้ใน เอกสารประกอบของ Google Cloud

หากส่วนขยายของคุณโต้ตอบกับ... มอบหมายหนึ่งในบทบาทเหล่านี้...
การดำเนินการ การดำเนินการผู้ดูแลระบบ
การกระทำ Viewer
อาปีจี apigee.analyticsAgent
apigee.analyticsบรรณาธิการ
apigee.analyticsViewer
apigee.apiCreator
apigee.deployer
apigee.developerAdmin
apigee.readOnlyAdmin
apigee.synchronizerManager
แอพเอ็นจิ้น appengine.appAdmin
appengine.appViewer
appengine.codeViewer
appengine.deployer
appengine.serviceAdmin
ออโต้เอ็มแอล automl.บรรณาธิการ
automl.ทำนาย
automl.viewer
BigQuery bigquery.connectionผู้ดูแลระบบ
bigquery.connectionUser
bigquery.dataEditor
bigquery.dataOwner
bigquery.dataViewer
bigquery.jobUser
bigquery.metadataViewer
bigquery.readSessionUser
bigquery.user
คลาวด์บิ๊กเทเบิล bigtable.reader
bigtable.user
bigtable.viewer
การเรียกเก็บเงิน การเรียกเก็บเงินผู้ดู
แชทแฮงเอาท์ แชท.เจ้าของ
แชท.รีดเดอร์
สินทรัพย์คลาวด์ cloudasset.owner
cloudasset.viewer
ฟิวชั่นข้อมูลบนคลาวด์ datafusion.admin
datafusion.viewer
ดีบักเกอร์บนคลาวด์ clouddebugger.ตัวแทน
clouddebugger.user
ฟังก์ชั่นคลาวด์ cloudfunctions.inviver
cloudfunctions.viewer
คลาวด์ไอเอพี iap.admin
iap.httpsResourceAccessor
iap.settingsAdmin
iap.tunnelResourceAccessor
ไอโอทีบนคลาวด์ cloudiot.deviceController
cloudiot.editor
cloudiot.provisioner
cloudiot.viewer
ตัวสร้างโปรไฟล์ Stackdriver cloudprofiler.ตัวแทน
cloudprofiler.user
ตัวกำหนดเวลาคลาวด์ cloudcheduler.admin
cloudcheduler.jobRunner
cloudcheduler.viewer
เครื่องสแกนความปลอดภัยบนคลาวด์ cloudsecurityscanner.editor
cloudsecurityscanner.runner
cloudsecurityscanner.viewer
คลาวด์ SQL cloudsql.client
cloudsql.editor
cloudsql.viewer
คลาวด์เทรซ cloudtrace.admin
cloudtrace.ตัวแทน
cloudtrace.user
กระแสข้อมูล dataflow.ผู้พัฒนา
dataflow.viewer
dataflow.ผู้ปฏิบัติงาน
ไดอะล็อกโฟลว์ ไดอะล็อกโฟลว์.ผู้ดูแลระบบ
ไดอะล็อกโฟลว์.ไคลเอนต์
ไดอะล็อกโฟลว์.reader
การป้องกันข้อมูลสูญหายบนคลาวด์ dlp.reader
dlp.ผู้ใช้
การรายงานข้อผิดพลาด errorreporting.user
errorreporting.viewer
errorreporting.writer
อีเวนทาร์ค eventarc.ผู้เผยแพร่
eventarc.eventReceiver
คลาวด์ไฟล์สโตร์ ไฟล์.บรรณาธิการ
ไฟล์.viewer
การบันทึก logging.configWriter
logging.logWriter
logging.privateLogViewer
logging.ผู้ดู
เอ็นจิ้นการเรียนรู้ของเครื่อง ml.ผู้พัฒนา
ml.jobOwner
ml.modelOwner
ml.modelUser
ml.การดำเนินงานเจ้าของ
ml.ผู้ดู
การตรวจสอบ การตรวจสอบ.บรรณาธิการ
การตรวจสอบ metricWriter
การตรวจสอบผู้ชม
โน้ตบุ๊ค AI โน๊ตบุ๊ค.ผู้ดูแลระบบ
โน๊ตบุ๊ค โปรแกรมดู
ผับ/ซับ pubsub.editor
pubsub.ผู้เผยแพร่
pubsub.subscriber
pubsub.viewer
หน่วยความจำ Redis redis.editor
redis.viewer
คลาวด์รัน run.inviver
แหล่งที่มา ที่มา.reader
ที่มา.writer
คลาวด์สแปนเนอร์ spanner.databaseAdmin
spanner.databaseReader
spanner.databaseUser
ประแจ.viewer
การใช้บริการ serviceusage.apiKeysMetadataViewer
บริการถ่ายโอนที่เก็บข้อมูลบนคลาวด์ storagetransfer.user
storagetransfer.viewer
ตัวแปลงสัญญาณบนคลาวด์ transcoder.admin
ทรานส์โคเดอร์.วิวเวอร์
เวอร์เท็กซ์ เอไอ aiplatform.user
อื่น Identitytoolkit.admin
Identitytoolkit.viewer