این صفحه نحوه انجام وظایف مربوط به کلیدهای رمزگذاری مدیریت شده توسط مشتری (CMEK) را برای Cloud Firestore شرح می دهد. برای اطلاعات بیشتر درباره CMEK به طور کلی، از جمله زمان و چرایی فعال کردن آن، به مستندات Cloud KMS مراجعه کنید.
کلیدهای CMEK خود را آماده کنید
قبل از اینکه بتوانید یک پایگاه داده Cloud Firestore محافظت شده با CMEK ایجاد کنید، باید مراحل زیر را انجام دهید:
- درخواست دسترسی به ویژگی Cloud Firestore CMEK .
- یک عامل خدمات Cloud Firestore ایجاد کنید (یا بازیابی کنید) .
- یک کلید CMEK ایجاد کنید .
- تنظیمات IAM را برای آن کلید پیکربندی کنید .
این مراحل را برای هر پروژه ای که حاوی پایگاه داده های Cloud Firestore محافظت شده با CMEK است، تکمیل کنید. اگر بعداً یک کلید CMEK جدید ایجاد کنید، باید تنظیمات IAM را برای آن کلید پیکربندی کنید.
درخواست دسترسی
قبل از ایجاد یک عامل سرویس Cloud Firestore ، با پر کردن این فرم درخواست دسترسی به ویژگی CMEK را بدهید.
یک عامل خدمات Cloud Firestore ایجاد کنید
قبل از ایجاد یک کلید CMEK، باید یک عامل سرویس Cloud Firestore داشته باشید، که نوعی حساب سرویس مدیریت شده توسط Google است که Cloud Firestore برای دسترسی به کلید از آن استفاده می کند.
برای ایجاد عامل سرویسی که Cloud Firestore برای دسترسی به کلید CMEK از طرف شما از آن استفاده میکند، فرمان ایجاد هویت خدمات را اجرا کنید. این دستور اگر اکانت سرویس از قبل وجود نداشته باشد ایجاد می کند و سپس آن را نمایش می دهد.
gcloud beta services identity create \ --service=firestore.googleapis.com \ --projectFIRESTORE_PROJECT
پروژه ای را که قصد دارید برای پایگاه داده های Cloud Firestore خود استفاده کنید جایگزین FIRESTORE_PROJECT
کنید.
این دستور شناسه عامل سرویس را نمایش می دهد که مانند یک آدرس ایمیل فرمت شده است. رشته ایمیل خروجی را ضبط کنید، زیرا در مرحله بعد از آن استفاده خواهید کرد.
Service identity created: service-xxx@gcp-sa-firestore.iam.gserviceaccount.com
یک کلید ایجاد کنید
میتوانید از کلیدی که مستقیماً در Cloud KMS ایجاد شده است یا یک کلید مدیریتشده خارجی که با مدیریت کلید خارجی Cloud در دسترس قرار میدهید استفاده کنید.
مکان کلید 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 خود را وارد کنید.
نقش Cloud KMS CryptoKey Encrypter/Decrypter را انتخاب کنید.
روی ذخیره کلیک کنید.
نقش 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، به صفحه پایگاه داده بروید.
روی ایجاد پایگاه داده کلیک کنید.
حالت پایگاه داده خود را انتخاب کنید. روی Continue کلیک کنید.
در صفحه پیکربندی پایگاه داده خود ، شناسه پایگاه داده را وارد کنید.
یک مکان را انتخاب کنید.
روی Show Encryption Options کلیک کنید و سپس کلید Cloud KMS را انتخاب کنید.
نام منبع کلید CMEK را که می خواهید برای پایگاه داده استفاده کنید، انتخاب یا وارد کنید.
فهرست کلیدها به پروژه فعلی Google Cloud و مکان پایگاه داده ای که انتخاب کرده اید محدود می شود. برای استفاده از کلیدی از پروژه Google Cloud دیگر، روی Switch Project یا Enter Key به صورت دستی کلیک کنید.
اگر از شما خواسته شد مجوز کلید را به حساب سرویس Cloud Firestore بدهید، روی Grant کلیک کنید. برای ایجاد یک پایگاه داده CMEK، به حساب سرویس Cloud Firestore شما باید نقش
cloudkms.cryptoKeyEncrypterDecrypter
داده شود.قوانین امنیتی را برای مشتریان موبایل و وب انتخاب کنید.
روی ایجاد پایگاه داده کلیک کنید.
هنگامی که پایگاه داده ایجاد شد، می توانید با مشاهده جزئیات پایگاه داده تأیید کنید که پایگاه داده CMEK فعال است:
- اگر پایگاه داده شما توسط CMEK محافظت میشود، قسمت نوع رمزگذاری بهعنوان مدیریتشده توسط مشتری نشان داده میشود و فیلد کلید رمزگذاری ، Cloud KMS مربوطه و نسخه کلیدی را که برای محافظت از این پایگاه داده استفاده میشود، فهرست میکند.
- اگر پایگاه داده شما توسط CMEK محافظت نمی شود، فیلد نوع رمزگذاری به صورت مدیریت شده توسط Google نشان داده می شود.
قبل از ایجاد یک پایگاه داده با 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_ID
FIRESTORE_PROJECT
با پروژه برای استفاده برای پایگاه داده Cloud Firestore خود
درخواست HTTP:
ارسال 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"
}
}'
برای ایجاد یک پایگاه داده با CMEK فعال، از قسمت KMS Key Name استفاده کنید. اگر پارامتر --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 CLI محافظت می شود:
firebase firestore:databases:get DATABASE_ID --project FIRESTORE_PROJECT
اطلاعات CMEK زیر در پیام پاسخ ظاهر می شود:
- فیلد KMS Key Name نام کامل منبع کلید را ارائه میکند که برای رمزگذاری پایگاه داده Cloud Firestore CMEK شما استفاده میشود.
- قسمت Active Key Versions فهرستی از تمام نسخههای کلیدی که در حال حاضر توسط این پایگاه داده CMEK استفاده میشود، ارائه میکند. در طول چرخش کلید ، می توانید چندین نسخه کلید فعال داشته باشید.
برای ایجاد یک پایگاه داده با 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
برای حالت 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)، یا به همان رمزگذاری پشتیبان بازیابی کنید.
کلید (نسخه اصلی) و نسخه کلیدی را که برای رمزگذاری پشتیبان استفاده کرده اید، آماده کنید. هم نسخه کلید و هم نسخه کلید را فعال کنید.
یک پایگاه داده محافظت شده با CMEK را به رمزگذاری CMEK بازیابی کنید
برای بازگردانی به رمزگذاری CMEK، دستور بازگردانی پایگاههای داده آتشنشانی gcloud را با پرچمهای اختیاری 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
یک پایگاه داده محافظت شده با 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 Firestore شما -
BACKUP_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 Firestore شما -
BACKUP_ID
با شناسه پشتیبان شما
یک پایگاه داده محافظت شده با CMEK را به همان نوع رمزگذاری به عنوان پشتیبان بازیابی کنید
برای بازیابی به همان نوع رمزگذاری به عنوان پشتیبان، پرچم encryption-type
را به روش زیر تنظیم کنید:
firebase firestore:databases:restore \
--database DATABASE_ID D \
--backup 'projects/FIRESTORE_PROJECT /locations/FIRESTORE_LOCATION /backups/BACKUP_ID ' \
--encryption-type USE_SOURCE_ENCRYPTION
موارد زیر را جایگزین کنید:
-
DATABASE_ID
با شناسه پایگاه داده شما -
FIRESTORE_PROJECT
با پروژه برای استفاده برای پایگاه داده Cloud Firestore خود -
FIRESTORE_LOCATION
با مکان پایگاه داده Cloud Firestore شما -
BACKUP_ID
با شناسه پشتیبان شما
مشاهده کلید در حال استفاده
برای تایید پیکربندی CMEK پایگاه داده میتوانید از دستور دیتابیس توصیف gcloud CLI استفاده کنید:
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
ظاهر نشود غیرفعال نکنید.
درخواست 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"
—----------------------------------------- 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"
]
},
……
}
یک کلید را غیرفعال کنید
برای غیرفعال کردن کلید مرتبط با پایگاه داده، موارد زیر را تکمیل کنید:
- نسخه های کلیدی در حال استفاده برای پایگاه داده را مشاهده کنید .
- این نسخه های کلیدی در حال استفاده را غیرفعال کنید .
- منتظر بمانید تا تغییر اعمال شود و بررسی کنید که آیا داده ها دیگر در دسترس نیستند. تغییرات معمولاً در عرض چند دقیقه اعمال می شوند، اما ممکن است تا 3 ساعت طول بکشد.
هنگامی که یک کلید مورد استفاده توسط پایگاه داده غیرفعال است، انتظار داشته باشید که یک استثنا 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)" } ] } }
یک کلید را فعال کنید
برای فعال کردن مجدد کلید مرتبط با پایگاه داده، موارد زیر را تکمیل کنید:
- مشاهده نسخه های کلیدی در حال استفاده برای پایگاه داده
- این نسخه های کلیدی در حال استفاده را فعال کنید
- منتظر بمانید تا تغییر اعمال شود و بررسی کنید که آیا داده ها دیگر در دسترس نیستند. تغییرات معمولاً در عرض چند دقیقه اعمال می شوند، اما ممکن است تا 3 ساعت طول بکشد.
مشاهده گزارش های حسابرسی برای یک کلید Cloud KMS
قبل از اینکه گزارش های حسابرسی Cloud KMS Data Access را فعال کنید، باید با Cloud Audit Logs آشنا باشید.
گزارشهای حسابرسی دسترسی به دادههای Cloud KMS به شما نشان میدهند که Cloud Firestore یا هر محصول دیگری که برای استفاده از کلید CMEK شما پیکربندی شدهاند، تماسهایی را به Cloud KMS رمزگذاری/رمزگشایی میکنند. Cloud Firestore در هر درخواست داده تماس رمزگذاری/رمزگشایی صادر نمی کند، اما در عوض یک نظرسنجی نگه می دارد که به صورت دوره ای کلید را بررسی می کند. نتایج نظرسنجی در گزارش های حسابرسی ظاهر می شود.
میتوانید گزارشهای حسابرسی را در کنسول Google Cloud راهاندازی کرده و با آن تعامل داشته باشید:
مطمئن شوید که ورود به سیستم برای Cloud KMS API در پروژه شما فعال است .
در کنسول Google Cloud به Cloud Logging بروید.
با افزودن خطوط زیر به سازنده Query، ورودیهای گزارش را به کلید 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.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
را برای نیاز به CMEK برای ایجاد پایگاه داده Cloud Firestore پیکربندی کنید. محدودیت را برای 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
). از این محدودیت با پیکربندی فهرستی از شاخص های سلسله مراتب منابع و تنظیم محدودیت روی Allow استفاده کنید. این پیکربندی خدمات پشتیبانی شده را محدود می کند به طوری که کلیدهای 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." } ] } ] } }