مدیریت هویت و دسترسی‌ها (IAM)

وقتی از کتابخانه‌های کارخواه سرور برای Cloud Firestore استفاده می‌کنید، می‌توانید دسترسی به منابعتان را با «مدیریت هویت و دسترسی‌ها» (IAM) مدیریت کنید. IAM به شما امکان می‌دهد دسترسی دقیق‌تری به منابع خاص Google Cloud بدهید و از دسترسی ناخواسته به منابع دیگر جلوگیری می‌کند. این صفحه اجازه‌ها و نقش‌های IAM را برای Cloud Firestore شرح می‌دهد. برای شرح مفصل IAM، اسناد IAM را بخوانید.

IAM به شما امکان می‌دهد اصل امنیتی حداقل امتیاز را اتخاذ کنید، بنابراین فقط دسترسی لازم را به منابع خود اعطا می‌کنید.

IAM به شما امکان می‌دهد با تنظیم خط‌مشی‌های IAM، کنترل کنید چه کسی (کاربر) چه (نقش) اجازه‌ای برای کدام منابع دارد. خط‌مشی‌های IAM یک یا چند نقش را به کاربر اعطا می‌کنند و به کاربر اجازه‌های خاصی می‌دهند. برای مثال، می‌توانید نقش datastore.indexAdmin را به کاربر اعطا کنید که به کاربر اجازه می‌دهد نمایه‌ها را ایجاد، اصلاح، حذف، فهرست، یا مشاهده کند.

اجازه‌ها و نقش‌ها

این بخش اجازه‌ها و نقش‌هایی را که Cloud Firestore پشتیبانی می‌کند به‌طور خلاصه ارائه می‌دهد.

اجازه‌های لازم برای روش‌های میانای برنامه‌سازی کاربردی

جدول زیر اجازه‌هایی را که فراخواننده باید برای انجام هر کنش داشته باشد فهرست می‌کند:

روش مجوزهای لازم
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
فهرست datastore.backupSchedules.list
ایجاد datastore.backupSchedules.create
به‌روزرسانی datastore.backupSchedules.update
حذف datastore.backupSchedules.delete
projects.locations.backups
دریافت کردن datastore.backups.get
فهرست datastore.backups.list
حذف datastore.backups.delete

نقش‌های ازپیش تعریف‌شده

با IAM، هر روش میانای برنامه‌سازی کاربردی در Cloud Firestore نیاز دارد که حساب ارائه‌دهنده درخواست میانای برنامه‌سازی کاربردی، اجازه‌های مناسب را برای استفاده از منبع داشته باشد. اجازه‌ها با تنظیم خط‌مشی‌هایی اعطا می‌شود که نقش‌ها را به کاربر، گروه، یا حساب سرویس اعطا می‌کند. علاوه‌بر نقش‌های اصلی، مالک، ویرایشگر، و بیننده، می‌توانید نقش‌های Cloud Firestore را به کاربران پروژه‌تان اعطا کنید.

جدول زیر نقش‌های Cloud Firestore IAM را فهرست می‌کند. می‌توانید چندین نقش را به یک کاربر، گروه، یا حساب سرویس اعطا کنید.

نقش اجازه‌ها شرح
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
دسترسی خواندن به «اطلاعات آماری»، «آمار»، و اسکن‌های «کلید مصورساز».

نقش‌های سفارشی

اگر نقش‌های ازپیش تعریف‌شده نیازهای کسب‌وکارتان را برآورده نمی‌کند، می‌توانید نقش‌های سفارشی خودتان را با اجازه‌هایی که مشخص می‌کنید تعریف کنید:

نقش‌های لازم برای ایجاد و مدیریت برچسب‌ها

اگر برچسبی در کنش‌های ایجاد یا بازیابی نشان داده شود، برخی‌از نقش‌ها الزامی است. برای جزئیات بیشتر درباره ایجاد جفت‌های کلید-مقدار برچسب قبل‌از مرتبط کردن آن‌ها با منابع پایگاه داده، به ایجاد و مدیریت برچسب‌ها مراجعه کنید.

اجازه‌های فهرست‌شده زیر لازم است.

مشاهده برچسب‌ها
  • 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 را به‌مدت ۵ دقیقه ذخیره می‌کند، بنابراین تا ۵ دقیقه طول می‌کشد تا تغییر نقش اعمال شود.

مدیریت 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» برای دسترسی به یک یا چند پایگاه داده، به پیکربندی شرایط دسترسی به پایگاه داده مراجعه کنید.

وابستگی قانون امنیتی به 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، از Google Cloud CLI استفاده کنید، زیرا نقش firebaserules.system به‌طور پیش‌فرض در کنسول پنهان است.

حالا چه می‌شود