Identity and Access Management (IAM)

เมื่อใช้ไลบรารีของไคลเอ็นต์เซิร์ฟเวอร์สำหรับ 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
datastore.entities.update
beginTransaction datastore.databases.get
commit อัปเดตหรือเปลี่ยนรูปแบบโดยตั้งค่าเงื่อนไขก่อนหน้าที่มีอยู่เป็น false datastore.entities.create
commit อัปเดตหรือเปลี่ยนรูปแบบโดยตั้งค่าเงื่อนไขก่อนหน้าที่มีอยู่เป็น true datastore.entities.update
commit อัปเดตหรือเปลี่ยนรูปแบบโดยไม่มีเงื่อนไขเบื้องต้น datastore.entities.create
datastore.entities.update
ลบ commit datastore.entities.delete
createDocument datastore.entities.create
delete datastore.entities.delete
get datastore.entities.get
list datastore.entities.get
datastore.entities.list
listCollectionIds datastore.entities.list
partitionQuery datastore.entities.get
datastore.entities.list
patch datastore.entities.update
rollback datastore.databases.get
runAggregationQuery datastore.entities.get
datastore.entities.list
runQuery datastore.entities.get
datastore.entities.list
executePipeline (RPC)

ที่มีระยะใดระยะหนึ่งต่อไปนี้
- collection(...)
- collection_group(...)
- database()
datastore.entities.get
datastore.entities.list
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
datastore.entities.update
ลบ 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

หากคำขอ create มีค่า tags คุณจะต้องมีสิทธิ์เพิ่มเติมต่อไปนี้

  • datastore.databases.createTagBinding

หากต้องการยืนยันว่าตั้งค่าการเชื่อมโยงแท็กสำเร็จหรือไม่โดยแสดงรายการการเชื่อมโยง คุณจะต้องมีสิทธิ์เพิ่มเติมต่อไปนี้

  • datastore.databases.listTagBindings
  • datastore.databases.listEffectiveTags
delete datastore.databases.delete
get datastore.databases.getMetadata
list datastore.databases.list
patch datastore.databases.update
คืนค่า datastore.backups.restoreDatabase
clone datastore.databases.clone

หากคำขอ clone มีค่า tags คุณจะต้องมีสิทธิ์เพิ่มเติมต่อไปนี้

  • datastore.databases.createTagBinding

หากต้องการยืนยันว่าตั้งค่าการเชื่อมโยงแท็กสำเร็จหรือไม่โดยแสดงรายการการเชื่อมโยง คุณจะต้องมีสิทธิ์เพิ่มเติมต่อไปนี้

  • datastore.databases.listTagBindings
  • datastore.databases.listEffectiveTags
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.get

datastore.*

resourcemanager.projects.get
resourcemanager.projects.list
สิทธิ์เข้าถึง Cloud Firestore อย่างเต็มรูปแบบ
roles/datastore.user appengine.applications.get

datastore.databases.get
datastore.databases.getMetadata
datastore.databases.list
datastore.entities.*
datastore.schemas.list
datastore.namespaces.get
datastore.namespaces.list
datastore.statistics.get
datastore.statistics.list

resourcemanager.projects.get
resourcemanager.projects.list
สิทธิ์การอ่าน/เขียนข้อมูลในฐานข้อมูล Cloud Firestore มีไว้สำหรับนักพัฒนาแอปพลิเคชันและบัญชีบริการ
roles/datastore.viewer appengine.applications.get

datastore.databases.get
datastore.databases.getMetadata
datastore.databases.list
datastore.entities.get
datastore.entities.list
datastore.schemas.get
datastore.schemas.list
datastore.namespaces.get
datastore.namespaces.list
datastore.statistics.get
datastore.statistics.list

resourcemanager.projects.get
resourcemanager.projects.list

datastore.insights.get
สิทธิ์การอ่านทรัพยากร Cloud Firestore ทั้งหมด
roles/datastore.importExportAdmin appengine.applications.get
datastore.databases.export
datastore.databases.getMetadata
datastore.databases.import
datastore.operations.cancel
datastore.operations.get
datastore.operations.list
resourcemanager.projects.get
resourcemanager.projects.list
มีสิทธิ์เข้าถึงการจัดการการนำเข้าและส่งออกโดยสมบูรณ์
roles/datastore.bulkAdmin resourcemanager.projects.get
resourcemanager.projects.list
datastore.databases.getMetadata
datastore.databases.bulkDelete
datastore.operations.cancel
datastore.operations.get
datastore.operations.list
สิทธิ์เข้าถึงอย่างเต็มรูปแบบเพื่อจัดการการดำเนินการแบบกลุ่ม
roles/datastore.indexAdmin appengine.applications.get

