استفاده از کلیدهای رمزگذاری مدیریت شده توسط مشتری (CMEK)

این صفحه نحوه انجام وظایف مربوط به کلیدهای رمزگذاری مدیریت‌شده توسط مشتری (CMEK) برای Cloud Firestore با سازگاری MongoDB را شرح می‌دهد. برای اطلاعات بیشتر در مورد CMEK به طور کلی، از جمله زمان و دلیل فعال کردن آن، به مستندات Cloud KMS مراجعه کنید.

کلیدهای CMEK خود را آماده کنید

قبل از اینکه بتوانید یک Cloud Firestore محافظت‌شده با CMEK با پایگاه داده سازگار با MongoDB ایجاد کنید، باید مراحل زیر را انجام دهید:

  1. درخواست دسترسی به Cloud Firestore با قابلیت CMEK سازگار با MongoDB .
  2. یک Cloud Firestore با عامل سرویس سازگاری MongoDB ایجاد (یا بازیابی) کنید .
  3. یک کلید CMEK ایجاد کنید .
  4. تنظیمات IAM را برای آن کلید پیکربندی کنید .

این مراحل را برای هر پروژه‌ای که شامل Cloud Firestore محافظت‌شده با CMEK با پایگاه‌های داده سازگار با MongoDB خواهد بود، تکمیل کنید. اگر بعداً یک کلید CMEK جدید ایجاد کنید، باید تنظیمات IAM را برای آن کلید پیکربندی کنید.

درخواست دسترسی

قبل از ایجاد Cloud Firestore با عامل سرویس سازگاری MongoDB، با پر کردن فرم درخواست دسترسی ، درخواست دسترسی به ویژگی CMEK را بدهید.

ایجاد یک Cloud Firestore با عامل سرویس سازگاری MongoDB

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

دستور services identity create را اجرا کنید تا عامل سرویسی که Cloud Firestore با سازگاری MongoDB از آن برای دسترسی به کلید CMEK از طرف شما استفاده می‌کند، ایجاد شود. این دستور، اگر حساب سرویس از قبل وجود نداشته باشد، آن را ایجاد می‌کند و سپس آن را نمایش می‌دهد.

gcloud beta services identity create \
    --service=firestore.googleapis.com \
    --project FIRESTORE_PROJECT

FIRESTORE_PROJECT با پروژه‌ای که قصد دارید برای Cloud Firestore خود با پایگاه‌های داده سازگار با MongoDB استفاده کنید، جایگزین کنید.

این دستور شناسه عامل سرویس را نمایش می‌دهد که مانند یک آدرس ایمیل قالب‌بندی شده است. رشته ایمیل خروجی را یادداشت کنید، زیرا در مرحله بعد از آن استفاده خواهید کرد.

Service identity created:
service-xxx@gcp-sa-firestore.

ایجاد یک کلید

شما می‌توانید از کلیدی که مستقیماً در Cloud KMS ایجاد شده یا کلیدی که از خارج مدیریت می‌شود و با Cloud External Key Manager در دسترس قرار می‌دهید، استفاده کنید.

محل قرارگیری کلید Cloud KMS باید با محل قرارگیری پایگاه داده Cloud Firestore با سازگاری MongoDB که با آن استفاده خواهد شد، یکسان باشد.

  • برای مکان‌های پایگاه داده منطقه‌ای ، از نام مکان یکسانی برای حلقه کلید، کلید و پایگاه داده استفاده کنید زیرا نام مکان‌ها نگاشت یک به یک دارند.

    برای مثال، اگر می‌خواهید یک پایگاه داده محافظت‌شده توسط CMEK در us-west1 ایجاد کنید، یک حلقه کلید ایجاد کنید و در us-west1 کلید بزنید.

  • برای مکان‌های پایگاه داده چند منطقه‌ای ، از نام مکان مکان چند منطقه‌ای KMS استفاده کنید:

    • از مکان چند منطقه‌ای Cloud us برای مکان چند منطقه‌ای Cloud Firestore با سازگاری MongoDB nam5 استفاده کنید.

    • از مکان چند منطقه‌ای Cloud KMS europe برای Cloud Firestore با سازگاری MongoDB در مکان چند منطقه‌ای eur3 استفاده کنید.

در پروژه Google Cloud که می‌خواهید کلیدهای خود را در آن مدیریت کنید، موارد زیر را تکمیل کنید:

  1. رابط برنامه‌نویسی کاربردی کلود کی‌ام‌اس (Cloud KMS API) را فعال کنید .

  2. با استفاده از یکی از گزینه‌های زیر، یک حلقه کلید و یک کلید بسازید:

