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

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

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

IAM به شما امکان می‌دهد با تنظیم سیاست‌های IAM، کنترل کنید که چه کسی (کاربر) چه مجوز (نقشی) برای کدام منابع دارد. سیاست‌های IAM یک یا چند نقش را به یک کاربر اعطا می‌کنند و مجوزهای خاصی را به کاربر می‌دهند. به عنوان مثال، می‌توانید نقش 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
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، هر روش 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 حذف یک تگ binding برای یک پایگاه داده.
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 فهرست مکان‌های موجود پایگاه داده. برای ایجاد یک پایگاه داده جدید لازم است.
نام مجوز تجسم‌گر کلید توضیحات
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 بازیابی یک پایگاه داده از یک نسخه پشتیبان.
نام مجوز Insights توضیحات
datastore.insights.get دریافت بینش از یک منبع

تأخیر در تغییر نقش

Cloud Firestore مجوزهای IAM را به مدت ۵ دقیقه ذخیره می‌کند، بنابراین اعمال تغییر نقش تا ۵ دقیقه طول می‌کشد.

مدیریت IAM Cloud Firestore

شما می‌توانید سیاست‌های IAM را با استفاده از کنسول Google Cloud، رابط برنامه‌نویسی IAM یا ابزار خط فرمان gcloud دریافت و تنظیم کنید. برای جزئیات بیشتر به بخش اعطای، تغییر و لغو دسترسی به اعضای پروژه مراجعه کنید.

پیکربندی مجوزهای دسترسی مشروط

شما می‌توانید از IAM Conditions برای تعریف و اعمال کنترل دسترسی مشروط استفاده کنید.

برای مثال، شرط زیر نقش datastore.user را تا تاریخ مشخصی به یک principal اختصاص می‌دهد:

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

قدم بعدی چیست؟