datastore.databases.getMetadata

datastore.schemas.*

datastore.operations.list

datastore.operations.get

resourcemanager.projects.get
resourcemanager.projects.list
สิทธิ์เข้าถึงเพื่อจัดการคำนิยามของดัชนีโดยสมบูรณ์
roles/datastore.keyVisualizerViewer datastore.databases.getMetadata
datastore.keyVisualizerScans.get
datastore.keyVisualizerScans.list
resourcemanager.projects.get
resourcemanager.projects.list
สิทธิ์เข้าถึงการสแกน Key Visualizer โดยสมบูรณ์
roles/datastore.backupSchedulesViewer datastore.backupSchedules.get
datastore.backupSchedules.list
สิทธิ์การอ่านกำหนดเวลาสำรองข้อมูลในฐานข้อมูล Cloud Firestore
roles/datastore.backupSchedulesAdmin datastore.backupSchedules.get
datastore.backupSchedules.list
datastore.backupSchedules.create
datastore.backupSchedules.update
datastore.backupSchedules.delete
datastore.databases.list
datastore.databases.getMetadata
สิทธิ์เข้าถึงกำหนดเวลาการสำรองข้อมูลในฐานข้อมูล Cloud Firestore อย่างเต็มรูปแบบ
roles/datastore.backupsViewer datastore.backups.get
datastore.backups.list
สิทธิ์อ่านข้อมูลสำรองในตำแหน่ง Cloud Firestore
roles/datastore.backupsAdmin datastore.backups.get
datastore.backups.list
datastore.backups.delete
สิทธิ์เข้าถึงข้อมูลสำรองอย่างเต็มรูปแบบในตำแหน่ง Cloud Firestore
roles/datastore.restoreAdmin datastore.backups.get
datastore.backups.list
datastore.backups.restoreDatabase
datastore.databases.list
datastore.databases.create
datastore.databases.getMetadata
datastore.operations.list
datastore.operations.get
ความสามารถในการกู้คืนข้อมูลสำรอง Cloud Firestore ไปยังฐานข้อมูลใหม่ บทบาทนี้ยังให้ความสามารถในการสร้างฐานข้อมูลใหม่ โดยไม่จำเป็นต้องกู้คืนจากข้อมูลสำรอง
roles/datastore.cloneAdmin datastore.databases.clone
datastore.databases.list
datastore.databases.create
datastore.databases.getMetadata
datastore.operations.list
datastore.operations.get
ความสามารถในการโคลนฐานข้อมูล Cloud Firestore ไปยังฐานข้อมูลใหม่ นอกจากนี้ บทบาทนี้ยังให้สิทธิ์ในการสร้างฐานข้อมูลใหม่ โดยไม่จำเป็นต้องโคลน
roles/datastore.statisticsViewer resourcemanager.projects.get
resourcemanager.projects.list
datastore.databases.getMetadata
datastore.insights.get
datastore.keyVisualizerScans.get
datastore.keyVisualizerScans.list
datastore.statistics.list
datastore.statistics.get
สิทธิ์การอ่านข้อมูลเชิงลึก สถิติ และการสแกน Key Visualizer

บทบาทที่กำหนดเอง

หากบทบาทที่กำหนดไว้ล่วงหน้าไม่ตรงกับข้อกำหนดทางธุรกิจ คุณสามารถกำหนดบทบาทที่กำหนดเองของคุณเองด้วยสิทธิ์ที่คุณระบุได้ดังนี้

บทบาทที่จำเป็นในการสร้างและจัดการแท็ก

หากมีการแสดงแท็กในการดำเนินการสร้างหรือกู้คืน คุณจะต้องมีบทบาทบางอย่าง ดูรายละเอียดเพิ่มเติมเกี่ยวกับการสร้างคู่คีย์-ค่าของแท็กก่อนเชื่อมโยงกับทรัพยากรฐานข้อมูลได้ที่หัวข้อการสร้างและจัดการแท็ก

ต้องมีสิทธิ์ที่ระบุไว้ต่อไปนี้

ดูแท็ก
  • datastore.databases.listTagBindings
  • datastore.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 จะซ่อนอยู่ในคอนโซลโดยค่าเริ่มต้น

ขั้นตอนถัดไป