این صفحه نحوه انجام کارهای مربوط به کلیدهای رمزگذاری مدیریتشده توسط مشتری (CMEK) برای Cloud Firestore را شرح میدهد. برای اطلاعات بیشتر درباره CMEK بهطور کلی، ازجمله زمان و دلیل فعال کردن آن، به اسناد Cloud KMS مراجعه کنید.
آماده کردن کلیدهای CMEK
قبلاز اینکه بتوانید پایگاه داده Cloud Firestore محافظتشده با CMEK ایجاد کنید، باید مراحل زیر را تکمیل کنید:
- درخواست دسترسی به Cloud Firestore ویژگی CMEK.
- یک عامل سرویس Cloud Firestore ایجاد (یا بازیابی) کنید.
- کلید CMEK ایجاد کنید.
- تنظیمات IAM را برای آن کلید پیکربندی کنید.
این مراحل را برای هر پروژهای که حاوی پایگاههای داده محافظتشده با CMEK Cloud Firestore است تکمیل کنید. اگر بعداً کلید CMEK جدیدی ایجاد کنید، باید تنظیمات IAM را برای آن کلید پیکربندی کنید.
درخواست دسترسی
قبلاز ایجاد عامل سرویس Cloud Firestore، با تکمیل کردن این فرم، دسترسی به ویژگی CMEK را درخواست کنید.
ایجاد کردن عامل خدمات Cloud Firestore
قبلاز ایجاد کلید CMEK، باید Cloud Firestore نماینده سرویس داشته باشید که نوعی حساب سرویس تحت مدیریت Google است که Cloud Firestore از آن برای دسترسی به کلید استفاده میکند.
فرمان services identity create را اجرا کنید تا عامل سرویسی را که Cloud Firestore برای دسترسی به کلید CMEK ازطرف شما استفاده میکند ایجاد کنید. این فرمان حساب خدمات را درصورت عدم وجود ایجاد میکند، سپس آن را نمایش میدهد.
gcloud beta services identity create \
--service=firestore.googleapis.com \
--project FIRESTORE_PROJECT
FIRESTORE_PROJECT را با پروژهای که قصد دارید
برای پایگاههای داده Cloud Firestore استفاده کنید جایگزین کنید.
این فرمان شناسه نماینده سرویس را نمایش میدهد که قالب آن شبیه نشانی ایمیل است. رشته ایمیل خروجی را ثبت کنید، زیرا در مرحله بعد از آن استفاده خواهید کرد.
Service identity created: service-xxx@gcp-sa-firestore.iam.gserviceaccount.com
ایجاد کلید
میتوانید از کلیدی که مستقیماً در Cloud KMS ایجاد شده است یا کلیدی که بهصورت خارجی مدیریت میشود و آن را با Cloud External Key Manager دردسترس قرار میدهید استفاده کنید.
مکان کلید Cloud KMS باید با مکان پایگاه داده Cloud Firestore که با آن استفاده خواهد شد یکسان باشد.
برای مکانهای پایگاه داده منطقهای، از نام مکان یکسان برای حلقهکلید، کلید، و پایگاه داده استفاده کنید زیرا نامهای مکان نگاشت یکبهیک دارند.
برای مثال، اگر میخواهید پایگاه داده محافظتشده با CMEK در
us-west1ایجاد کنید، حلقهکلید و کلید را درus-west1ایجاد کنید.برای مکانهای پایگاه داده چندمنطقهای، از نام مکان مکان چندمنطقهای KMS استفاده کنید:
- از مکان چندمنطقهای Cloud KMS
usبرای مکان چندمنطقهای Cloud Firestorenam5استفاده کنید. - از مکان چندمنطقهای Cloud KMS
europeبرای مکان چندمنطقهای Cloud Firestoreeur3استفاده کنید.
- از مکان چندمنطقهای Cloud KMS
در پروژه Google Cloud که میخواهید کلیدهایتان را در آن مدیریت کنید، موارد زیر را تکمیل کنید:
بااستفاده از یکی از گزینههای زیر، حلقهکلید و کلید ایجاد کنید:
- حلقهکلید و کلید را مستقیماً در Cloud KMS ایجاد کنید.
- از کلید مدیریتشده خارجی استفاده کنید. کلید خارجی را ایجاد کنید و سپس کلید Cloud EKM را ایجاد کنید تا کلید ازطریق Cloud KMS دردسترس قرار گیرد.
پیکربندی تنظیمات IAM برای کلید
کنسول
برای اعطای نقش Cloud KMS به عامل سرویس خود، مراحل زیر را دنبال کنید. اگر میخواهید دانهبندی کمتری داشته باشید، میتوانید در سطح کلید یا حلقهکلید نیز اجازه اعطا کنید.
در کنسول Google Cloud، به صفحه IAM بروید.
روی افزودن کلیک کنید.
شناسه با قالب ایمیل را برای نماینده سرویس Cloud Firestore وارد کنید.
نقش رمزگذار/رمزگشای CryptoKey در Cloud KMS را انتخاب کنید.
روی ذخیره کردن کلیک کنید.
gcloud
نقش cloudkms.cryptoKeyEncrypterDecrypter را به
نماینده خدماتتان اعطا کنید:
gcloud kms keys add-iam-policy-binding KMS_KEY \
--keyring KMS_KEYRING\
--location KMS_LOCATION \
--member serviceAccount:SERVICE_AGENT_EMAIL \
--role roles/cloudkms.cryptoKeyEncrypterDecrypter \
--project KMS_PROJECT
موارد زیر را جایگزین کنید:
KMS_KEYبا نامی که به کلید اختصاص دادهایدKMS_KEYRINGبا حلقهکلید KMS که حاوی کلید استKMS_LOCATIONبا منطقهای که حاوی حلقهکلید استSERVICE_AGENT_EMAILبا شناسه قالب ایمیل برای عامل سرویسی که به آن دسترسی میدهیدKMS_PROJECTبا پروژهای که حاوی کلید است
پایانه باید پاسخی مشابه پاسخ زیر نمایش دهد:
Updated IAM policy for key KMS_KEY.
bindings:
- members:
- serviceAccount:
service-{project-number}@gcp-sa-firestore.iam.gserviceaccount.com
role: roles/cloudkms.cryptoKeyEncrypterDecrypter
ایجاد پایگاه داده با CMEK فعال
پساز ایجاد و پیکربندی کلیدهای CMEK، میتوانید پایگاه داده محافظتشده با CMEK ایجاد کنید. پایگاههای داده Cloud Firestore موجود که با رمزگذاری پیشفرض Google محافظت میشوند نمیتوانند برای استفاده از CMEK تبدیل شوند.
فقط هنگام ایجاد پایگاه داده CMEK-فعال میتوانید نوع رمزگذاری و کلید را انتخاب کنید.
کنسول
در کنسول Google Cloud، به صفحه پایگاههای داده بروید.
روی ایجاد پایگاه داده کلیک کنید.
حالت پایگاه داده را انتخاب کنید. روی ادامه کلیک کنید.
در صفحه پیکربندی پایگاه داده، شناسه پایگاه داده را وارد کنید.
مکانی را انتخاب کنید.
روی نمایش گزینههای رمزگذاری کلیک کنید و سپس کلید Cloud KMS را انتخاب کنید.
نام منبع را برای کلید CMEK که میخواهید برای پایگاه داده استفاده کنید انتخاب یا وارد کنید.
فهرست کلیدها به پروژه Google Cloud فعلی و مکان پایگاه دادهای که انتخاب کردهاید محدود است. برای استفاده از کلید از پروژه Google Cloud دیگری، روی عوض کردن پروژه یا وارد کردن دستی کلید کلیک کنید.
اگر از شما خواسته شد اجازه کلید را به حساب سرویس Cloud Firestore اعطا کنید، روی اعطا کردن کلیک کنید. برای ایجاد پایگاه داده CMEK، باید نقش
cloudkms.cryptoKeyEncrypterDecrypterبه حساب خدماتی Cloud Firestore شما اعطا شود.قوانین امنیتی را برای کارخواههای تلفن همراه و وب انتخاب کنید.
روی ایجاد پایگاه داده کلیک کنید.
پساز ایجاد پایگاه داده، میتوانید با مشاهده جزئیات پایگاه داده تأیید کنید که پایگاه داده CMEK-فعال است:
- اگر پایگاه داده شما با CMEK محافظت میشود، فیلد نوع رمزگذاری بهصورت مدیریتشده توسط مشتری نشان داده میشود و فیلد کلید رمزگذاری Cloud KMS مربوطه و نسخه کلیدی را که برای محافظت از این پایگاه داده استفاده میشود فهرست میکند.
- اگر پایگاه داده شما با CMEK محافظت نمیشود، فیلد نوع رمزگذاری بهصورت مدیریتشده توسط Google نشان داده میشود.
gcloud
قبلاز ایجاد پایگاه داده با CMEK فعال با Google Cloud CLI، جدیدترین نسخه را نصب کنید و به gcloud CLI اجازه دهید. برای اطلاعات بیشتر، به نصب gcloud CLI مراجعه کنید.
gcloud firestore databases create --location=FIRESTORE_DATABASE_LOCATION \
--database=DATABASE_ID \
--kms-key-name=KMS_KEY_NAME \
--project=FIRESTORE_PROJECT
موارد زیر را جایگزین کنید:
FIRESTORE_DATABASE_LOCATIONبا مکان Cloud Firestore برای پایگاه دادهDATABASE_IDبا شناسه پایگاه دادهKMS_KEY_NAMEبا نامی که به کلید اختصاص دادهاید. از نام کامل منبع برای کلید در قالب زیر استفاده کنید:projects/KMS_PROJECT/locations/KMS_LOCATION/keyRings/KMS_KEYRING_ID/cryptoKeys/KMS_KEY_IDFIRESTORE_PROJECTبا پروژهای که میخواهید برای پایگاه داده Cloud Firestore استفاده کنید
REST API
درخواست اچتیتیپی:
POST https://firestore.googleapis.com/v1/projects/{FIRESTORE_PROJECT}/databases
در بدنه درخواست، CMEK را در فیلد cmek_config.kms_key_name پیکربندی کنید.
روی شناسه منبع کامل کلید Cloud KMS تنظیم شده است. فقط کلیدی که در همان مکان این پایگاه داده باشد مجاز است.
این مقدار باید شناسه منبع کلید Cloud KMS در قالب
projects/{KMS_PROJECT}/locations/{KMS_LOCATION}/keyRings/{KMS_KEYRING_ID}/cryptoKeys/{KMS_KEY_ID} باشد
برای اطلاعات بیشتر درباره فیلدهای دیگر، به صفحه database create مراجعه کنید.
درخواست نمونه:
curl -X POST 'https://firestore.googleapis.com/v1/projects/FIRESTORE_PROJECT/databases?databaseId={DATABASE_ID}' \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-type: application/json" \
-d '{
"type":"FIRESTORE_NATIVE",
"locationId":"{FIRESTORE_DATABASE_LOCATION}",
"cmekConfig": {
"kmsKeyName":"projects/KMS_PROJECT/locations/KMS_LOCATION/keyRings/KMS_KEYRING_ID/cryptoKeys/KMS_KEY_ID"
}
}'
واسط خط فرمان Firebase
برای ایجاد پایگاه داده با CMEK فعال، از فیلد نام کلید KMS استفاده کنید. اگر پارامتر --kms-key-name را مشخص نکنید، Cloud Firestore بهطور پیشفرض پایگاه دادهای بدون CMEK ایجاد میکند.
firebase firestore:databases:create DATABASE_ID
--location LOCATION
--kms-key-name projects/KMS_PROJECT/locations/KMS_LOCATION/keyRings/KMS_KEYRING_ID/cryptoKeys/KMS_KEY_ID
--project FIRESTORE_PROJECT
موارد زیر را جایگزین کنید:
DATABASE_IDبا شناسه پایگاه دادهتانLOCATIONبا مکان پایگاه دادهتانKMS_PROJECTبا پروژهای که حاوی کلید CMEK شما استKMS_LOCATIONبا مکانی که حاوی کلید CMEK و حلقهکلید شما استKMS_KEYRING_IDبا شناسه حلقهکلید CMEK شماFIRESTORE_PROJECTبا پروژهای که میخواهید برای پایگاه داده Cloud Firestore استفاده کنید
تأیید کنید که پایگاه داده Cloud Firestore شما با واسط خط فرمان Firebase محافظت میشود:
firebase firestore:databases:get DATABASE_ID --project FIRESTORE_PROJECT
اطلاعات CMEK زیر در پیام پاسخ نشان داده میشود:
- فیلد نام کلید KMS نام کامل منبع کلید را که برای رمزگذاری پایگاه داده CMEK Cloud Firestore شما استفاده میشود ارائه میدهد.
- فیلد نسخههای کلید فعال فهرستی از همه نسخههای کلید را که درحالحاضر توسط این پایگاه داده CMEK استفاده میشود ارائه میدهد. درطول چرخش کلید، میتوانید چندین نسخه کلید فعال داشته باشید.
Terraform
برای ایجاد پایگاه داده با CMEK فعال، از منبع google_firestore_database استفاده کنید. برای اطلاعات و نمونههای بیشتر، به
google_firestore_database مراجعه کنید.
resource "google_firestore_database" "database" {
project = "FIRESTORE_PROJECT"
name = "DATABASE_ID"
location_id = "FIRESTORE_DATABASE_LOCATION"
type = "DATABASE_TYPE"
cmek_config {
kms_key_name = "KMS_KEY_NAME"
}
}
موارد زیر را جایگزین کنید:
FIRESTORE_PROJECTبا پروژهای که میخواهید برای پایگاه داده Cloud Firestore استفاده کنیدDATABASE_IDبا شناسه پایگاه دادهFIRESTORE_DATABASE_LOCATIONبا مکان Cloud Firestore برای پایگاه دادهDATABASE_TYPEباFIRESTORE_NATIVEبرای حالت «بومی» یاDATASTORE_MODEبرای حالت Datastore.KMS_KEY_NAMEبا نامی که به کلید اختصاص دادهاید. از نام کامل منبع برای کلید در قالب زیر استفاده کنید:projects/KMS_PROJECT/locations/KMS_LOCATION/keyRings/KMS_KEYRING_ID/cryptoKeys/KMS_KEY_ID
دسترسی به پایگاه داده محافظتشده با CMEK
همه عملیات خواندن، نوشتن، و پُرسمان ارسالشده به پایگاه داده محافظتشده با CMEK باید عملکردی مشابه پایگاه داده رمزگذاریشده پیشفرض Google داشته باشد. برای مثال، لازم نیست برای هر درخواست کلید ارائه کنید.
بازیابی پایگاه داده محافظتشده با CMEK
قبلاز بازیابی پایگاه داده محافظتشده با CMEK از نسخه پشتیبان:
- تصمیم بگیرید که میخواهید پایگاه داده را به رمزگذاری CMEK، به رمزگذاری پیشفرض Google (غیر CMEK)، یا به همان رمزگذاری نسخه پشتیبان بازیابی کنید.
کلید (نسخه اصلی) و نسخه کلیدی را که برای رمزگذاری نسخه پشتیبان استفاده کردهاید آماده کنید. هم کلید و هم نسخه کلید را فعال کنید.
gcloud
بازیابی پایگاه داده محافظتشده با CMEK به رمزگذاری CMEK
برای بازیابی به رمزگذاری CMEK، فرمان
gcloud firestore databases restore
را با پرچمهای اختیاری encryption-type و kms-key-name اجرا کنید تا نوع رمزگذاری را برای پایگاه داده بازیابیشده پیکربندی کنید. اگر نوع رمزگذاری را مشخص نکنید، پایگاه داده بازیابیشده از همان پیکربندی رمزگذاری نسخه پشتیبان استفاده خواهد کرد.
gcloud firestore databases restore
--encryption-type=customer-managed-encryption
--kms-key-name=KMS_KEY_NAME
KMS_KEY_NAME را با نامی که به کلید اختصاص دادهاید جایگزین کنید. از نام کامل منبع برای کلید در قالب زیر استفاده کنید:
projects/KMS_PROJECT/locations/KMS_LOCATION/keyRings/KMS_KEYRING_ID/cryptoKeys/KMS_KEY_ID
بازیابی پایگاه داده محافظتشده با CMEK به رمزگذاری پیشفرض
برای بازیابی به رمزگذاری پیشفرض Google (غیر CMEK)، پرچم encryption-type را بهصورت زیر تنظیم کنید:
gcloud firestore databases restore
--encryption-type=google-default-encryption
بازیابی پایگاه داده محافظتشده با CMEK به همان نوع رمزگذاری نسخه پشتیبان
برای بازیابی به همان نوع رمزگذاری نسخه پشتیبان، پرچم encryption-type را بهصورت زیر تنظیم کنید:
gcloud firestore databases restore --encryption-type=use-source-encryption
واسط خط فرمان Firebase
بازیابی پایگاه داده محافظتشده با CMEK به رمزگذاری CMEK
برای بازیابی به رمزگذاری CMEK، از پرچم اختیاری encryption-type و kms-key-name استفاده کنید.
اگر نوع رمزگذاری را مشخص نکنید، پایگاه داده بازیابیشده از همان پیکربندی رمزگذاری نسخه پشتیبان استفاده خواهد کرد.
firebase firestore:databases:restore \
--database DATABASE_ID \
--backup 'projects/FIRESTORE_PROJECT/locations/FIRESTORE_LOCATION/backups/BACKUP_ID' \
--encryption-type CUSTOMER_MANAGED_ENCRYPTION \
--kms-key-name projects/KMS_PROJECT/locations/KMS_LOCATION/keyRings/KMS_KEYRING_ID/cryptoKeys/KMS_KEY_ID \
--project FIRESTORE_PROJECT
موارد زیر را جایگزین کنید:
DATABASE_IDبا شناسه پایگاه دادهتانFIRESTORE_PROJECTبا پروژهای که میخواهید برای پایگاه داده Cloud Firestore استفاده کنیدFIRESTORE_LOCATIONبا مکان پایگاه داده Cloud FirestoreBACKUP_IDبا شناسه نسخه پشتیبان شماKMS_PROJECTبا پروژهای که حاوی کلید CMEK شما استKMS_LOCATIONبا مکانی که حاوی کلید CMEK و حلقهکلید شما استKMS_KEYRING_IDبا شناسه حلقهکلید CMEK شما
تأیید کنید که پایگاه داده Cloud Firestore بازیابیشده شما با CMEK رمزگذاری شده است:
firebase firestore:databases:get DATABASE_ID --project FIRESTORE_PROJECT
بازیابی پایگاه داده محافظتشده با CMEK به رمزگذاری پیشفرض
برای بازیابی به رمزگذاری پیشفرض Google (غیر CMEK)، پرچم encryption-type را بهصورت زیر تنظیم کنید:
firebase firestore:databases:restore \
--database DATABASE_ID \
--backup 'projects/FIRESTORE_PROJECT/locations/FIRESTORE_LOCATION/backups/BACKUP_ID' \
--encryption-type GOOGLE_DEFAULT_ENCRYPTION \
--project FIRESTORE_PROJECT
موارد زیر را جایگزین کنید:
DATABASE_IDبا شناسه پایگاه دادهتانFIRESTORE_PROJECTبا پروژهای که میخواهید برای پایگاه داده Cloud Firestore استفاده کنیدFIRESTORE_LOCATIONبا مکان پایگاه داده Cloud FirestoreBACKUP_IDبا شناسه نسخه پشتیبان شما
بازیابی پایگاه داده محافظتشده با CMEK به همان نوع رمزگذاری نسخه پشتیبان
برای بازیابی به همان نوع رمزگذاری نسخه پشتیبان، پرچم encryption-type را بهصورت زیر تنظیم کنید:
firebase firestore:databases:restore \
--database DATABASE_IDD \
--backup 'projects/FIRESTORE_PROJECT/locations/FIRESTORE_LOCATION/backups/BACKUP_ID' \
--encryption-type USE_SOURCE_ENCRYPTION
موارد زیر را جایگزین کنید:
DATABASE_IDبا شناسه پایگاه دادهتانFIRESTORE_PROJECTبا پروژهای که میخواهید برای پایگاه داده Cloud Firestore استفاده کنیدFIRESTORE_LOCATIONبا مکان پایگاه داده Cloud FirestoreBACKUP_IDبا شناسه نسخه پشتیبان شما
همسانهسازی پایگاه داده محافظتشده با CMEK
قبلاز شبیهسازی پایگاه داده محافظتشده با CMEK:
- تصمیم بگیرید که میخواهید پایگاه داده را به رمزگذاری CMEK، به رمزگذاری پیشفرض Google (غیر CMEK)، یا به همان رمزگذاری پایگاه داده منبع شبیهسازی کنید.
کلید (نسخه اصلی) و نسخه کلیدی را که برای رمزگذاری پایگاه داده منبع استفاده کردهاید آماده کنید. هم کلید و هم نسخه کلید را فعال کنید.
gcloud
همسانهسازی پایگاه داده محافظتشده با CMEK در رمزگذاری CMEK
برای کلون کردن به رمزگذاری CMEK، فرمان
gcloud firestore databases clone
را با پرچمهای اختیاری encryption-type و kms-key-name اجرا کنید تا نوع رمزگذاری را برای پایگاه داده کلونشده پیکربندی کنید. اگر نوع رمزگذاری را مشخص نکنید، پایگاه داده کلونشده از همان پیکربندی رمزگذاری پایگاه داده منبع استفاده خواهد کرد.
gcloud firestore databases clone \
--encryption-type=customer-managed-encryption \
--kms-key-name=KMS_KEY_NAME
KMS_KEY_NAME را با نامی که به کلید اختصاص دادهاید جایگزین کنید. از نام کامل منبع برای کلید در قالب زیر استفاده کنید:
projects/KMS_PROJECT/locations/KMS_LOCATION/keyRings/KMS_KEYRING_ID/cryptoKeys/KMS_KEY_ID
همسانهسازی پایگاه داده محافظتشده با CMEK به رمزگذاری پیشفرض
برای کلون کردن به رمزگذاری پیشفرض Google (غیر CMEK)،
پرچم encryption-type را بهصورت زیر تنظیم کنید:
gcloud firestore databases clone \
--encryption-type=google-default-encryption
کلون کردن پایگاه داده محافظتشده با CMEK به همان نوع رمزگذاری پایگاه داده منبع
برای کلون کردن به همان نوع رمزگذاری پایگاه داده منبع، پرچم
encryption-type را بهصورت زیر تنظیم کنید:
gcloud firestore databases clone \
--encryption-type=use-source-encryption
اگر --encryption-type نامشخص باشد، این رفتار پیشفرض است.
واسط خط فرمان Firebase
همسانهسازی پایگاه داده محافظتشده با CMEK در رمزگذاری CMEK
برای شبیهسازی به رمزگذاری CMEK، فرمان
firebase firestore:databases:clone
را با پرچمهای اختیاری encryption-type و kms-key-name اجرا کنید تا نوع رمزگذاری را برای پایگاه داده شبیهسازیشده پیکربندی کنید. اگر نوع رمزگذاری را مشخص نکنید، پایگاه داده کلونشده از همان پیکربندی رمزگذاری پایگاه داده منبع استفاده خواهد کرد.
firebase firestore:databases:clone \
SOURCE_DATABASE \
DESTINATION_DATABASE \
--encryption-type=CUSTOMER_MANAGED_ENCRYPTION \
--kms-key-name=KMS_KEY_NAME
KMS_KEY_NAME را با نامی که به کلید اختصاص دادهاید جایگزین کنید. از نام کامل منبع برای کلید در قالب زیر استفاده کنید:
projects/KMS_PROJECT/locations/KMS_LOCATION/keyRings/KMS_KEYRING_ID/cryptoKeys/KMS_KEY_ID
همسانهسازی پایگاه داده محافظتشده با CMEK به رمزگذاری پیشفرض
برای کلون کردن به رمزگذاری پیشفرض Google (غیر CMEK)،
پرچم encryption-type را بهصورت زیر تنظیم کنید:
firebase firestore:databases:clone \
SOURCE_DATABASE \
DESTINATION_DATABASE \
--encryption-type=GOOGLE_DEFAULT_ENCRYPTION
کلون کردن پایگاه داده محافظتشده با CMEK به همان نوع رمزگذاری پایگاه داده منبع
برای کلون کردن به همان نوع رمزگذاری پایگاه داده منبع، پرچم
encryption-type را بهصورت زیر تنظیم کنید:
firebase firestore:databases:clone \
SOURCE_DATABASE \
DESTINATION_DATABASE \
--encryption-type=USE_SOURCE_ENCRYPTION
اگر --encryption-type نامشخص باشد، این رفتار پیشفرض است.
مشاهده کلید درحال استفاده
gcloud
میتوانید از فرمان databases describe gcloud CLI برای تأیید پیکربندی CMEK پایگاه داده استفاده کنید:
gcloud firestore databases describe --database=DATABASE_ID --project=FIRESTORE_PROJECT
باید اطلاعات CMEK را در فیلد cmekConfig در پاسخ ببینید
که مشابه موارد زیر است:
cmekConfig:
activeKeyVersion:
- projects/PROJECT_ID/locations/us/keyRings/KEYRING_NAME/cryptoKeys/KEY_NAME/cryptoKeyVersions/1
kmsKeyName: projects/PROJECT_ID/locations/us/keyRings/KEYRING_NAME/cryptoKeys/KEY_NAME
locationId: nam5
name: projects/PROJECT_ID/databases/DATABASE_ID
پاسخ شامل اطلاعات زیر است:
kmsKeyName: نام کامل منبع کلید برای کلیدی که برای رمزگذاری پایگاه داده محافظتشده با CMEK شما استفاده میشود.activeKeyVersion: فهرستی از همه نسخههای کلید که درحالحاضر توسط پایگاه داده محافظتشده با CMEK استفاده میشود. درطول چرخش کلید، میتوانید چندین نسخه کلید فعال داشته باشید. هم نسخه کلید قدیمی و هم نسخه کلید جدید باید درطول چرخش کلید دردسترس باشند. نسخه کلید قدیمی را تا زمانی که دیگر در فیلدactiveKeyVersionنشان داده نشود غیرفعال نکنید.
REST API
درخواست اچتیتیپی:
GET https://firestore.googleapis.com/v1/{name=projects/FIRESTORE_PROJECT/databases/DATABASE_ID}
در بدنه درخواست، CMEK را در فیلد cmek_config.kms_key_name پیکربندی کنید.
روی شناسه منبع کامل کلید Cloud KMS تنظیم شده است. فقط کلیدی که در همان مکان این پایگاه داده باشد مجاز است.
این مقدار باید شناسه منبع کلید Cloud KMS در قالب
projects/{KMS_PROJECT}/locations/{KMS_LOCATION}/keyRings/{KMS_KEYRING_ID}/cryptoKeys/{KMS_KEY_ID} باشد
برای اطلاعات بیشتر درباره فیلدهای دیگر، به
صفحه database create مراجعه کنید.
نمونه درخواست و پاسخ:
curl 'https://firestore.googleapis.com/v1/projects/FIRESTORE_PROJECT/databases/{DATABASE_ID}' \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-type: application/json"
—----------------------------------------- Response —--------------------------------------------
{
"name": "projects/FIRESTORE_PROJECT/databases/{DATABASE_ID}",
"locationId": "{FIRESTORE_DATABASE_LOCATION}",
"type": "FIRESTORE_NATIVE",
"cmekConfig": {
"kmsKeyName": "projects/{KMS_PROJECT}/locations/{KMS_LOCATION}/keyRings/{KMS_KEYRING_ID}/cryptoKeys/{KMS_KEY_ID}",
"activeKeyVersion": [
"projects/{KMS_PROJECT}/locations/{KMS_LOCATION}/keyRings/{KMS_KEYRING_ID}/cryptoKeys/{KMS_KEY_ID}/cryptoKeyVersions/1"
]
},
……
}
غیرفعال کردن کلید
برای غیرفعال کردن کلید مرتبط با پایگاه داده، مراحل زیر را تکمیل کنید:
- مشاهده نسخههای کلید درحال استفاده برای پایگاه داده.
- این نسخههای کلید درحال استفاده را غیرفعال کنید.
- منتظر بمانید تا تغییر اعمال شود و بررسی کنید که آیا دادهها دیگر دردسترس نیستند. تغییرات معمولاً ظرف چند دقیقه اعمال میشود، اما ممکن است تا ۳ ساعت طول بکشد.
وقتی کلید مورداستفاده پایگاه داده غیرفعال میشود، انتظار میرود که
استثنای FAILED_PRECONDITION با جزئیات بیشتر در پیام خطا دریافت شود،
برای مثال:
{ "error": { "code": 400, "message": "The customer-managed encryption key required by the requested resource is not accessible. Error reason: generic::permission_denied: Permission 'cloudkms.cryptoKeyVersions.useToEncrypt' denied on resource 'projects/FIRESTORE_PROJECT/locations/{KMS_LOCATION}/keyRings/{KMS_KEYRING_ID}/cryptoKeys/{KMS_KEY_ID}' (or it may not exist).", "status": "FAILED_PRECONDITION", "details": [ { "@type": "type.googleapis.com/google.rpc.DebugInfo", "detail": "The customer-managed encryption key required by the requested resource is not accessible. Error reason: generic::permission_denied: Permission 'cloudkms.cryptoKeyVersions.useToEncrypt' denied on resource 'projects/FIRESTORE_PROJECT/locations/{KMS_LOCATION}/keyRings/{KMS_KEYRING_ID}/cryptoKeys/{KMS_KEY_ID}' (or it may not exist)" } ] } }
فعال کردن کلید
برای فعال کردن مجدد کلید مرتبط با پایگاه داده، مراحل زیر را تکمیل کنید:
- مشاهده نسخههای کلید درحال استفاده برای پایگاه داده
- فعال کردن این نسخههای کلید درحال استفاده
- منتظر بمانید تا تغییر اعمال شود و بررسی کنید که آیا دادهها دیگر دردسترس نیستند. تغییرات معمولاً ظرف چند دقیقه اعمال میشود، اما ممکن است تا ۳ ساعت طول بکشد.
مشاهده گزارشهای ممیزی برای کلید Cloud KMS
قبلاز فعال کردن گزارشهای ممیزی «دسترسی به دادههای Cloud KMS»، باید با گزارشهای ممیزی Cloud آشنا باشید.
گزارشهای ممیزی «دسترسی به دادههای Cloud KMS» به شما نشان میدهد که چه زمانی Cloud Firestore یا هر محصول دیگری که برای استفاده از کلید CMEK شما پیکربندی شده است، فراخوانیهای رمزگذاری/رمزگشایی را به Cloud KMS انجام میدهد. Cloud Firestore برای هر درخواست داده، تماس رمزگذاری/رمزگشایی برقرار نمیکند، بلکه یک نظرسنجیکننده را حفظ میکند که کلید را بهطور دورهای بررسی میکند. نتایج نظرسنجی در گزارشهای ممیزی نشان داده میشود.
میتوانید گزارشهای ممیزی را در کنسول Google Cloud راهاندازی کنید و با آنها تعامل داشته باشید:
مطمئن شوید که ثبت گزارش برای Cloud KMS API در پروژهتان فعال باشد.
به Cloud Logging در کنسول Google Cloud بروید.
با افزودن خطوط زیر به «پرسمانساز»، ورودیهای گزارش را به کلید Cloud KMS خود محدود کنید:
resource.type="cloudkms_cryptokey" resource.labels.key_ring_id = KMS_KEYRING resource.labels.crypto_key_id = KMS_KEY resource.labels.location=KMS_LOCATIONموارد زیر را جایگزین کنید:
KMS_KEYبا نام کلید CMEKKMS_KEYRINGبا حلقهکلید KMS که حاوی کلید استKMS_LOCATIONبا مکان کلید و حلقهکلید
گزارش چند ورودی گزارش را تقریباً هر پنج دقیقه برای هر پایگاه داده نشان میدهد. ورودیهای گزارش شبیه این نمونهها است:
Info 2021-03-20 08:02:24.869 EDT Cloudkms.googleapis.com Decrypt projects/cloud-kms-project/locations/us-central1/keyRings/firestore-keys/cryptoKeys/my-cmek-key service-123456789123@gcp-sa-firestore.iam.gserviceaccount.com audit_log, method: "Decrypt", principal_email: "service-1234567891011@gcp-sa-firestore.iam.gserviceaccount.com" Info 2021-03-20 08:02:24.913 EDT Cloudkms.googleapis.com Encrypt projects/cloud-kms-project/locations/us-central1/keyRings/firestore-keys/cryptoKeys/my-cmek-key service-123456789123@gcp-sa-firestore.iam.gserviceaccount.com audit_log, method: "Encrypt", principal_email: "service-123456789123@gcp-sa-firestore.iam.gserviceaccount.com"
برای جزئیات درباره تفسیر گزارشهای ممیزی، به آشنایی با گزارشهای ممیزی مراجعه کنید.
پیکربندی خطمشی سازمان CMEK
برای مشخص کردن الزامات رعایت رمزگذاری برای پایگاههای داده Cloud Firestore در سازمانتان، از محدودیت خطمشی سازمان CMEK استفاده کنید.
الزامی کردن محافظت CMEK
constraints/gcp.restrictNonCmekServices را پیکربندی کنید تا برای ایجاد پایگاه داده Cloud Firestore، به CMEK نیاز باشد. محدودیت را روی deny تنظیم کنید و
firestore.googleapis.com را به فهرست رد اضافه کنید، برای مثال:
gcloud resource-manager org-policies deny gcp.restrictNonCmekServices is:firestore.googleapis.com --project=FIRESTORE_PROJECT
FIRESTORE_PROJECT را با پروژهای که میخواهید محدود شود جایگزین کنید.
برای کسب اطلاعات بیشتر درباره پیکربندی خطمشیهای سازمان، به ایجاد و ویرایش خطمشیها مراجعه کنید.
پساز اعمال خطمشی، اگر بخواهید پایگاه داده غیر-CMEK تحت پروژه تحتتأثیر قرارگرفته ایجاد کنید، استثنای FAILED_PRECONDITION و پیام خطا دریافت میکنید. برای مثال، استثنا به این شکل است:
{ "error": { "code": 400, "message": "Constraint 'constraints/gcp.restrictNonCmekServices' violated for 'projects/FIRESTORE_PROJECT' attempting to perform the operation 'google.firestore.admin.v1.FirestoreAdmin.CreateDatabase' with violated value 'firestore.googleapis.com'. See https://cloud.google.com/resource-manager/docs/organization-policy/org-policy-constraints for more information.", "status": "FAILED_PRECONDITION", "details": [ { "@type": "type.googleapis.com/google.rpc.PreconditionFailure", "violations": [ { "type": "constraints/gcp.restrictNonCmekServices", "subject": "orgpolicy:projects/FIRESTORE_PROJECT", "description": "Constraint 'constraints/gcp.restrictNonCmekServices' violated for 'projects/FIRESTORE_PROJECT' attempting to perform the operation 'google.firestore.admin.v1.FirestoreAdmin.CreateDatabase' with violated value 'firestore.googleapis.com'. See https://cloud.google.com/resource-manager/docs/organization-policy/org-policy-constraints for more information." } ]
محدود کردن استفاده از کلیدها برای CMEK
برای محدود کردن کلیدهای Cloud KMS که برای محافظت CMEK استفاده میشوند،
محدودیت constraints/gcp.restrictCmekCryptoKeyProjects را پیکربندی کنید.
بهعنوان محدودیت فهرست، مقادیر پذیرفتهشده نشانگرهای سلسلهمراتب منابع هستند (برای مثال، projects/PROJECT_ID، under:folders/FOLDER_ID، و under:organizations/ORGANIZATION_ID). با پیکربندی فهرستی از نشانگرهای سلسلهمراتب منابع و تنظیم محدودیت روی مجاز کردن، از این محدودیت استفاده کنید.
این پیکربندی سرویسهای پشتیبانیشده را محدود میکند تا کلیدهای CMEK فقط از پروژهها، پوشهها، و سازمانهای فهرستشده انتخاب شوند. درخواستهای ایجاد
منابع محافظتشده با CMEK در سرویسهای پیکربندیشده بدون
Cloud Firestore کلید از یکی از منابع مجاز موفقیتآمیز نخواهد بود.
مثال زیر فقط به کلیدهای ALLOWED_KEY_PROJECT_ID برای پایگاههای داده محافظتشده با CMEK در پروژه مشخصشده اجازه میدهد:
gcloud resource-manager org-policies allow gcp.restrictCmekCryptoKeyProjects \ under:projects/ALLOWED_KEY_PROJECT_ID \ --project=FIRESTORE_PROJECT
پساز اعمال خطمشی، اگر محدودیت را نقض کنید،
استثنای FAILED_PRECONDITION و پیام خطا دریافت میکنید. یک استثنا
بهصورت زیر است:
{ "error": { "code": 400, "message": "Constraint 'constraints/gcp.restrictCmekCryptoKeyProjects' violated for 'projects/FIRESTORE_PROJECT' attempting to perform the operation 'google.firestore.admin.v1.FirestoreAdmin.CreateDatabase' with violated value 'projects/{NOT_ALLOWED_KEY_PROJECT}'. See https://cloud.google.com/resource-manager/docs/organization-policy/org-policy-constraints for more information.", "status": "FAILED_PRECONDITION", "details": [ { "@type": "type.googleapis.com/google.rpc.PreconditionFailure", "violations": [ { "type": "constraints/gcp.restrictCmekCryptoKeyProjects", "subject": "orgpolicy:projects/FIRESTORE_PROJECT", "description": "Constraint 'constraints/gcp.restrictCmekCryptoKeyProjects' violated for 'projects/FIRESTORE_PROJECT' attempting to perform the operation 'google.firestore.admin.v1.FirestoreAdmin.CreateDatabase' with violated value 'projects/{NOT_ALLOWED_KEY_PROJECT}'. See https://cloud.google.com/resource-manager/docs/organization-policy/org-policy-constraints for more information." } ] } ] } }