تنظیمات IAM را برای کلید پیکربندی کنید

کنسول

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

  1. در کنسول گوگل کلود، به صفحه IAM بروید.

    به صفحه IAM بروید

  2. روی افزودن کلیک کنید.

  3. شناسه قالب‌بندی‌شده با ایمیل را برای Cloud Firestore خود با عامل سرویس سازگاری MongoDB وارد کنید.

  4. نقش رمزگذار/رمزگشای کلید رمزنگاری‌شده‌ی Cloud KMS را انتخاب کنید.

  5. روی ذخیره کلیک کنید.

جی‌کلاود

نقش 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.
role: roles/cloudkms.cryptoKeyEncrypterDecrypter

ایجاد یک پایگاه داده با قابلیت CMEK

پس از ایجاد و پیکربندی کلیدهای CMEK، می‌توانید یک پایگاه داده محافظت‌شده با CMEK ایجاد کنید. پایگاه‌های داده سازگار با MongoDB در Cloud Firestore که توسط رمزگذاری پیش‌فرض گوگل محافظت می‌شوند، قابل تبدیل به CMEK نیستند.

شما فقط زمانی می‌توانید نوع و کلید رمزگذاری را انتخاب کنید که یک پایگاه داده با قابلیت CMEK ایجاد کنید.

کنسول

  1. در کنسول گوگل کلود، به صفحه پایگاه‌های داده بروید.

    به صفحه پایگاه‌های داده بروید

  2. روی ایجاد پایگاه داده Firestore کلیک کنید.

  3. شناسه پایگاه داده را وارد کنید.

  4. نسخه سازمانی را انتخاب کنید.

  5. مکانی را برای پایگاه داده خود انتخاب کنید.

  6. روی نمایش گزینه‌های رمزگذاری کلیک کنید و سپس کلید Cloud KMS را انتخاب کنید.

  7. نام منبع کلید CMEK که می‌خواهید برای پایگاه داده استفاده کنید را انتخاب یا وارد کنید.

  8. فهرست کلیدها محدود به پروژه فعلی Google Cloud و محل پایگاه داده‌ای است که انتخاب کرده‌اید. برای استفاده از کلید یک پروژه Google Cloud دیگر، روی «تغییر پروژه» یا «وارد کردن کلید به صورت دستی» کلیک کنید.

  9. اگر از شما خواسته شد که به حساب سرویس سازگاری Cloud Firestore with MongoDB اجازه کلید بدهید، روی Grant کلیک کنید. برای ایجاد یک پایگاه داده CMEK، باید به حساب سرویس سازگاری Cloud Firestore with MongoDB شما، نقش cloudkms.cryptoKeyEncrypterDecrypter اعطا شود.

  10. قوانین امنیتی را برای کلاینت‌های موبایل و وب انتخاب کنید.

  11. روی ایجاد پایگاه داده کلیک کنید.

پس از ایجاد پایگاه داده، می‌توانید با مشاهده جزئیات پایگاه داده ، تأیید کنید که CMEK در پایگاه داده فعال است:

  • اگر پایگاه داده شما توسط CMEK محافظت می‌شود، فیلد نوع رمزگذاری به صورت مدیریت‌شده توسط مشتری نمایش داده می‌شود و فیلد کلید رمزگذاری ، سیستم مدیریت دانش ابری مربوطه و نسخه کلیدی که برای محافظت از این پایگاه داده استفاده می‌شود را فهرست می‌کند.
  • اگر پایگاه داده شما توسط CMEK محافظت نمی‌شود، فیلد نوع رمزگذاری به صورت مدیریت‌شده توسط گوگل نمایش داده می‌شود.

جی‌کلاود

قبل از ایجاد یک پایگاه داده با قابلیت CMEK با Google Cloud CLI ، آخرین نسخه را نصب کنید و gcloud CLI مجاز کنید. برای اطلاعات بیشتر، به نصب gcloud CLI مراجعه کنید.

gcloud firestore databases create \
    --location=FIRESTORE_DATABASE_LOCATION \
    --database=DATABASE_ID \
    --edition=enterprise \
    --kms-key-name=KMS_KEY_NAME \
    --project=FIRESTORE_PROJECT

