เมื่อใช้ไลบรารีของไคลเอ็นต์ฝั่งเซิร์ฟเวอร์สำหรับ Cloud Firestore คุณจะจัดการ สิทธิ์เข้าถึงทรัพยากรได้ด้วย Identity and Access Management (IAM) IAM ช่วยให้คุณให้สิทธิ์เข้าถึงGoogle Cloudทรัพยากรที่เฉพาะเจาะจงได้ละเอียดยิ่งขึ้นและป้องกันการเข้าถึงทรัพยากรอื่นๆ ที่ไม่ต้องการ หน้านี้จะอธิบายสิทธิ์และบทบาท IAM สำหรับ Cloud Firestore อ่านคำอธิบายโดยละเอียดของ IAM ได้ในเอกสารประกอบของ IAM
IAM ช่วยให้คุณนำหลักการให้สิทธิ์ขั้นต่ำที่สุดมาใช้ได้ จึงให้เฉพาะสิทธิ์เข้าถึงทรัพยากรที่จำเป็น
IAM ช่วยให้คุณควบคุมได้ว่าใคร (ผู้ใช้) มีสิทธิ์อะไร (บทบาท)
สำหรับทรัพยากรใด โดยการตั้งค่านโยบาย IAM
นโยบาย IAM จะให้บทบาทอย่างน้อย 1 บทบาทแก่ผู้ใช้ ซึ่งจะให้สิทธิ์บางอย่างแก่ผู้ใช้
เช่น คุณสามารถให้datastore.indexAdmin
บทบาทแก่ผู้ใช้ ซึ่งจะอนุญาตให้ผู้ใช้สร้าง แก้ไข ลบ แสดง หรือดู
ดัชนีได้
สิทธิ์และบทบาท
ส่วนนี้สรุปสิทธิ์และบทบาทที่ Cloud Firestore รองรับ
สิทธิ์ที่จำเป็นสำหรับเมธอด API
ตารางต่อไปนี้แสดงสิทธิ์ที่ผู้โทรต้องมีเพื่อดำเนินการ แต่ละอย่าง
| วิธีการ | สิทธิ์ที่จำเป็น |
|---|---|
projects.databases.documents |
|
batchGet |
datastore.entities.get |
batchWrite อัปเดตหรือเปลี่ยนรูปแบบโดยตั้งค่าเงื่อนไขเบื้องต้น exists เป็น false |
datastore.entities.create |
batchWrite อัปเดตหรือเปลี่ยนรูปแบบโดยตั้งค่าเงื่อนไขเบื้องต้น exists เป็น true |
datastore.entities.create |
batchWrite อัปเดตหรือเปลี่ยนรูปแบบโดยไม่มีเงื่อนไขเบื้องต้น |
datastore.entities.create |
beginTransaction |
datastore.databases.get |
commit อัปเดตหรือเปลี่ยนรูปแบบโดยตั้งค่าเงื่อนไขเบื้องต้น exists เป็น false |
datastore.entities.create |
commit อัปเดตหรือเปลี่ยนรูปแบบโดยตั้งค่าเงื่อนไขเบื้องต้น exists เป็น true |
datastore.entities.update |
commit อัปเดตหรือเปลี่ยนรูปแบบโดยไม่มีเงื่อนไขเบื้องต้น |
datastore.entities.create |
commit ลบ |
datastore.entities.delete |
createDocument |
datastore.entities.create |
delete |
datastore.entities.delete |
get |
datastore.entities.get |
list |
datastore.entities.getdatastore.entities.list |
listCollectionIds |
datastore.entities.list |
partitionQuery |
datastore.entities.get |
patch |
datastore.entities.update |
rollback |
datastore.databases.get |
runAggregationQuery |
datastore.entities.get |
runQuery |
datastore.entities.get |
executePipeline (RPC)โดยมีขั้นตอนใดขั้นตอนหนึ่งต่อไปนี้ - collection(...)- collection_group(...)- database()
|
datastore.entities.get
|
executePipeline (RPC)ด้วยขั้นตอนใดขั้นตอนหนึ่งต่อไปนี้ - documents(...) |
datastore.entities.get
|
write (RPC) อัปเดตหรือเปลี่ยนรูปแบบโดยตั้งค่าเงื่อนไขเบื้องต้น exists เป็น false |
datastore.entities.create |
write (RPC) อัปเดตหรือเปลี่ยนรูปแบบโดยตั้งค่าเงื่อนไขเบื้องต้น exists เป็น true |
datastore.entities.update |
write (RPC) อัปเดตหรือเปลี่ยนรูปแบบโดยไม่มีเงื่อนไขเบื้องต้น |
datastore.entities.create |
write (RPC) ลบ |
datastore.entities.delete |
projects.databases.indexes |
|
create |
datastore.schemas.create |
delete |
datastore.schemas.delete |
get |
datastore.schemas.get |
list |
datastore.schemas.list |
projects.databases |
|
create |
datastore.databases.createหากคำขอ
หากต้องการยืนยันว่าได้ตั้งค่าการเชื่อมโยงแท็กสําเร็จหรือไม่โดยการแสดงรายการการเชื่อมโยง คุณจะต้องมีสิทธิ์เพิ่มเติมต่อไปนี้
|
delete |
datastore.databases.delete |
get |
datastore.databases.getMetadata |
list |
datastore.databases.list |
patch |
datastore.databases.update |
| คืนค่า | datastore.backups.restoreDatabase |
clone |
datastore.databases.cloneหากคำขอ
หากต้องการยืนยันว่าได้ตั้งค่าการเชื่อมโยงแท็กสําเร็จหรือไม่โดยการแสดงรายการการเชื่อมโยง คุณจะต้องมีสิทธิ์เพิ่มเติมต่อไปนี้
|
projects.locations |
|
get |
datastore.locations.get |
list |
datastore.locations.list |
projects.databases.backupschedules |
|
| รับ | datastore.backupSchedules.get |
| list | datastore.backupSchedules.list |
| สร้าง | datastore.backupSchedules.create |
| อัปเดต | datastore.backupSchedules.update |
| ลบ | datastore.backupSchedules.delete |
projects.locations.backups |
|
| รับ | datastore.backups.get |
| list | datastore.backups.list |
| ลบ | datastore.backups.delete |
บทบาทที่กำหนดไว้ล่วงหน้า
เมื่อใช้ IAM เมธอด API ทุกรายการใน Cloud Firestore กำหนดให้บัญชีที่ส่งคำขอ API ต้องมีสิทธิ์ที่เหมาะสม ในการใช้ทรัพยากร โดยการให้สิทธิ์จะทำได้ด้วยการตั้งค่านโยบายที่ให้ บทบาทแก่ผู้ใช้ กลุ่ม หรือบัญชีบริการ นอกเหนือจากบทบาทพื้นฐาน เจ้าของ ผู้แก้ไข และผู้ดู แล้ว คุณยังให้บทบาท Cloud Firestore แก่ผู้ใช้โปรเจ็กต์ได้ด้วย
ตารางต่อไปนี้แสดงบทบาท Cloud Firestore IAM คุณสามารถให้บทบาทหลายบทบาทแก่ผู้ใช้ กลุ่ม หรือบัญชีบริการได้
| บทบาท | สิทธิ์ | คำอธิบาย |
|---|---|---|
roles/datastore.owner |
appengine.applications.getdatastore.*resourcemanager.projects.getresourcemanager.projects.list |
สิทธิ์เข้าถึง Cloud Firestore แบบเต็ม |
roles/datastore.user |
appengine.applications.getdatastore.databases.getdatastore.databases.getMetadatadatastore.databases.listdatastore.entities.*datastore.schemas.listdatastore.namespaces.getdatastore.namespaces.listdatastore.statistics.getdatastore.statistics.listresourcemanager.projects.getresourcemanager.projects.list |
สิทธิ์การอ่าน/เขียนข้อมูลในฐานข้อมูล Cloud Firestore ใช้สำหรับนักพัฒนาแอปพลิเคชันและบัญชีบริการ |
roles/datastore.viewer |
appengine.applications.getdatastore.databases.getdatastore.databases.getMetadatadatastore.databases.listdatastore.entities.getdatastore.entities.listdatastore.schemas.getdatastore.schemas.listdatastore.namespaces.getdatastore.namespaces.listdatastore.statistics.getdatastore.statistics.listresourcemanager.projects.getresourcemanager.projects.listdatastore.insights.get |
สิทธิ์การอ่านทรัพยากร Cloud Firestore ทั้งหมด |
roles/datastore.importExportAdmin |
appengine.applications.getdatastore.databases.exportdatastore.databases.getMetadatadatastore.databases.importdatastore.operations.canceldatastore.operations.getdatastore.operations.listresourcemanager.projects.getresourcemanager.projects.list |
มีสิทธิ์เข้าถึงการจัดการการนำเข้าและส่งออกโดยสมบูรณ์ |
roles/datastore.bulkAdmin |
resourcemanager.projects.getresourcemanager.projects.listdatastore.databases.getMetadatadatastore.databases.bulkDeletedatastore.operations.canceldatastore.operations.getdatastore.operations.list |
สิทธิ์เข้าถึงเพื่อจัดการการดำเนินการแบบกลุ่มโดยสมบูรณ์ |
roles/datastore.indexAdmin |
appengine.applications.getdatastore.databases.getMetadatadatastore.schemas.*datastore.operations.listdatastore.operations.getresourcemanager.projects.getresourcemanager.projects.list |
สิทธิ์เข้าถึงเพื่อจัดการคำนิยามของดัชนีโดยสมบูรณ์ |
roles/datastore.keyVisualizerViewer |
datastore.databases.getMetadatadatastore.keyVisualizerScans.getdatastore.keyVisualizerScans.listresourcemanager.projects.getresourcemanager.projects.list |
สิทธิ์เข้าถึงการสแกน Key Visualizer โดยสมบูรณ์ |
roles/datastore.backupSchedulesViewer |
datastore.backupSchedules.getdatastore.backupSchedules.list |
สิทธิ์การอ่านกำหนดเวลาสำรองข้อมูลในCloud Firestoreฐานข้อมูล |
roles/datastore.backupSchedulesAdmin |
datastore.backupSchedules.getdatastore.backupSchedules.listdatastore.backupSchedules.createdatastore.backupSchedules.updatedatastore.backupSchedules.deletedatastore.databases.listdatastore.databases.getMetadata |
สิทธิ์เข้าถึงกำหนดการสำรองข้อมูลในฐานข้อมูล Cloud Firestore โดยสมบูรณ์ |
roles/datastore.backupsViewer |
datastore.backups.getdatastore.backups.list |
สิทธิ์การอ่านข้อมูลสำรองในCloud Firestore |
roles/datastore.backupsAdmin |
datastore.backups.getdatastore.backups.listdatastore.backups.delete |
สิทธิ์เข้าถึงข้อมูลสำรองในตำแหน่ง Cloud Firestore โดยสมบูรณ์ |
roles/datastore.restoreAdmin |
datastore.backups.getdatastore.backups.listdatastore.backups.restoreDatabasedatastore.databases.listdatastore.databases.createdatastore.databases.getMetadatadatastore.operations.listdatastore.operations.get |
ความสามารถในการกู้คืนข้อมูลสำรอง Cloud Firestore ไปยังฐานข้อมูลใหม่ บทบาทนี้ยังช่วยให้สร้างฐานข้อมูลใหม่ได้ด้วย ไม่จำเป็นต้องกู้คืนจากข้อมูลสำรอง |
roles/datastore.cloneAdmin |
datastore.databases.clonedatastore.databases.listdatastore.databases.createdatastore.databases.getMetadatadatastore.operations.listdatastore.operations.get |
ความสามารถในการโคลนฐานข้อมูล Cloud Firestore ไปยังฐานข้อมูลใหม่ บทบาทนี้ยังช่วยให้สร้างฐานข้อมูลใหม่ได้ด้วย ไม่จำเป็นต้องโคลน |
roles/datastore.statisticsViewer |
resourcemanager.projects.getresourcemanager.projects.listdatastore.databases.getMetadatadatastore.insights.getdatastore.keyVisualizerScans.getdatastore.keyVisualizerScans.listdatastore.statistics.listdatastore.statistics.get |
สิทธิ์การอ่านข้อมูลเชิงลึก สถิติ และการสแกน Key Visualizer |
บทบาทที่กำหนดเอง
หากบทบาทที่กำหนดไว้ล่วงหน้าไม่ตรงกับข้อกำหนดทางธุรกิจ คุณสามารถกำหนดบทบาทที่กำหนดเองที่มีสิทธิ์ที่คุณระบุได้
บทบาทที่จำเป็นในการสร้างและจัดการแท็ก
หากมีการแสดงแท็กในการดำเนินการสร้างหรือกู้คืน คุณจะต้องมีบทบาทบางอย่าง ดูรายละเอียดเพิ่มเติมเกี่ยวกับการสร้างคู่คีย์-ค่าของแท็กก่อนที่จะเชื่อมโยงกับทรัพยากรฐานข้อมูลได้ที่การสร้างและจัดการแท็ก
ต้องมีสิทธิ์ที่ระบุไว้ต่อไปนี้
ดูแท็ก
datastore.databases.listTagBindingsdatastore.databases.listEffectiveTags
จัดการแท็กในทรัพยากร
คุณต้องมีสิทธิ์ต่อไปนี้สำหรับทรัพยากรฐานข้อมูลที่คุณแนบค่าแท็ก
datastore.databases.createTagBinding
สิทธิ์
ตารางต่อไปนี้แสดงสิทธิ์ที่ Cloud Firestore รองรับ
| ชื่อสิทธิ์ของฐานข้อมูล | คำอธิบาย | |
|---|---|---|
datastore.databases.get |
เริ่มหรือย้อนกลับธุรกรรม | |
datastore.databases.import |
นำเข้าเอนทิตีไปยังฐานข้อมูล | |
datastore.databases.export |
ส่งออกเอนทิตีจากฐานข้อมูล | |
datastore.databases.bulkDelete |
ลบเอนทิตีออกจากฐานข้อมูลเป็นกลุ่ม | |
datastore.databases.getMetadata |
อ่านข้อมูลเมตาจากฐานข้อมูล | |
datastore.databases.list |
แสดงรายการฐานข้อมูลในโปรเจ็กต์ | |
datastore.databases.create |
สร้างฐานข้อมูล | |
datastore.databases.update |
อัปเดตฐานข้อมูล | |
datastore.databases.delete |
ลบฐานข้อมูล | |
datastore.databases.clone |
โคลนฐานข้อมูล | |
datastore.databases.createTagBinding |
สร้างการเชื่อมโยงแท็กสำหรับฐานข้อมูล | |
datastore.databases.deleteTagBinding |
ลบการเชื่อมโยงแท็กสำหรับฐานข้อมูล | |
datastore.databases.listTagBindings |
แสดงรายการการเชื่อมโยงแท็กทั้งหมดสำหรับฐานข้อมูล | |
datastore.databases.listEffectiveTagBindings |
แสดงรายการการเชื่อมโยงแท็กที่มีประสิทธิภาพสำหรับฐานข้อมูล | |
| ชื่อสิทธิ์ของเอนทิตี | คำอธิบาย | |
datastore.entities.create |
สร้างเอกสาร | |
datastore.entities.delete |
ลบเอกสาร | |
datastore.entities.get |
อ่านเอกสาร | |
datastore.entities.list |
แสดงรายการชื่อเอกสารในโปรเจ็กต์ (ต้องมี datastore.entities.get เพื่อเข้าถึงข้อมูลเอกสาร) |
|
datastore.entities.update |
อัปเดตเอกสาร | |
| ชื่อสิทธิ์ดัชนี | คำอธิบาย | |
datastore.schemas.create |
สร้างดัชนี | |
datastore.schemas.delete |
ลบดัชนี | |
datastore.schemas.get |
อ่านข้อมูลเมตาจากดัชนี | |
datastore.schemas.list |
แสดงรายการดัชนีในโปรเจ็กต์ | |
datastore.schemas.update |
อัปเดตดัชนี | |
| ชื่อสิทธิ์การดำเนินการ | คำอธิบาย | |
datastore.operations.cancel |
ยกเลิกการดำเนินการที่ใช้เวลานาน | |
datastore.operations.delete |
ลบการดำเนินการที่ใช้เวลานาน | |
datastore.operations.get |
รับสถานะล่าสุดของการดำเนินการที่ใช้เวลานาน | |
datastore.operations.list |
แสดงรายการการดำเนินการที่ใช้เวลานาน | |
| ชื่อสิทธิ์ของโปรเจ็กต์ | คำอธิบาย | |
resourcemanager.projects.get |
เรียกดูทรัพยากรในโปรเจ็กต์ | |
resourcemanager.projects.list |
แสดงรายการโปรเจ็กต์ที่คุณเป็นเจ้าของ | |
| ชื่อสิทธิ์เข้าถึงตำแหน่ง | คำอธิบาย | |
datastore.locations.get |
ดูรายละเอียดเกี่ยวกับตำแหน่งฐานข้อมูล ต้องสร้าง ฐานข้อมูลใหม่ | |
datastore.locations.list |
แสดงรายการตำแหน่งฐานข้อมูลที่ใช้ได้ ต้องสร้าง ฐานข้อมูลใหม่ | |
| ชื่อสิทธิ์ของ Key Visualizer | คำอธิบาย | |
datastore.keyVisualizerScans.get |
ดูรายละเอียดเกี่ยวกับการสแกน Key Visualizer | |
datastore.keyVisualizerScans.list |
แสดงรายการการสแกน Key Visualizer ที่พร้อมใช้งาน | |
| ชื่อสิทธิ์กำหนดการสำรองข้อมูล | คำอธิบาย | |
datastore.backupSchedules.get |
ดูรายละเอียดเกี่ยวกับกำหนดเวลาสำรองข้อมูล | |
datastore.backupSchedules.list |
แสดงรายการกำหนดเวลาสำรองข้อมูลที่มี | |
datastore.backupSchedules.create |
สร้างกำหนดเวลาสำรองข้อมูล | |
datastore.backupSchedules.update |
อัปเดตกำหนดเวลาสำรองข้อมูล | |
datastore.backupSchedules.delete |
ลบกำหนดการสำรองข้อมูล | |
| ชื่อสิทธิ์การสำรองข้อมูล | คำอธิบาย | |
datastore.backups.get |
ดูรายละเอียดเกี่ยวกับการสำรองข้อมูล | |
datastore.backups.list |
แสดงรายการข้อมูลสำรองที่มี | |
datastore.backups.delete |
ลบข้อมูลสำรอง | |
datastore.backups.restoreDatabase |
กู้คืนฐานข้อมูลจากข้อมูลสำรอง | |
| ชื่อสิทธิ์ของข้อมูลเชิงลึก | คำอธิบาย | |
datastore.insights.get |
รับข้อมูลเชิงลึกของทรัพยากร |
เวลาในการตอบสนองของการเปลี่ยนบทบาท
Cloud Firestore จะแคชสิทธิ์ IAM เป็นเวลา 5 นาที ดังนั้นการเปลี่ยนแปลงบทบาทจึงใช้เวลาสูงสุด 5 นาทีจึงจะมีผล
จัดการ IAM ของ Cloud Firestore
คุณรับและตั้งค่านโยบาย IAM ได้โดยใช้คอนโซล Google Cloud, IAM API หรือเครื่องมือบรรทัดคำสั่ง gcloud โปรดดูรายละเอียดที่หัวข้อการให้ เปลี่ยน และเพิกถอนสิทธิ์เข้าถึงสมาชิกของโปรเจ็กต์
กำหนดค่าสิทธิ์การเข้าถึงแบบมีเงื่อนไข
คุณใช้เงื่อนไข IAM เพื่อ กำหนดและบังคับใช้การควบคุมการเข้าถึงแบบมีเงื่อนไขได้
ตัวอย่างเช่น เงื่อนไขต่อไปนี้จะกำหนดdatastore.user
บทบาทให้กับผู้ใช้จนถึงวันที่ที่ระบุ
{
"role": "roles/datastore.user",
"members": [
"user:travis@example.com"
],
"condition": {
"title": "Expires_December_1_2023",
"description": "Expires on December 1, 2023",
"expression":
"request.time < timestamp('2023-12-01T00:00:00.000Z')"
}
}
ดูวิธีระบุเงื่อนไข IAM สำหรับการเข้าถึงชั่วคราวได้ที่กำหนดค่าการเข้าถึงชั่วคราว
ดูวิธีกำหนดค่าเงื่อนไข IAM สำหรับการเข้าถึงฐานข้อมูลอย่างน้อย 1 รายการได้ที่กำหนดค่าเงื่อนไขการเข้าถึงฐานข้อมูล
การขึ้นต่อกันของกฎความปลอดภัยกับ IAM
Cloud Firestore Security Rules สำหรับไคลเอ็นต์บนอุปกรณ์เคลื่อนที่/เว็บจะขึ้นอยู่กับบัญชีบริการต่อไปนี้ และการเชื่อมโยง IAM
| บัญชีบริการ | บทบาท IAM |
|---|---|
service-project_number@firebase-rules.iam.gserviceaccount.com |
roles/firebaserules.system |
Firebase จะตั้งค่าบัญชีบริการนี้ให้คุณโดยอัตโนมัติ หากคุณนำบทบาท firebaserules.system ออกจากบัญชีบริการนี้ กฎความปลอดภัยจะปฏิเสธคำขอทั้งหมด หากต้องการกู้คืนการเชื่อมโยง IAM นี้
ให้ใช้คำสั่ง gcloud CLI ต่อไปนี้
gcloud projects add-iam-policy-binding project_id \ --member=serviceAccount:service-project_number@firebase-rules.iam.gserviceaccount.com \ --role=roles/firebaserules.system
หากต้องการดู project_id และ project_number ให้ไปที่ การระบุโปรเจ็กต์
ใช้ Google Cloud CLI แทนคอนโซล Google Cloud
เนื่องจากบทบาทfirebaserules.systemจะซ่อนอยู่ในคอนโซลโดยค่าเริ่มต้น
ขั้นตอนถัดไป
- ดูข้อมูลเพิ่มเติมเกี่ยวกับ IAM
- มอบบทบาท IAM
- ดูข้อมูลเกี่ยวกับการตรวจสอบสิทธิ์