เมื่อใช้ไลบรารีของไคลเอ็นต์เซิร์ฟเวอร์สำหรับ 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 อัปเดตหรือเปลี่ยนรูปแบบโดยตั้งค่าเงื่อนไขก่อนหน้าที่มีอยู่เป็น false |
datastore.entities.create |
batchWrite อัปเดตหรือเปลี่ยนรูปแบบโดยตั้งค่าเงื่อนไขก่อนหน้าที่มีอยู่เป็น true |
datastore.entities.create |
batchWrite อัปเดตหรือเปลี่ยนรูปแบบโดยไม่มีเงื่อนไขเบื้องต้น |
datastore.entities.create |
beginTransaction |
datastore.databases.get |
commit อัปเดตหรือเปลี่ยนรูปแบบโดยตั้งค่าเงื่อนไขก่อนหน้าที่มีอยู่เป็น false |
datastore.entities.create |
commit อัปเดตหรือเปลี่ยนรูปแบบโดยตั้งค่าเงื่อนไขก่อนหน้าที่มีอยู่เป็น 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
|
executePipeline (RPC)ที่มีระยะใดระยะหนึ่งต่อไปนี้ - update(...) |
datastore.entities.update
|
executePipeline (RPC)ที่มีระยะใดระยะหนึ่งต่อไปนี้ - delete(...) |
datastore.entities.delete
|
write (RPC) อัปเดตหรือเปลี่ยนรูปแบบโดยตั้งค่าเงื่อนไขก่อนหน้าที่มีอยู่เป็น false |
datastore.entities.create |
write (RPC) อัปเดตหรือเปลี่ยนรูปแบบโดยตั้งค่าเงื่อนไขก่อนหน้าที่มีอยู่เป็น 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 ให้กับผู้ใช้ของโปรเจ็กต์ได้ด้วย
ตารางต่อไปนี้แสดงบทบาท IAM ของ Cloud Firestore คุณสามารถมอบหมายบทบาทหลายบทบาทให้กับผู้ใช้ กลุ่ม หรือบัญชีบริการได้
| บทบาท | สิทธิ์ | คำอธิบาย |
|---|---|---|
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
- ดูข้อมูลเกี่ยวกับการตรวจสอบสิทธิ์