موارد زیر را جایگزین کنید:

  • FIRESTORE_DATABASE_LOCATION به همراه موقعیت مکانی پایگاه داده
  • DATABASE_ID به همراه شناسه پایگاه داده
  • KMS_KEY_NAME با نامی که به کلید اختصاص داده‌اید، جایگزین کنید. از نام کامل منبع برای کلید به شکل زیر استفاده کنید:

    projects/ KMS_PROJECT /locations/ KMS_LOCATION /keyRings/ KMS_KEYRING_ID /cryptoKeys/ KMS_KEY_ID

  • FIRESTORE_PROJECT به همراه پروژه‌ای که قرار است برای Cloud Firestore شما با پایگاه داده سازگار با MongoDB استفاده شود

دسترسی به پایگاه داده محافظت شده توسط CMEK

تمام عملیات خواندن، نوشتن و پرس‌وجو که به یک پایگاه داده محافظت‌شده توسط CMEK ارسال می‌شود، باید مانند یک پایگاه داده رمزگذاری‌شده پیش‌فرض گوگل عمل کند. برای مثال، نیازی نیست برای هر درخواست، کلید ارائه دهید.

بازیابی پایگاه داده محافظت شده توسط CMEK

قبل از بازیابی پایگاه داده محافظت شده توسط CMEK از یک نسخه پشتیبان:

  • تصمیم بگیرید که آیا می‌خواهید پایگاه داده را به رمزگذاری CMEK، به رمزگذاری پیش‌فرض گوگل (غیر CMEK) یا به همان رمزگذاری نسخه پشتیبان بازیابی کنید.
  • کلید (نسخه اصلی) و نسخه کلیدی که برای رمزگذاری نسخه پشتیبان استفاده کرده‌اید را آماده کنید. هم کلید و هم نسخه کلید را فعال کنید.

جی‌کلاود

بازیابی پایگاه داده محافظت شده با 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 به رمزگذاری پیش‌فرض

برای بازیابی به رمزگذاری پیش‌فرض گوگل (غیر CMEK)، پرچم encryption-type را به روش زیر تنظیم کنید:

gcloud firestore databases restore \
--encryption-type=google-default-encryption

بازیابی یک پایگاه داده محافظت شده توسط CMEK به همان نوع رمزگذاری پشتیبان

برای بازیابی به همان نوع رمزگذاری مانند نسخه پشتیبان، پرچم encryption-type را به روش زیر تنظیم کنید:

gcloud firestore databases restore --encryption-type=use-source-encryption

رابط خط فرمان فایربیس

بازیابی پایگاه داده محافظت شده با 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 شما با پایگاه داده سازگار با MongoDB استفاده شود
  • FIRESTORE_LOCATION با موقعیت مکانی Cloud Firestore شما با پایگاه داده سازگار با MongoDB
  • BACKUP_ID با شناسه نسخه پشتیبان شما
  • KMS_PROJECT با پروژه‌ای که حاوی کلید CMEK شماست
  • KMS_LOCATION با مکانی که کلید CMEK و حلقه کلید شما در آن قرار دارد
  • KMS_KEYRING_ID با شناسه حلقه کلید CMEK شما

تأیید کنید که Cloud Firestore بازیابی شده شما با پایگاه داده سازگاری MongoDB با CMEK رمزگذاری شده است:

firebase firestore:databases:get DATABASE_ID --project FIRESTORE_PROJECT

بازیابی پایگاه داده محافظت شده توسط CMEK به رمزگذاری پیش‌فرض

