وقتی از کتابخانههای کارخواه سرور برای 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 |
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 |
| فهرست | 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.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 |
دسترسی خواندن به «اطلاعات آماری»، «آمار»، و اسکنهای «کلید مصورساز». |
نقشهای سفارشی
اگر نقشهای ازپیش تعریفشده نیازهای کسبوکارتان را برآورده نمیکند، میتوانید نقشهای سفارشی خودتان را با اجازههایی که مشخص میکنید تعریف کنید:
نقشهای لازم برای ایجاد و مدیریت برچسبها
اگر برچسبی در کنشهای ایجاد یا بازیابی نشان داده شود، برخیاز نقشها الزامی است. برای جزئیات بیشتر درباره ایجاد جفتهای کلید-مقدار برچسب قبلاز مرتبط کردن آنها با منابع پایگاه داده، به ایجاد و مدیریت برچسبها مراجعه کنید.
اجازههای فهرستشده زیر لازم است.
مشاهده برچسبها
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 را بهمدت ۵ دقیقه ذخیره میکند، بنابراین تا ۵ دقیقه طول میکشد تا تغییر نقش اعمال شود.
مدیریت 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 بهطور پیشفرض در کنسول پنهان است.
حالا چه میشود
- درباره IAM بیشتر بدانید.
- نقشهای IAM را اعطا کنید.
- با اصالتسنجی آشنا شوید.