برای بازیابی به رمزگذاری پیش‌فرض گوگل (غیر 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 شما با پایگاه داده سازگار با MongoDB استفاده شود
  • FIRESTORE_LOCATION با موقعیت مکانی Cloud Firestore شما با پایگاه داده سازگار با MongoDB
  • BACKUP_ID با شناسه نسخه پشتیبان شما

بازیابی یک پایگاه داده محافظت شده توسط CMEK به همان نوع رمزگذاری پشتیبان

برای بازیابی به همان نوع رمزگذاری مانند نسخه پشتیبان، پرچم encryption-type را به روش زیر تنظیم کنید:

firebase firestore:databases:restore \
--database DATABASE_ID \
--backup 'projects/FIRESTORE_PROJECT/locations/FIRESTORE_LOCATION/backups/BACKUP_ID' \
--encryption-type USE_SOURCE_ENCRYPTION

موارد زیر را جایگزین کنید:

  • DATABASE_ID با شناسه پایگاه داده شما
  • FIRESTORE_PROJECT به همراه پروژه‌ای که قرار است برای Cloud Firestore شما با پایگاه داده سازگار با MongoDB استفاده شود
  • FIRESTORE_LOCATION با موقعیت مکانی Cloud Firestore شما با پایگاه داده سازگار با MongoDB
  • BACKUP_ID با شناسه نسخه پشتیبان شما

کلون کردن یک پایگاه داده محافظت شده توسط CMEK

قبل از کلون کردن یک پایگاه داده محافظت شده توسط CMEK:

  • تصمیم بگیرید که آیا می‌خواهید پایگاه داده را با رمزگذاری CMEK، رمزگذاری پیش‌فرض گوگل (غیر CMEK) یا با همان رمزگذاری پایگاه داده منبع، کلون کنید.
  • کلید (نسخه اصلی) و نسخه کلیدی که برای رمزگذاری پایگاه داده منبع استفاده کرده‌اید را آماده کنید. هم کلید و هم نسخه کلید را فعال کنید.

جی‌کلاود

کلون کردن یک پایگاه داده محافظت شده با CMEK به رمزگذاری CMEK

برای کلون کردن به رمزگذاری CMEK، دستور کلون پایگاه‌های داده gcloud alpha firestore را با پرچم‌های اختیاری encryption-type و kms-key-name اجرا کنید تا نوع رمزگذاری را برای پایگاه داده کلون شده پیکربندی کنید. اگر نوع رمزگذاری را مشخص نکنید، پایگاه داده کلون شده از همان پیکربندی رمزگذاری پایگاه داده منبع استفاده خواهد کرد.

gcloud alpha 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 به رمزگذاری پیش‌فرض

برای کپی کردن به رمزگذاری پیش‌فرض گوگل (غیر CMEK)، پرچم encryption-type را به روش زیر تنظیم کنید:

gcloud alpha firestore databases clone \
--encryption-type=google-default-encryption

یک پایگاه داده محافظت شده با CMEK را به همان نوع رمزگذاری پایگاه داده منبع کلون کنید

برای کلون کردن به همان نوع رمزگذاری پایگاه داده منبع، پرچم encryption-type را به روش زیر تنظیم کنید:

gcloud alpha firestore databases clone \
--encryption-type=use-source-encryption

مشاهده کلید در حال استفاده

جی‌کلاود

شما می‌توانید از دستور 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 ظاهر نشود، غیرفعال نکنید.

API رست

درخواست HTTP:

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"

پاسخ نمونه:

{
  "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"
    ]
  },
  ...
}

غیرفعال کردن یک کلید

برای غیرفعال کردن یک کلید مرتبط با یک پایگاه داده، موارد زیر را تکمیل کنید:

  1. مشاهده نسخه‌های کلیدی مورد استفاده برای یک پایگاه داده
  2. غیرفعال کردن آن نسخه‌های کلیدی
  3. منتظر بمانید تا تغییر اعمال شود و بررسی کنید که آیا داده‌ها دیگر قابل دسترسی نیستند یا خیر. تغییرات معمولاً ظرف چند دقیقه اعمال می‌شوند، اما می‌توانند تا ۳ ساعت طول بکشند.

وقتی کلیدی که توسط یک پایگاه داده استفاده می‌شود غیرفعال باشد، انتظار داشته باشید که یک خطای INVALID_ARGUMENT با جزئیات بیشتر در پیام خطا دریافت کنید، برای مثال:

{
  "error": {
    "code": 400,
    "message": "Failed: (InvalidArgument) The customer-managed encryption key required by the requested resource is not accessible. Error reason: projects/{FIRESTORE_PROJECT}/locations/{KMS_LOCATION}/keyRings/{KMS_KEYRING_ID}/cryptoKeys/{KMS_KEY_ID}/cryptoKeyVersions/1 is not enabled, current state is: DISABLED.",
    "status": "INVALID_ARGUMENT",
    "details": [
      {
        "@type": "type.googleapis.com/google.rpc.DebugInfo",
        "detail": "Failed: (InvalidArgument) The customer-managed encryption key required by the requested resource is not accessible. Error reason: projects/{FIRESTORE_PROJECT}/locations/{KMS_LOCATION}/keyRings/{KMS_KEYRING_ID}/cryptoKeys/{KMS_KEY_ID}/cryptoKeyVersions/1 is not enabled, current state is: DISABLED."
      }
    ]
  }
}

فعال کردن یک کلید

برای فعال کردن مجدد کلید مرتبط با یک پایگاه داده، موارد زیر را تکمیل کنید:

  1. مشاهده نسخه‌های کلیدی مورد استفاده برای یک پایگاه داده
  2. فعال کردن آن نسخه‌های کلیدی
  3. منتظر بمانید تا تغییر اعمال شود و بررسی کنید که آیا داده‌ها دیگر قابل دسترسی نیستند یا خیر. تغییرات معمولاً ظرف چند دقیقه اعمال می‌شوند، اما می‌توانند تا ۳ ساعت طول بکشند.

مشاهده گزارش‌های حسابرسی برای کلید Cloud KMS

قبل از اینکه گزارش‌های حسابرسی Cloud KMS Data Access را فعال کنید، باید با گزارش‌های حسابرسی Cloud آشنا باشید.

گزارش‌های حسابرسی Cloud KMS Data Access به شما نشان می‌دهد که چه زمانی Cloud Firestore با سازگاری MongoDB یا هر محصول دیگری که برای استفاده از کلید CMEK شما پیکربندی شده است، فراخوانی‌های رمزگذاری یا رمزگشایی را به Cloud KMS انجام می‌دهد. Cloud Firestore با سازگاری MongoDB برای هر درخواست داده، فراخوانی رمزگذاری یا رمزگشایی صادر نمی‌کند، بلکه در عوض یک poller را نگهداری می‌کند که کلید را به صورت دوره‌ای بررسی می‌کند. نتایج نظرسنجی در گزارش‌های حسابرسی ظاهر می‌شود.

می‌توانید گزارش‌های حسابرسی را در کنسول Google Cloud تنظیم و با آنها تعامل داشته باشید:

  1. مطمئن شوید که قابلیت ثبت وقایع (logging) برای Cloud KMS API در پروژه شما فعال است .

  2. در کنسول گوگل کلود به Cloud Logging بروید.

    به Cloud Logging بروید

  3. با اضافه کردن خطوط زیر به سازنده‌ی کوئری، ورودی‌های لاگ را به کلید 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 با نام کلید CMEK
    • KMS_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.
    audit_log, method: "Decrypt", principal_email: "service-1234567891011@gcp-sa-firestore."
    
    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.
    audit_log, method: "Encrypt", principal_email: "service-123456789123@gcp-sa-firestore."
    

برای جزئیات بیشتر در مورد تفسیر گزارش‌های حسابرسی، به بخش «درک گزارش‌های حسابرسی» مراجعه کنید.

پیکربندی یک سیاست سازمانی CMEK

برای مشخص کردن الزامات انطباق رمزگذاری برای Cloud Firestore با پایگاه‌های داده سازگاری MongoDB در سازمان خود، از یک محدودیت سیاست سازمانی CMEK استفاده کنید.

نیاز به محافظت CMEK

constraints/gcp.restrictNonCmekServices را طوری پیکربندی کنید که CMEK را برای Cloud Firestore با ایجاد پایگاه داده سازگاری MongoDB الزامی کند. محدودیت را روی deny تنظیم کنید و firestore.googleapis.com به لیست deny اضافه کنید، برای مثال:

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 ). با پیکربندی لیستی از شاخص‌های سلسله مراتب منابع و تنظیم محدودیت روی Allow ، از این محدودیت استفاده کنید. این پیکربندی، سرویس‌های پشتیبانی شده را محدود می‌کند تا کلیدهای CMEK فقط از پروژه‌ها، پوشه‌ها و سازمان‌های فهرست شده قابل انتخاب باشند. درخواست‌ها برای ایجاد منابع محافظت شده با CMEK در سرویس‌های پیکربندی شده بدون داشتن یک Cloud Firestore با کلید سازگاری MongoDB از یکی از منابع مجاز، موفقیت‌آمیز نیستند.

مثال زیر فقط کلیدهای ALLOWED_KEY_PROJECT_ID را برای پایگاه‌های داده محافظت‌شده توسط CMEK در پروژه مشخص‌شده مجاز می‌داند:

gcloud resource-manager org-policies allow gcp.restrictCmekCryptoKeyProjects \
under:projects/<var>ALLOWED_KEY_PROJECT_ID</var> \
--project=<var>FIRESTORE_PROJECT</var>

پس از اعمال این سیاست، در صورت نقض محدودیت، خطای 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."
          }
        ]
      }
    ]
  }
}

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